传输层之TCP协议 解决方式:不等ACK,直接往下发下一条。【不是完全不等,而是每次批量发送一批消息,然后再等一批ACK,再发一批消息。我们把不需要等待,直接发送的数据的量称为【窗口大小】窗口大小指的是无需等待确认应答而可以继续发送数据的最大值。上图的窗口大小就是4000个字节(四个段)。发送前四个段的时候,不需要等待任何ACK,直接发送;收到第一个ACK后,滑动窗口向后移动,继续发送第五个段的数据;依次类推;操作系统内核为了维护这个滑动窗口,需要开辟发送缓冲区来记录当前还有哪些数据没有应答;
IO文件操作 看 File 类中的常见属性、构造方法和方法签名说明根据父目录 + 孩子文件路径,创建一个新的 File 实例根据文件路径创建一个新的 File 实例,路径可以是绝对路径或者相对路径根据父目录 + 孩子文件路径,创建一个新的 File 实例,父目录用路径表示修饰符及返回值类型** **方法签名说明String返回 File 对象的父目录文件路径StringgetName()返回 FIle 对象的纯文件名称StringgetPath()返回 File 对象的文件路径String。
线程安全的集合类 若干个哈希桶分成一个"段" (Segment), 针对每个段分别加锁.目的也是为了降低锁竞争的概率. 当两个线程访问的数据恰好在同一个段上的时候, 才触发锁竞争.分段锁:好几个链表共用同一个锁,锁冲突概率比每个哈希桶一个锁高。
自动化实战-对个人博客系统实现web自动化测试 自动化测试的难点:如何去发现项目中可能存在的问题去测试,避免误报这些等等都是难点,很多时候可能因为我们思考不执行关注的不够可能会遗漏,比如在我写的博客自动化测试用例的时候遗漏了博客编辑页什么都不写的时候测试还能不能发布博客,一开始我是漏了这点,后来有一次我无意中点击,才发现什么都不填写情况下竟然还可以发布,我马上去修改我的自动化测试用例,添加了这个上去;提升:写自动化测试思考的东西一定要全面,仔细,不能遗漏很多细节而导致真的项目部署以后造成的问题。
锁策略介绍 乐观锁:预测锁冲突的概率不高,多个线程下不会产生锁冲突,此时就不会真的加锁,代码中需要做的工作量比较少。悲观锁:预测所冲突的概率很高,多线程下会产生锁冲突,代码中需要做的工作量比较大。举例子:小明工位上的个人电脑,如果小明认为这个电脑不会有其他同事使用,则它就不必设定开机密码,这就类似于乐观锁;如果小明认为总有其他人用他电脑,他就会去设置一个开机密码,这样这个电脑在他在职期间只能他使用。
ThreadPoolExecutor执行流程和拒绝策略 首先通过文档我们看看ThreadPoolExcutor提供给我们的构造方法它提供了很多种构造方法,可以支持很多参数,支持很多选项,让我们创建出不同风格的线程池。corePoolSize:核心线程数 (类似于正式员工)maximumPoolSize 最大线程数 (类似于正式员工+实习员工)需要注意的是:核心线程数即使线程空闲也不会被销毁,但是最大线程数中除去核心线程数部分如果空闲太长时间则会被销毁,防止占用系统资源。
解决线程不安全问题的方法 通过特殊手段,让count++变成举例:上厕所,人进入后上锁,用完了出来解锁,期间只有自己可以使用这个厕所。解决线程不安全也是类似的,在count++之前上锁,在count++完之后解锁,在加锁和解锁期间,进行修改,这个期间其他线程想要修改,是修改不了的,只能阻塞等待(线程状态:BLOCKED)。锁的特性:具有独特性,如果当前锁没人来加,加锁操作就成功,如果已经被加上,加锁操作就会阻塞等待。