一些小Tip

导语
个人感悟,持续更新中。。。
正文
- 无论NIO还是AIO,都没有在数据传输过程(tcp/udp)作革命性的创新。他们在传输过程的效率和传统BIO是一样的,还是会产生阻塞(网络延迟,Socket缓冲区满了或空了),他们通过在OS层对Socket进行统一管理,进行事件管理。避免了进程级的线程开销和线程阻塞(线程是JVM资源,这些都会阻塞线程栈,产生内存消耗和CPU时间片和上下文切换时间),JVM进程只需要一个线程来进行事件处理(不会阻塞)。也就是说,BIO,NIO,AIO的本质(Socket)其实是一样的,只不过把矛盾转移到了OS层(select,poll,epoll)。
- 调用一个对象的方法可以理解为在给这个对象发送一个通知。
- HTTP是一种文本协议。所谓的文本协议是指,传输的数据可以通过文本表达出可读的内容。HTTP传输的数据可以用ASCII字符集解析成可读的文本,如请求行,请求头。文件上传时文件分隔符可以解析成文本,文件的的内容可能是二进制的,但是它不是协议的内容(协议不会定义数据具体内容,它只定义了一个容器,用来传递数据,无论是二进制数据还是文本数据)。与此相关的,Google ProtoBuf是一种二进制协议。
- 线程的阻塞状态和IO阻塞状态不是一回事。线程的阻塞是线程栈中的代码正在等待临获取临界区的锁。而IO的阻塞状态是包含在线程的Runnable状态的。详细
- CPU能认识的就仅仅是中断线和中断处理程序这些概念。所谓线程,进程,软中断等概念,是软件发明出来的,CPU是不认识的。所谓线程,本质上是保存CPU运行状态的一种形式,CPU的运行状态,就是CPU的所有寄存器的内容的集合(包括用来控制中断的寄存器),线程的作用就是可以把这些寄存器都保存下来(其实还有软件本身的堆栈等其他信息,但我们这里不关心软件,先忽略),然后用另一个保存的状态刷新CPU的状态,让CPU感觉自己在运行到另一个上下文上。OS对CPU不断进行状态的切换,保存上一个状态,加载下一个线程的状态,就实现线程切换了。至于进程,本质上可以认为是线程切换的同时也会切换地址空间。这里我们混用这两个概念。详细
- 中断和上下文切换:
通知操作系统发生了外部事件的机制是中断当前运行线程并将控制转移到中断处理程序。在中断处理程序可以运行之前,必须保存足够的硬件状态以保证在中断处理完成后系统能恢复线程的上下文。新调用的中断处理程序将经历在硬件层次结构中上移带来的所有延迟(除了页面故障)。如果该中断处理程序最近没有运行过(或者中间程序很节约时间),那么它的任何代码或数据不太可能保留在 TLB 或高速缓存中。当再次调度已中断的线程时,它的执行上下文(如寄存器内容)逻辑上将得到恢复,以便它可以正确运行。然而,TLB 和高速缓存的内容必须根据程序的后继请求重新构造。因此,作为中断的结果,中断处理程序和被中断的线程都可能遇到大量的高速缓存未命中和 TLB 未命中延迟。 - 系统调用,陷入内核。详细
- 比较int大小时,如果简单的使用 a - b > 0来判断会很不安全。因为如果差值可能是int范围的两倍。如最大正数减最小负数。差值会溢出,截取低位。从而产生难以预见的错误。
- 字节流和它的包装流,只能被读取一次。读完一次后在读会读不到数据。两种方式解决:重置流和将流读出来缓存后重复使用。
- java类中硬编码的字符串长度最大为2个字节表达的长度,即65536。因为类的常量池中字符串类型常量的长度标志位为两个字节。否则无法通过编译检查。但是在运行时在内存中动态生成的字符串不受此限制。
一些小Tip的更多相关文章
- 小tip: 使用CSS将图片转换成模糊(毛玻璃)效果
去年盛夏之时,曾写过“小tip: 使用CSS将图片转换成黑白”一文,本文的模式以及内容其实走得是类似路线.CSS3 → SVG → IE filter → canvas. 前段时间,iOS7不是瓜未熟 ...
- [转] 小tip: 使用CSS将图片转换成模糊(毛玻璃)效果 ---张鑫旭
by zhangxinxu from http://www.zhangxinxu.com本文地址:http://www.zhangxinxu.com/wordpress/?p=3804 去年盛夏之时, ...
- CSS小tip整理
CSS小tip整理 1.利用css在列表靠头和末尾添加箭头: /* 左箭头*/ ol a[rel="prev"]:before { content: "\00AB&quo ...
- 小tip:CSS vw让overflow:auto页面滚动条出现时不跳动——张鑫旭
小tip:CSS vw让overflow:auto页面滚动条出现时不跳动 这篇文章发布于 2015年01月25日,星期日,23:08,归类于 css相关. 阅读 46274 次, 今日 91 次 by ...
- 小tip: 某简单的字符重叠与图形生成----张鑫旭
引言 字符重叠不是什么稀奇的东西. 如1像素错位模拟阴影效果: 或者powerFloat中展示的带边框三角: 以及其他很多. 但是技术这东西不是豆腐,老了可以吃,臭了也可以吃:那我这里还拿着个说事作甚 ...
- 小tip: 使用CSS将图片转换成黑白(灰色、置灰)[转]
小tip: 使用CSS将图片转换成黑白(灰色.置灰) 这篇文章发布于 2012年08月19日,星期日,20:41,归类于 css相关, SVG相关. 阅读 159943 次, 今日 146 次 ...
- 【小TIP】记录各种错误【更新中】
最好程序一遍通过,为了提高代码能力,这里将用TIP的形式记录来犯过的错误.不断更新中. *已经转移到闪存.. [150214]WA:检查是否数组开小了. [150212]WA:如果程序中有乘号,需要留 ...
- 几个加速Swift开发的小tip
又是周五了,周末不要浪,一起学点Swift!本周再次为大家带来了一些Swift的小技巧,都是些奇淫巧计,不知道也无妨,但Swift最吸引我的一点就是它的简洁易用.主要内容有: private(set) ...
- 小tip:CSS vw让overflow:auto页面滚动条出现时不跳动
原文地址:http://www.zhangxinxu.com/wordpress/?p=4552 一.水平居中布局与滚动条跳动的千年难题 当前web届,绝大多数的页面间布局都是水平居中布局,主体定个宽 ...
- 小tip:纯CSS让overflow:auto页面滚动条出现时不跳动
本文转载于张鑫旭博客,原文地址:http://www.zhangxinxu.com/wordpress/?p=4552 一.水平居中布局与滚动条跳动的千年难题 当前web届,绝大多数的页面间布局都是水 ...
随机推荐
- Docker中运行nginx
Docker中运行nginx 1.Docker中运行nginx 2.配置文件 2.1 nginx.conf 2.2 default.conf 3.docker的镜像可以挂什么卷 部分内容原文地址: C ...
- Spark踩坑填坑-聚合函数-序列化异常
Spark踩坑填坑-聚合函数-序列化异常 一.Spark聚合函数特殊场景 二.spark sql group by 三.Spark Caused by: java.io.NotSerializable ...
- TDH社区版搭建总结
在安装之前需要对docker分区进行格式化处理: Redhat/CentOS 在Redhat/CentOS上,docker分区必须采用XFS格式,实现的步骤如下: 1. 创建目录/var/lib/do ...
- Codeforces Round #680 (Div. 2, based on Moscow Team Olympiad)【ABCD】
比赛链接:https://codeforces.com/contest/1445 A. Array Rearrangment 题意 给定两个大小均为 \(n\) 的升序数组 \(a\) 和 \(b\) ...
- Codeforces Round #660 (Div. 2) Uncle Bogdan and Country Happiness dfs
题目链接:Uncle Bogdan and Country Happiness 题意: t组输入,每组数据输入如下 首先一个n代表有n个城市,所有城市总人数为m,后面输入pi表示第i个城市的居住人数, ...
- Codeforces Round #547 (Div. 3) C. Polycarp Restores Permutation (数学)
题意:有一长度为\(n\)的序列\(p\),现在给你\(q_i=p_{i+1}-q_i \ (1\le i\le n)\),问你是否能还原出原序列,如果能救输出原序列,否则输出\(-1\). 题解:由 ...
- 在Ubuntu虚拟机上搭建青岛OJ
源码地址为:https://github.com/QingdaoU/OnlineJudge 可参考的文档为:https://github.com/QingdaoU/OnlineJudgeDeploy/ ...
- Incorrect string value: '\xF0\x9F\x93\xB7</...' for column 'content' at row 1
出现原因:当insert数据中有表情时发生.而这些表情是按照4个字节一个单位进行编码的,而我们使用的utf-8编码在mysql数据库中默认是按照3个字节一个单位进行编码的. 解决方法:将表字段字符集设 ...
- CentOS 7 架设LNMP动态网站
1.安装Nginx 1)使用Nginx官方的yum源 [root@localhost ~]# vim /etc/yum.repos.d/nginx.repo [nginx] name=nginx re ...
- P3373 线段树2(多重标记线段树)题解
题意: 操作有:区间加,区间乘,区间询问求和 思路: 设一个数为\(m*sum+a\),加就变成了\(m*sum+a+a_2\),乘就变成了\(m*m_2*sum+a*m_2\),所以我们设两个标记\ ...