字节提前批 8.4 番茄小说 后端一面凉经
一、写在前面
- 算法仍然是大厂考察的重点;
- 希望各位牛友帮我分析一下面试失败的原因;
二、面试内容(40min)
1. 计算机网络
HTTP与HTTPS的区别
HTTP基于TCP进行通信,HTTPS则是在于TCP通信之前,先与SSL通信;
SSL的作用
防窃听、防篡改、完整性保护;
一个URL输入浏览器之后,详细的解析过程;
DNS解析域名的过程:迭代与递归两种方式,并且说明了请求流动分别经过了什么级别的服务器; 获取IP地址之后,三次握手的TCP过程;详细到了每一个报文中的同步比特、确认比特等;以及解释了为什么要三次握手:确认彼此的接受/发送能力、防止打开过多的TCP链接; 浏览器通过HTTP请求获取对应URL资源,渲染页面呈现给用户; TCP四次挥手,具体到了每一个报文的同步比特与确认比特,并解释了TIME WAIT(防止用户端最后的确认报文不能抵达服务端从而不能关闭连接)和CLOSE WAIT(等待响应进程结束数据的传输)
2. 操作系统
进程与线程的区别
进程:对运行程序的一种抽象,操作系统分配资源的最小单位; 线程:比进程更加纤细的存在,实际运行在CPU上的; 这里应该说:线程之间并不独立,极有可能互相影响;进程之间独立性强;
进程间的通信方式
7种方式: 匿名管道:亲缘进程通信、半双工、一进一出、实质上是内存中一种较为特殊的文件; 有名管道:与匿名类似、任意进程通信,是实际存在于文件系统的文件; 信号:任意时刻发送给某一个进程的一种信号通信方式,例如在命令行通过ctrl^c结束一个进程; 消息队列:存在于内核当中的消息队列;(遵循FIFO,但是支持随机访问,消息队列克服了信号承载信息量少,管道只能承载无格式字 节流以及缓冲区大小受限等缺) 信号量:一种计数器,主要用于进程间的同步问题; 共享内存:如今最常用的一种通信方式;多个进程访问同一块内存,需要注意对于临界资源的互斥访问; (套接字:实现网络中位于不同端的进程间通信)
进程上下文切换,保存了什么资源?
说的很模糊;我的回答是:保存了PC、局部变量等内容;
3. Java八股文
HashMap的底层实现?
底层是Table数组,每个数组元素可以看作是一个桶,桶中存放的可能是链表或者红黑树; 链表树化的条件:table>64 && 链表>8
HashMap何时扩容
HashMap元素数量大于临界值的时候,触发扩容; 临界值的大小是当前数组长度的0.75; 0.75的计算,似乎是根据统计学中的泊松分布得来的(不确定);
4. 算法
合并区间
o(n+nlogn)的写法,即排序+合并,但是我忘记了二维数组的排序API,被说了;可以重写比较器;
寻找峰值
o(n)简单,但是你要学会o(logn)的算法;
三、总结
- 需要提升算法,目前仍然不够熟练;
- 回答要有自己的思路与规范,纯背书不好;有了基础知识的实力的人很多,你如何融汇贯通自己的实力?
希望得到大***贵的意见;
#面试复盘##面经##校招##字节跳动##Java工程师#