发布了文章2017-12-08
最近重构了去年造的一个轮子 Vino。Vino 旨在实现一个轻量并且能够保证性能的 Web Server,仅关注 Web Server 的本质部分。在重构过程中,Vino 借鉴了许多优秀开源项目的思想,如 Nginx、Mongoose 和 Webbench。因此,对比上一个版本的 Vino,现在的 Vino 不仅性能得...
发布了文章2017-07-04
远程过程调用(Remote Procedure Call,RPC)是一个计算机通信协议。该协议允许运行于一台计算机的程序调用另一台计算机的子程序,而程序员无需额外地为这个交互作用编程。RPC的主要目标是让构建分布式应用更加容易,在提供强大的远程调用能力的同时不损失本地调用的...
赞了文章2017-06-20
今天分布式应用、云计算、微服务大行其道,作为其技术基石之一的 RPC 你了解多少?一篇 RPC 的技术总结文章,数了下 5k+ 字,略长,可能也不适合休闲的碎片化时间阅读,可以先收藏抽空再细读:)
赞了文章2017-06-20
今天分布式应用、云计算、微服务大行其道,作为其技术基石之一的 RPC 你了解多少?一篇 RPC 的技术总结文章,数了下 5k+ 字,略长,可能也不适合休闲的碎片化时间阅读,可以先收藏抽空再细读:)
赞了回答2017-05-10
因为你的浏览器不知道你的数据是否返回完毕了,你需要把你要响应的正文长度告诉浏览器,使用HTTP响应头里面的Content-Length {代码...} 还有另外一种方式,稍微麻烦一些,头里面用“Transfer-Encoding:chunked”,相关细节你百度一下。
关注了问题2017-05-03
赞了回答2017-05-03
那么,\d+?_\d+?这个正则,首先会从字符串的第一个字符(即'''我'''开始匹配),发现不符合条件,就接着往下匹配,直到匹配到了1这个字符,发现符合\d+?的条件,存起来,继续匹配,匹配到_这个字符,发现已经符合了\d+?_的所有条件,就继续往下又匹配到了4,因为是非...
回答了问题2017-04-29
我的解决方案是在.zshrc文件中添加命令: {代码...} 在zsh启动时,自动刷新.bash_profile。
发布了文章2017-03-28
最近在写一个私人项目,名字叫做SmallVM,SmallVM的目的在于通过实现一个轻量级的Java虚拟机,加深对Java虚拟机的认知和理解。在Java虚拟机加载类的过程中,需要对Class文件进行解析,我曾经单独实现过一个Java版的Class字节解析器ClassAnalyzer,相比于Java版,新版...
赞了回答2017-03-11
Get 操作并没有对底层的数组或者链表产生更改操作。楼主的疑问可能是Get的时候另一个线程同时put,或者get的时候另一个线程同时remove。其实这里没问题的 ,如果get在前put在后,那就get到null啦,如果get后remove在前,那也会拿到null啦。不会出现put在前反而get到n...
发布了文章2017-02-12
最近在写一个私人项目,名字叫做ClassAnalyzer,ClassAnalyzer的目的是能让我们对Java Class文件的设计与结构能够有一个深入的理解。主体框架与基本功能已经完成,还有一些细节功能日后再增加。实际上JDK已经提供了命令行工具javap来反编译Class文件,但本篇文章将阐...
发布了文章2017-01-11
从2016年12月开始持续使用Pomotodo起,我逐渐意识到给自己定下量化计划是一件能够提升学习效率的事情。2017年的核心目标依然是全面提高自己,但是会采用具体的量化的指标来代替模糊性描述。其实这就类似于我们在git commit时候,如果以git commit -m "fix some bugs"...
发布了文章2017-01-10
这个实验通过实现一个支持作业控制的Unix Shell,让我们对进程控制和信号控制更加熟悉。课程Lab已经帮助我们搭建起了Shell的整体框架,并实现了与本次实验不太相关的代码,核心部分需要我们自己完成。
回答了问题2016-12-30
1.知乎上确实有比较靠谱的学习轨迹/路线;2.C语言的话当然推荐两本书:《C程序设计语言》和《C Primer Plus》,但是我不太明白为什么最好是电子版的?返回去看不嫌麻烦嘛;3.可以去OJ刷刷题吖,OJ上一般有题型&难易程度的划分;4.我个人觉得,大一上来就学习C语...
关注了问题2016-12-30
发布了文章2016-12-05
本文针对HashMap的源码分析基于JDK 7,JDK 8在HashMap的实现上有着较大幅度的改进和优化,这部分优化我将另起一篇来阐述。另外,本文仅分析HashMap众多方法中最常用的方法,其余方法有需要时再研究 。
回答了问题2016-12-01
<clinit>()方法是由编译器自动收集类中的所有类变量的赋值动作和静态语句块中的语句合并产生的,编译器收集的顺序是由语句在源文件中出现的顺序决定的,静态语句块中只能访问到定义在静态语句块之前的变量,定义在它之后的变量,在前面的静态语句块可以赋值,...
关注了问题2016-12-01
回答了问题2016-11-30
个人理解:不能在堆内存申请额外的空间 :)
关注了问题2016-11-30