自我介绍
首先上来肯定是自我介绍了balabala(姓名,核心能力,目的)
公司业务
这个说实话,刚开始问实习公司的业务,我还是没有想到的,所以对实习公司的业务一定要熟悉,如果在公司实习这么久连公司的业务都不是很熟悉的话,是很扣分的
你在写代码过程中遇到什么问题
这个问题,首先我回答的是代码量的挑战性,其次是代码规范,说到代码规范,面试官就开始问,能具体说说代码规范吗,比如呢,看过什么书,作者是谁,对你代码规范以及效率很有帮助,然后,首先我回答设计模式
设计模式
面试官上来问,你常常了解的设计模式有哪些,
单例模式,代理模式,责任链模式等等
单例模式实现原理,如何保证单例
单例模式特性及实现方法
自我总结:首先单例模式是否线程安全,如何实现的单例模式,饿汉懒汉的区别以及实现,两种懒汉式的实现,一种为线程安全的懒汉式,一种为线程不安全的懒汉式,这两者的实现原理
不仅仅是单例模式,其他的设计模式也一定要深挖,不仅仅停留于表面,比如代理模式的实现原理,动态代理与静态代理的区别。
算法导论
算法这一块就只是问了一些基础的东西,并没有让我手撕代码,平时多刷刷OJ
操作系统:进程与线程,JVM,定时器,数据结构
面试官提问,你知道在操作系统内核中的定时器吗,我回答知道,那你能不能用你所学到的知识定义一个数据结构,来实现这个定时器。
这个问题个人理解:第一点在考察对操作系统的深度,第二点在考察数据结构的特性
struct TIMERCTL {
unsigned int count;
unsigned int timeout;
struct FIFO8 *fifo;
unsigned char data;
};
这里是定时器的一个数据结构,中的count用来记录时钟中断发送了多少次, timeout用来计时,一旦timeout为0,管理器将触发指定动作,同时可以定义一个FIFO队列和用于该队列的缓冲区,在内核的主循环里面会不停的监控时钟管理器这个队列是否为空,如果是空,那么内核就认为没有超时事件发生,如果队列里面有数据,那表明超时事件发生了。
https://blog.youkuaiyun.com/tyler_download/article/details/53487885
https://blog.youkuaiyun.com/lucien_cc/article/details/7632270
一个好的服务器大概是怎么样的原理
这个问题我是最懵的,因为压根没有了解过服务器的底层原理,而且我是拿nginx去举例说明,相当于在给自己挖坑,后来请教了下学长,可以说Tomcat,了解下Tomcat的实现与模型。
https://blog.youkuaiyun.com/jsj13263690918/article/details/80368757
http:网络七层模型,http在那一层,http原理是什么
http请求工作流程
IO的多路复用技术,poll,epoll
select函数,Reactor设计模式, Proactor设计模式
https://blog.youkuaiyun.com/sehanlingfeng/article/details/78920423
select,poll,epoll的区别以及实现
1,支持一个进程的最大连接数
select有FD_SETSIZE来决定最大连接数,poll由链表实现没有最大连接数,epoll连接数由内存决定
2,FD剧增后带来的IO效率问题
select需要全部遍历效率低,poll同select,epoll因为epoll内核中实现是根据每个fd上的callback函数来实现的,只有活跃的socket才会主动调用callback,所以在活跃socket较少的情况下,使用epoll没有前面两者的线性下降的性能问题,但是所有socket都很活跃的情况下,可能会有性能问题。
3,消息传递模式
select全部拷贝FD,poll同select,epoll通过内核和用户空间共享一块内存来实现的。
InnoDB:事务实现原理
undo log,redo log,RR,MVCC
vue框架的原理
浏览器如何渲染
- 构建对象模型:树
- 渲染树,布局,绘制
- 回流:如果某些布局发生了变化,需要重新渲染
- 重绘