酷壳 – CoolShell.cn


本站和网页 https://coolshell.cn/ 的作者无关,不对其内容负责。快照谨为网络故障时之索引,不代表被搜索网站的即时页面。

酷壳 – CoolShell.cn
Toggle navigation
酷 壳 – CoolShell
首页
推荐文章
本站插件
留言小本
关于酷壳
关于陈皓
RSS
<a title="把这个链接拖到你的Chrome收藏夹工具栏中" href='javascript:(function(){function c(){var e=document.createElement("link");e.setAttribute("type","text/css");e.setAttribute("rel","stylesheet");e.setAttribute("href",f);e.setAttribute("class",l);document.body.appendChild(e)}function h(){var e=document.getElementsByClassName(l);for(var t=0;te&&s.heightt&&s.width=w&&t<=b+w}function S(){var e=document.createElement("audio");e.setAttribute("class",l);e.src=i;e.loop=false;e.addEventListener("canplay",function(){setTimeout(function(){x(k)},500);setTimeout(function(){N();p();for(var e=0;e<O.length;e++){T(O[e])}},15500)},true);e.addEventListener("ended",function(){N();h()},true);e.innerHTML=" If you are reading this, it is because your browser does not support the audio element. We recommend that you get a new browser. ";document.body.appendChild(e);e.play()}function x(e){e.className+=" "+s+" "+o}function T(e){e.className+=" "+s+" "+u[Math.floor(Math.random()*u.length)]}function N(){var e=document.getElementsByClassName(s);var t=new RegExp("\\b"+s+"\\b");for(var n=0;n<e.length;){e[n].className=e[n].className.replace(t,"")}}var e=30;var t=30;var n=350;var r=350;var i="//s3.amazonaws.com/moovweb-marketing/playground/harlem-shake.mp3";var s="mw-harlem_shake_me";var o="im_first";var u=["im_drunk","im_baked","im_trippin","im_blown"];var a="mw-strobe_light";var f="//s3.amazonaws.com/moovweb-marketing/playground/harlem-shake-style.css";var l="mw_added_css";var b=g();var w=y();var C=document.getElementsByTagName("*");var k=null;for(var L=0;L<C.length;L++){var A=C[L];if(v(A)){if(E(A)){k=A;break}}}if(A===null){console.warn("Could not find a node of the right size. Please try a different page.");return}c();S();var O=[];for(var L=0;LHigh一下!
酷 壳 &#8211; CoolShell
享受编程和技术所带来的快乐 &#8211; Coding Your Ambition
Search for:
Search
感染新冠的经历
感染新冠的经历
2022年12月13日
陈皓 评论 16 条评论 60,119 人阅读
写一篇与技术无关的文章,供大家参考。我住北京朝阳,从上周三开始我家一家三口陆续发烧生病,自测抗原后,都是阳性。好消息是,这个奥密克戎跟一般的病毒性感冒差不多,没什么可怕的,不过,整个过程除了发病之外还有一些别的因为感染带出来的事,大家也需要知晓,以准备好,以免造成生活的不便,更好的照顾好自己和家人。
整个过程
我先说一下整个过程(我会不断更新这个过程,直到转阴)。说明一下,我孩子老婆都打过三针国产疫苗,孩子是科兴,老婆是北京生物,我完全没有打。
先是我家孩子(12 岁)。上周三(12 月 7 日),孩子早上起来就说头疼,一测体温,38 度 5,就停止上网课,老实休息了,我们并没给孩子吃什么药,到了晚上,孩子的体温到了 39.4,嗓子疼,我老婆用酒精给孩子物理降温(注:事实上最好别用酒精,因为会被皮肤吸收导致副作用),成功降到了 38.2 左右。周四(12 月 8 日),孩子的体温在 38.2 一天,我老婆给孩子吃了莲花清瘟,被我制止了,本来想上退烧药的,但是我想体温也不算高,能不吃就不吃,于是就让孩子冲了个复方感冒冲剂(其实里面含对乙酰氨基酚,后面会说)。周五(12 月 9 日),孩子不停地出汗,到下午体温正常了,然后咳嗽,鼻涕就来了,感冒症状来了,但精神不好,体虚无力。周末休息两天就基本没事了,也转阴了。
接下来就到我了。
&#8230;
阅读全文 Read More
(27 人打了分,平均分: 4.48 )Loading...
eBPF 介绍
eBPF 介绍
2022年12月10日
陈皓 评论 10 条评论 19,414 人阅读
很早前就想写一篇关于eBPF的文章,但是迟迟没有动手,这两天有点时间,所以就来写一篇,这文章主要还是简单的介绍eBPF 是用来干什么的,并通过几个示例来介绍是怎么玩的,这个技术非常非常之强,Linux 操作系统的观测性实在是太强大了,并在 BCC 加持下变得一览无余。这个技术不是一般的运维人员或是系统管理员可以驾驭的,这个还是要有底层系统知识并有一定开发能力的技术人员才能驾驭的了的。我在这篇文章的最后给了个彩蛋。
介绍
eBPF(extened Berkeley Packet Filter)是一种内核技术,它允许开发人员在不修改内核代码的情况下运行特定的功能。eBPF 的概念源自于 Berkeley Packet Filter(BPF),后者是由贝尔实验室开发的一种网络过滤器,可以捕获和过滤网络数据包。
出于对更好的 Linux 跟踪工具的需求,eBPF 从 dtrace中汲取灵感,dtrace 是一种主要用于 Solaris 和 BSD 操作系统的动态跟踪工具。与 dtrace 不同,Linux 无法全面了解正在运行的系统,因为它仅限于系统调用、库调用和函数的特定框架。在Berkeley Packet Filter  (BPF)(一种使用内核 VM 编写打包过滤代码的工具)的基础上,一小群工程师开始扩展 BPF 后端以提供与 dtrace 类似的功能集。 eBPF 诞生了。2014 年随 Linux 3.18 首次限量发布,充分利用 eBPF 至少需要 Linux 4.4 以上版本。
&#8230;
阅读全文 Read More
(8 人打了分,平均分: 3.63 )Loading...
聊聊团队协同和协同工具
聊聊团队协同和协同工具
2022年10月14日
陈皓 评论 49 条评论 18,619 人阅读
这两天跟 Cali 和 Rather 做了一个线上的 Podcast &#8211; Ep.5 一起聊聊团队协同。主要是从 IM 工具扩展开来聊了一下团队的协同和相应的工具,但是聊天不是深度思考,有一些东西我没有讲透讲好,所以,我需要把我更多更完整更结构化的想法形成文字。(注:聊天聊地比较详细,本文只是想表达我的主要想法)
国内外的企业 IM 的本质差别
国内企业级在线交流工具主要有:企业微信、钉钉、飞书,国外的则是:Slack、Discord这两大IM工具,你会发现,他们有很多不一样的东西,其中有两个最大的不同,一个是企业管理,一个是企业文化。
企业管理
Slack/Discrod 主要是通过建 Channel ,而国内的IM则主要是拉群。你可能会说,这不是一样的吗?其实是不一样的,很明显,Channel 的属性是相对持久的,而群的属性则是临时的,前者是可以是部门,可以是团队,可以是项目,可以是产品,可以是某种长期存在的职能(如:技术分享),而拉群则是相对来说临时起意的,有时候,同样的人群能被重复地拉出好几次,因为之前临时起意的事做完了,所以群就被人所遗忘了,后面再有事就再来。很明显,Channel 这种方式明显是有管理的属性的,而拉群则是没有管理的。
&#8230;
阅读全文 Read More
(58 人打了分,平均分: 4.41 )Loading...
从一次经历谈 TIME_WAIT 的那些事
从一次经历谈 TIME_WAIT 的那些事
2022年07月19日
陈皓 评论 30 条评论 29,441 人阅读
今天来讲一讲TCP 的 TIME_WAIT 的问题。这个问题尽人皆知,不过,这次遇到的是不太一样的场景,前两天也解决了,正好写篇文章,顺便把 TIME_WAIT 的那些事都说一说。对了,这个场景,跟我开源的探活小工具 EaseProbe 有关,我先说说这个场景里的问题,然后,顺着这个场景跟大家好好说一下这个事。
问题背景
先说一下背景,EaseProbe 是一个轻量独立的用来探活服务健康状况的小工具,支持http/tcp/shell/ssh/tls/host以及各种中间件的探活,然后,直接发送通知到主流的IM上,如:Slack/Telegram/Discrod/Email/Team,包括国内的企业微信/钉钉/飞书, 非常好用,用过的人都说好 😏。
这个探活工具在每次探活的时候,必须要从头开始建立整个网络链接,也就是说,需要从头开始进行DNS查询,建立TCP链接,然后进行通信,再关闭链接。这里,我们不会设置 TCP 的 KeepAlive 重用链接,因为探活工具除了要探活所远端的服务,还要探活整个网络的情况,所以,每次探活都需要从新来过,这样才能捕捉得到整个链路的情况。
&#8230;
阅读全文 Read More
(43 人打了分,平均分: 4.51 )Loading...
ETCD的内存问题
ETCD的内存问题
2022年05月05日
陈皓 评论 36 条评论 27,915 人阅读
今天跟大家分享一个etcd的内存大量占用的问题,这是前段时间在我们开源软件Easegress中遇到的问题,问题是比较简单的,但是我还想把前因后果说一下,包括,为什么要用etcd,使用etcd的用户场景,包括etcd的一些导致内存占用比较大的设计,以及最后一些建议。希望这篇文章不仅仅只是让你看到了一个简单的内存问题,还能让你有更多的收获。当然,也欢迎您关注我们的开源软件,给我们一些鼓励。
为什么要用ETCD
先说一下为什么要用etcd。先从一个我们自己做的一个API网关 &#8211; Easegress(源码)说起。
Easegress 是我们开发并开源的一个API应用网关产品,这个API应用网关不仅仅只是像nginx那样用来做一个反向代理,这个网关可以做的事很多,比如:API编排、服务发现、弹力设计(熔断、限流、重试等)、认证鉴权(JWT,OAuth2,HMAC等)、同样支持各种Cloud Native的架构如:微服务架构,Service Mesh,Serverless/FaaS的集成,并可以用于扛高并发、灰度发布、全链路压力测试、物联网……等更为高级的企业级的解决方案。所以,为了达到这些目标,在2017年的时候,我们觉得在现有的网关如Nginx上是无法演进出来这样的软件的,必需重新写一个(后来其他人也应该跟我们的想法一样,所以,Lyft写了一个Envoy。只不过,Envoy是用C++写的,而我用了技术门槛更低的Go语言)
另外,Easegress最核心的设计主要有三个:
&#8230;
阅读全文 Read More
(36 人打了分,平均分: 4.56 )Loading...
“一把梭:REST API 全用 POST”
“一把梭:REST API 全用 POST”
2022年02月13日
陈皓 评论 105 条评论 82,469 人阅读
写这篇文章的原因主要还是因为V2EX上的这个贴子,这个贴子中说——
“对接同事的接口,他定义的所有接口都是 post 请求,理由是 https 用 post 更安全,之前习惯使用 restful api ,如果说 https 只有 post 请求是安全的话?那为啥还需要 get 、put 、delete ?我该如何反驳他。”
然后该贴中大量的回复大概有这么几种论调,1)POST挺好的,就应该这么干,沟通少,2)一把梭,早点干完早点回家,3)吵赢了又怎么样?工作而已,优雅不能当饭吃。虽然评论没有一边倒,但是也有大量的人支持。然后,我在Twitter上嘲讽了一下,用POST干一切就像看到了来你家装修工人说,“老子干活就是用钉子钉一切,什么螺丝、螺栓、卡扣、插销……通通不用,钉枪一把梭,方便,快捷,安全,干完早回家……不过,还是有一些网友觉得用POST挺好的,而且可以节约时间。所以,正好,我在《我做系统架构的原则》中的“原则五”中反对API返回码无论对错全是200的返回那,我专门写下这一篇文章,以正视听。
这篇文章主要分成下面这几个部分:
为什么要用不同的HTTP动词?
Restful 进行复杂查询
几个主要问题的回应
POST 更安全吗?
全用 POST 可以节省时间沟通少吗?
早点回家的正确姿势
工作而已,优雅不能当饭吃
&#8230;
阅读全文 Read More
(188 人打了分,平均分: 4.62 )Loading...
谈谈公司对员工的监控
谈谈公司对员工的监控
2022年02月12日
陈皓 评论 26 条评论 50,339 人阅读
今天看到微博上有一个热点事件, 是一个关于某公司做的一个监控员工离职倾向的软件,从截图中可以看到员工访问招聘网站的次数,还有投递的简历以及搜索的关建词等等信息,通过这些信息分析员工的离职倾向。然后我发一个微博,说了一下,我以前工作过的公司无论外国公司还是中国公司都有这样的情况,收到一些人来问我相关的情况,所以,我想还是写篇文章详细地说一下,我对这种事情的看法。
本文分成下面个部分:
公司监控员工的技术手段有哪些?
为什么要监控员工?
外企和国企有什么不一样?
我对此事的看法
&#8230;
阅读全文 Read More
(68 人打了分,平均分: 4.49 )Loading...
网络数字身份认证术
网络数字身份认证术
2022年01月02日
陈皓 评论 13 条评论 29,102 人阅读
这篇文章是《HTTP API 认证授权术》的姊妹篇,在那篇文章中,主要介绍了 HTTP API 认证和授权技术中用到的 HTTP Basic, Digest Access, HMAC, OAuth, JWT 等各种方式,主要是 API 上用到的一些技术,这篇文章主要想说的是另一个话题——身份认证。也就是说,怎么确认这个数据就是这个人发出来的?
用户密码
要解决这个问题,我们先来看一个最简单的解——使用密码,通常来说,在网络上要证明一个人的身份的话,都需要这个人的一些私密而唯一的东西。比如,像密码这样的东西,很多地方,只要你提供了你的用户名+密码,就可以确定这个人是你(注明:关于密码管理,强密码设定,密码泄漏,密码破解以及密码哄骗不在这篇文章的话题中),也就是说,这个密码是非常私密的事,我们可以假设,这个事全世界只能有当事人一个人知道,所以,当事人得供正确的密码,我们就可以认证这个人了。
为了加强密码的安全程度,一般会使用 2FA(Two-factor authentication)或 MFA(Multi-factor authentication),双因认证或多因认证,这需要用户提供一个唯一的可信设备,比如用户的手机,然后通过验证手机短信,或是像 Google Authenticator  这样的动态口令来完成。这样的安全级别已经算是比较高了。如果能够再加上经常性的变更密码,那么安全级别就更好了。
&#8230;
阅读全文 Read More
(29 人打了分,平均分: 4.21 )Loading...
我做系统架构的一些原则
我做系统架构的一些原则
2021年12月21日
陈皓 评论 161 条评论 194,524 人阅读
工作 20 多年了,这 20 来年看到了很多公司系统架构,也看到了很多问题,在跟这些公司进行交流和讨论的时候,包括进行实施和方案比较的时候,都有很多各种方案的比较和妥协,因为相关的经历越来越多,所以,逐渐形成了自己的逻辑和方法论。今天,想写下这篇文章,把我的这些个人的经验和想法总结下来,希望能够让更多的人可以参考和借鉴,并能够做出更好的架构来。另外,我的这些思维方式和原则都针对于现有市面上众多不合理的架构和方案,所以,也算是一种“纠正”……(注意,这篇文章所说的这些架构上的原则,一般适用于相对比较复杂的业务,如果只是一些简单和访问量不大的应用,那么你可能会得出相反的结论)
原则一:关注于真正的收益而不是技术本身
对于软件架构来说,我觉得第一重要的是架构的收益,如果不说收益,只是为了技术而技术,而没有任何意义。对于技术收益来说,我觉得下面这几个收益是非常重要的:
是否可以降低技术门槛加快整个团队的开发流程。能够加快整个团队的工程流程,快速发布,是软件工程一直在解决的问题,所以,系统架构需要能够进行并行开发,并行上线和并行运维,而不会让某个团队成为瓶颈点。(注:就算拖累团队的原因是组织构架,也不妨碍我们做出并行的系统架构设计)
是否可以让整个系统可以运行的更稳定。要让整个系统可以运行的更为的稳定,提升整个系统的 SLA,就需要对有计划和无计划的停机做相应的解决方案(参看《关于高可用的架构》)
是否可以通过简化和自动化降低成本。最高优化的成本是人力成本,人的成本除了慢和贵,还有经常不断的 human error。如果不能降低人力成本,反而需要更多的人,那么这个架构设计一定是失败的。除此之外,是时间成本,资金成本。
如果一个系统架构不能在上面三个事上起到作用,那就没有意义了。
&#8230;
阅读全文 Read More
(193 人打了分,平均分: 4.72 )Loading...
源代码特洛伊木马攻击
源代码特洛伊木马攻击
2021年11月19日
陈皓 评论 23 条评论 34,145 人阅读
最近,我们在 Github 的 Code Review 中看到 Github 开始出现下面这个 Warning 信息—— “This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below.”也就是说我们的代码中有一些 bidirectional unicode 的文本,中文直译作 “双向文本”,意思是一些语言是从左到右的,而另一些则是是从右到左的(如:阿拉伯语),如果同一个文件里,即有从左向右的文本也有从右向左文本两种的混搭,那么,就叫bi-direction。术语通常缩写为“ BiDi ”或“ bidi ”。使用双向文本对于中国人来说并不陌生,因为中文又可以从左到右,也可以从右到左,还可以从上到下。
早期的计算机仅设计为基于拉丁字母的从左到右的方式。添加新的字符集和字符编码使许多其他从左到右的脚本能够得到支持,但不容易支持从右到左的脚本,例如阿拉伯语或希伯来语,并且将两者混合使用更是不可能。从右到左的脚本是通过ISO/IEC 8859-6和ISO/IEC 8859-8等编码引入的,通常以书写和阅读顺序存储字母。可以简单地将从左到右的显示顺序翻转为从右到左的显示顺序,但这样做会牺牲正确显示从左到右脚本的能力。通过双向文本支持,可以在同一页面上混合来自不同脚本的字符,而不管书写方向如何。
&#8230;
阅读全文 Read More
(36 人打了分,平均分: 4.50 )Loading...
Posts navigation
第 1 / 74 页12345678910...2030405060...»末页 »
Search for:
Search
本站公告 Twitter @haoel
极客时间专栏
最新文章
感染新冠的经历
eBPF 介绍
聊聊团队协同和协同工具
从一次经历谈 TIME_WAIT 的那些事
ETCD的内存问题
“一把梭:REST API 全用 POST”
谈谈公司对员工的监控
网络数字身份认证术
我做系统架构的一些原则
源代码特洛伊木马攻击
Go编程模式 : 泛型编程
如何做一个有质量的技术分享
Go 编程模式:k8s Visitor 模式
Go编程模式:Pipeline
Go编程模式:委托和反转控制
Go 编程模式:Go Generation
Go编程模式:Map-Reduce
Go 编程模式:Functional Options
Go 编程模式:错误处理
Go编程模式:切片,接口,时间和性能
百度为什么掉队了
程序员如何把控自己的职业
计时攻击 Timing Attacks
Rust语言的编程范式
与程序员相关的CPU缓存知识
MegaEase的远程工作文化
使用简单的逻辑方法进行独立思考
别让自己“墙”了自己
Unix 50 年:Ken Thompson 的密码
HTTP的前世今生
全站热门
程序员技术练级攻略&ldquo;火柴棍式&rdquo;程序员面试题简明 Vim 练级攻略&ldquo;作环保的程序员,从不用百度开始&rdquo;TCP 的那些事儿(上)AWK 简明教程做个环保主义的程序员编程能力与编程年龄二维码的生成细节和原理sed 简明教程如何学好C语言如何超过大多数人技术人员的发展之路由12306.cn谈谈网站性能技术应该知道的Linux技巧疫苗:Java HashMap的死循环缓存更新的套路分布式系统的事务处理TCP 的那些事儿(下)&ldquo;21天教你学会C++&rdquo;无锁队列的实现Lua简明教程别让自己&ldquo;墙&rdquo;了自己性能调优攻略MySQL性能优化的最佳20+条经验如何写出无法维护的代码6个变态的C语言Hello World程序28个Unix/Linux的命令行神器Docker基础技术:Linux Namespace(上)无插件Vim编程技巧
分类
业界新闻 (30)
企业应用 (2)
技术新闻 (37)
技术管理 (19)
技术读物 (125)
操作系统 (97)
Unix/Linux (81)
Windows (12)
数据库 (11)
杂项资源 (294)
流程方法 (48)
程序设计 (110)
系统架构 (13)
编程工具 (67)
编程语言 (326)
.NET编程 (3)
Ajax开发 (9)
C/C++语言 (74)
Erlang (1)
Go 语言 (15)
Java语言 (32)
PHP脚本 (11)
Python (23)
Ruby (5)
Rust 语言 (1)
Web开发 (106)
网络安全 (35)
职场生涯 (40)
趣味问题 (19)
轶事趣闻 (147)
标签agile
AJAX
Algorithm
Android
Bash
C++
Coding
CSS
Design
design pattern
ebook
Flash
Game
Go
golang
Google
HTML
IE
Java
Javascript
jQuery
Linux
MySQL
OOP
password
Performance
PHP
Programmer
Programming
programming language
Puzzle
Python
Ruby
SQL
TDD
UI
Unix
vim
Web
Windows
XML
安全
程序员
算法
面试
归档
2022年12月 (2)
2022年10月 (1)
2022年7月 (1)
2022年5月 (1)
2022年2月 (2)
2022年1月 (1)
2021年12月 (1)
2021年11月 (1)
2021年9月 (1)
2021年7月 (1)
2020年12月 (9)
2020年8月 (1)
2020年7月 (1)
2020年4月 (1)
2020年3月 (1)
2020年1月 (1)
2019年12月 (2)
2019年11月 (1)
2019年10月 (1)
2019年7月 (1)
2019年6月 (1)
2019年5月 (1)
2019年4月 (2)
2019年3月 (1)
2019年2月 (1)
2018年12月 (1)
2018年5月 (1)
2018年1月 (1)
2017年10月 (1)
2017年9月 (1)
2017年8月 (1)
2017年7月 (3)
2017年6月 (1)
2017年4月 (1)
2017年3月 (1)
2017年2月 (1)
2017年1月 (2)
2016年12月 (1)
2016年10月 (1)
2016年9月 (1)
2016年8月 (2)
2016年7月 (3)
2015年12月 (1)
2015年9月 (1)
2015年8月 (2)
2015年4月 (4)
2014年12月 (3)
2014年11月 (2)
2014年10月 (2)
2014年9月 (2)
2014年8月 (2)
2014年6月 (1)
2014年5月 (4)
2014年4月 (4)
2014年3月 (5)
2014年2月 (3)
2014年1月 (2)
2013年12月 (3)
2013年11月 (1)
2013年10月 (6)
2013年8月 (1)
2013年7月 (8)
2013年6月 (2)
2013年5月 (3)
2013年4月 (3)
2013年3月 (3)
2013年2月 (5)
2013年1月 (1)
2012年12月 (4)
2012年11月 (4)
2012年10月 (3)
2012年9月 (4)
2012年8月 (8)
2012年7月 (4)
2012年6月 (7)
2012年5月 (6)
2012年4月 (6)
2012年3月 (6)
2012年2月 (3)
2012年1月 (6)
2011年12月 (5)
2011年11月 (9)
2011年10月 (6)
2011年9月 (5)
2011年8月 (14)
2011年7月 (6)
2011年6月 (12)
2011年5月 (5)
2011年4月 (18)
2011年3月 (16)
2011年2月 (16)
2011年1月 (18)
2010年12月 (11)
2010年11月 (11)
2010年10月 (19)
2010年9月 (15)
2010年8月 (10)
2010年7月 (20)
2010年6月 (9)
2010年5月 (13)
2010年4月 (12)
2010年3月 (11)
2010年2月 (7)
2010年1月 (9)
2009年12月 (22)
2009年11月 (27)
2009年10月 (17)
2009年9月 (14)
2009年8月 (21)
2009年7月 (18)
2009年6月 (19)
2009年5月 (27)
2009年4月 (53)
2009年3月 (43)
2008年10月 (1)
2007年12月 (1)
2006年11月 (1)
2004年6月 (1)
友情链接
陈皓的博客
并发编程
四火的唠叨
Todd Wei的Blog
开源开发工具技术博客
C++爱好者博客
ACMer
其他操作
注册 登录
条目feed
评论feed
WordPress.org
CoolShell.cn 2022
Powered by WordPress
Based on Theme: Nisarg by Falguni Desai.
京ICP备18054967号-1