- go协程与java线程
若在资源允许情况下,java线程(1:1)模型并不比go协程慢;只有并发量达到一定量级的时候,java已无力再申请线程栈(64位每栈1M,而go默认2K),故go可以申请更多的线程。
- 特权指令与非特权指令
CPU指令系统可分为特权指令与非特权指令(特权指令:IO、清内存等;非特权指令:算术逻辑指令、逻辑运算指令、取数存数指令等)。其中,特权指令工作在内核态,访问内核栈(内核栈大小操作系统控制);非特权指令工作在用户态,访问用户栈。需要注意,CPU执行过程中,会根据指令进行内核态与用户态切换。
- 性能优化
(1)一个系统有了性能问题,先定位,比如通过日志、压测等方式。(一般是由哪些因素引起的呢?---CPU、内存、网络IO、磁盘IO)。
(2)问题是本质,需求是解决问题的方案。所以,产品经理的某个需求只是某个问题的解决方案,而不是真正的问题。所以作为开发人员,一定要记得和产品经理确认原始需求(问题)。也许对于同样的问题,有性能更优的解决方案,即不改变需求本质问题,又达到性能优化效果,是一种无损优化。另外一种方案是PM退一小步,稍微修改需求、放宽条件,大大解决性能问题,这是一种有损方案。
(3)明确需求后,进行方案设计(高手都是花80%时间思考、设计,花20%时间实现),包括架构设计(系统扩展)、技术选型决定了编程语言、代码实现等。如果设计不够好,后面优化很难,甚至需要推到重来。
(4)实现阶段即将设计翻译为代码的过程。
(5)不要过早优化、不要过度优化(可能会破坏代码可读性、可维护性)
- 对自己的一点要求:熟练读懂UML类图,此为设计阶段重要工具
- 浏览器发送请求至Nginx是http1.1,而nginx至后端服务是http1.0,http版本客户端和服务端均可控制。比如客户端1.1,而服务端header返回了1.0,也是短链接。
- 微服务
微服务概念重点在于“微”字,要求服务独立开发、测试、部署,是相对于单体架构而言的。其改造重点在于“拆”字,力度大小如何把控还在实践,一般来说,需要根据“三个火枪手”原则,即满三人可拆分一个模块。
- 组件设计原则:对外行为即要简单,又要易于理解,一定要学会用UML类图进行设计。
- .NET HttpClient使用:https://www.cnblogs.com/dudu/p/csharp-httpclient-attention.html
.net中httpclient注意不需要displose,除非并发量很小,否则会开许多socket,time_wait状态。.net httpclient并不会真正关闭socket,time_wait将会保持4min,大大增加了socket耗尽的可能性。
注意MaxConnectionPerServer字段的设置:The maximum number of concurrent connections (per server endpoint) allowed by an HttpClient object。
- 池化技术 数据库连接池 httpclient连接池 线程池等,通过复用技术来实现。
- 路由器负责局域网至广域网之间的连接 组建公司网络时,往往需要网卡、网线、集线器(交换机)、路由器4个基本组件。
- 计算机所传输的数据会被所属网络的所有机器接受,若为一般计算机,则判断是否接受,若为路由器,则判断是否转至其他局域网。