参考文章:
- Http Cookie机制及Cookie的实现原理
- Cookie 实现的原理
- Cookie的工作原理和应用详解
Cookie 工作原理如图所示:
执行流程:
Set-Cookie
响应头,从而将 cookie 信息传递给了浏览器;Cookie 创建:
// 用响应创建Cookie,等价于 response.addHeader("set-cookie", "name=value"); Cookie cookie = new Cookie(String name, String value); // Cookie: name=value cookie.setMaxAge(seconds); // 设置Cookie的生命周期 cookie.setPath("/"); // 设置Cookie的共享范围 response.addCookie(cookie); // 添加1个Cookie
Cookie 获取:
// 用请求获取Cookie Cookie[] cookies = request.getCookies(); // 获取Cookies返回数组 // 需遍历 cookie.getName(); // 获取键 cookie.getValue(); // 获取值
Cookie 修改:
// 修改Cookie cookie.setValue(String name);
参考文章:
- TCP的三次握手与四次挥手
这道题是我在字节跳动一面时候遇到的问题,我以为会先从三次握手、四次挥手开始问,没想到面试官不按常理出牌,直接问我 TCP 通信双方的状态变化。
这道题的答案,直接看上面提供的参考文章,讲的非常透彻,也非常容易理解,只需要静下心看完它!
参考文章:
在每次 FUll GC 的时候都会 Stop The World (STW),即,挂起其他所有除了 GC 之外的线程,只让 GC 垃圾回收线程工作,Young GC 不会触发 Stop The World。
堆:
堆是一种常用的树形结构,是一种特殊的完全二叉树,当且仅当满足所有节点的值总是不大于或不小于其父节点的值的完全二叉树被称之为堆。堆的这一特性称之为堆序性。因此,在一个堆中,根节点是最大(或最小)节点。如果根节点最小,称之为小顶堆(或小根堆),如果根节点最大,称之为大顶堆(或大根堆)。堆的左右孩子没有大小的顺序。下面是一个小顶堆示例:
堆的存储一般都用数组来存储堆,i
节点的父节点下标就为(i–1)/2
,它的左右子节点下标分别为2 ∗ i + 1
和 2 * i - 1
,如第 0 个节点左右子节点下标分别为 1 和 2。
栈:
栈是一种线性表,只仅允许在表的一端进行插入和删除操作,这一端被称为栈顶(Top),相对地,把另一端称为栈底(Bottom)。把新元素放到栈顶元素的上面,使之成为新的栈顶元素称作进栈、入栈或压栈(Push);把栈顶元素删除,使其相邻的元素成为新的栈顶元素称作出栈或退栈(Pop)。
文章参考:堆与栈的区别
线程的调度,取决于支持的是内核级线程还是用户级线程?
对于用户级线程,内核不知道线程的存在,就给了进程很大的自主权。内核只是调度进程,由进程去选择调度哪个线程来运行。
对于内核级线程,线程的调度就交给了系统完成。
这个是近期面试字节一面的时候,面试官问的问题:
# /etc/profile 的前10行内容,应该是: head -n 10 /etc/profile # 查看/etc/profile 的最后5行内容,应该是: tail -n 5 /etc/profile # 将内容输出到/home/test文件中 head -n 10 /etc/profile >> /home/test tail -n 5 /etc/profile >> /home/test
简短概括:① 防止服务没有收到客户端发送的最后一个 ACK,则会重发 FIN 请求,② 让本次请求之前发送的请求都过期。
详细介绍如下:
为什么要三次握手?
为什么要四次挥手?
TCP 利用滑动窗口实现流量控制。流量控制是为了控制发送方发送速率,保证接收方来得及接收。 接收方发送的确认报文中的窗口字段可以用来控制发送方窗口大小,从而影响发送方的发送速率。将窗口字段设置为 0,则发送方不能发送数据。
在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就要变坏。这种情况就叫拥塞。拥塞控制就是为了防止过多的数据注入到网络中,这样就可以使网络中的路由器或链路不致过载。拥塞控制所要做的都有一个前提,就是网络能够承受现有的网络负荷。拥塞控制是一个全局性的过程,涉及到所有的主机,所有的路由器,以及与降低网络传输性能有关的所有因素。相反,流量控制往往是点对点通信量的控制,是个端到端的问题。流量控制所要做到的就是抑制发送端发送数据的速率,以便使接收端来得及接收。
为了进行拥塞控制,TCP 发送方要维持一个 拥塞窗口(cwnd) 的状态变量。拥塞控制窗口的大小取决于网络的拥塞程度,并且动态变化。发送方让自己的发送窗口取为拥塞窗口和接收方的接受窗口中较小的一个。
TCP的拥塞控制采用了四种算法,即 慢开始 、 拥塞避免 、快重传 和 快恢复。在网络层也可以使路由器采用适当的分组丢弃策略(如主动队列管理 AQM),以减少网络拥塞的发生。
参考链接:JavaGuide
为了帮助更多小白从零进阶 Java 工程师,从CSDN官方那边搞来了一套 《Java 工程师学习成长知识图谱》,尺寸 870mm x 560mm
,展开后有一张办公桌大小,也可以折叠成一本书的尺寸,有兴趣的小伙伴可以了解一下,当然,不管怎样博主的文章一直都是免费的~