上来自我介绍,问了熟悉的语言,开始问JAVA基础、static、volatile、Atomic、GC、问了HTTP、问了TCP、问了Linux命令。基本都不会0.0 恐怖+凉凉
问1:项目中经常遇到GC “斯拜客”怎么处理
:听都没听过啊,这啥玩意哦。
查:gc spike? GC过于频繁,eden和老年代都是100%,应该检查内存溢出或者短时间内分配的大对象等情况造成的内存无法回收。
问2:垃圾回收器都有哪些?
查:P75页
问3:CMS和G1的适用场景(各类垃圾回收器的适用场景)
查:CMS在P81,
CMS:是一种以获取最短回收停顿时间为目标的收集器,目前很大一部分的Java应用集中在互联网站或B/S系统的服务端上,这类应用尤其重视服务的响应速度,希望系统停顿时间最短,以给用户带来较好的体验。
G1:G1适合作为服务端垃圾收集器,应用在多处理器和大内存的条件下,可以实现高吞吐量的同时,尽可能满足垃圾收集较短可控的暂停时间,主要针对以下场景设计:
- 像CMS一样,能与应用程序并发执行
- 更快速整理空闲空间
- GC停顿时间更可控
- 不会牺牲大量吞吐性能
- 服务端多核CPU、JVM内存占用较大的应用(至少大于4G)
- 应用在运行过程中会产生大量内存碎片、需要经常压缩空间
- 想要更可控、可预期的GC停顿周期;防止高并发下应用雪崩现象
问:类加载的几个步骤(看了书,没记清楚)
P214
问4:volatile的实现原理(强制从主存中读取?)
https://www.cnblogs.com/chenssy/p/6379280.html
问5:服务器连接中有大量的“TIME-WAIT”,怎么办?占用了大量的端口怎么处理
解决方法:https://blog.csdn.net/dongfei2033/article/details/79573983
配置tcp_tw_recycle和tcp_timestamps出现的问题:https://www.cnblogs.com/jdonson/p/4760166.html
问6:netstat如何查看TCP连接端口及PID
https://www.cnblogs.com/xieshengsen/p/6618993.html
netstas -at -p
:-t就是TCP,-u就是UDP,-p就是显示pid
问7:HTTP304是啥?
HTTP304是已缓存的静态网页内容。
https://blog.csdn.net/canot/article/details/76359917
问8:设计模式分为哪几种?
http://www.runoob.com/design-pattern/design-pattern-intro.html
分类 | 含义 | 包括的模式 |
---|---|---|
创建型模式 | 这些设计模式提供了一种在创建对象的同时隐藏创建逻辑的方式,而不是使用 new 运算符直接实例化对象。这使得程序在判断针对某个给定实例需要创建哪些对象时更加灵活。 | 工厂模式(Factory Pattern)、抽象工厂模式(Abstract Factory Pattern)、单例模式(Singleton Pattern)、建造者模式(Builder Pattern)、原型模式(Prototype Pattern) |
结构型模式 | 这些设计模式关注类和对象的组合。继承的概念被用来组合接口和定义组合对象获得新功能的方式。 | 适配器模式(Adapter Pattern)、桥接模式(Bridge Pattern)、过滤器模式(Filter、Criteria Pattern)、组合模式(Composite Pattern)、装饰器模式(Decorator Pattern)、外观模式(Facade Pattern)、享元模式(Flyweight Pattern)、代理模式(Proxy Pattern) |
行为型模式 | 这些设计模式特别关注对象之间的通信。 | 责任链模式(Chain of Responsibility Pattern)、命令模式(Command Pattern)、解释器模式(Interpreter Pattern)、迭代器模式(Iterator Pattern)、中介者模式(Mediator Pattern)、备忘录模式(Memento Pattern)、观察者模式(Observer Pattern)、状态模式(State Pattern)、空对象模式(Null Object Pattern)、策略模式(Strategy Pattern)、模板模式(Template Pattern)、访问者模式(Visitor Pattern) |
问9:解释器模式和命令模式的区别?
问10:适配器模式是什么?与策略模式的区别?
问11:Netty的流程?
答了
问12:Java中static的使用?
答了
问13:TCP三次握手4次挥手过程?
答了
算法1:二叉树的镜像
先序遍历,交换左右节点。
算法2:青蛙跳台阶(可以1、2、3),只写出了递归和剪枝版本,没写出来自下而上版本。
public class Solution_toutiao_1 {
public static void main(String[] args) {
System.out.println(fun(3));
}
private static int fun(int n) {
if (n == 1) {
return 1;
} else if (n == 2) {
return 2;
} else if (n == 3) {
return 3;
}
int[] array = new int[n + 1];
array[1] = 1;
array[2] = 2;
array[3] = 3;
int prev3 = array[1];
int prev2 = array[2];
int prev1 = array[3];
for (int i = 4; i <= n; i++) {
array[i] = prev1 + prev2 + prev3;
prev3 = prev2;
prev2 = prev1;
prev1 = array[i];
}
return array[n];
}
}
视频面只想到了递归写法,突然忘了怎么写非递归,无非也就是拿三个变量保存前三个。
递推关系式:f(n)=f(n-1)+f(n-2)+f(n-3)
一定要往自己会的地方引,不会的千万不要提,一个字都不要提。