#一面
1.写出知道的所有单例模式的写法
首先我们先了解一下什么是单例?
答:单例模式是一种设计模式,是指一个类仅仅能有一个实例。
我们平常用到的都是原型,原型指的是一个类可以有多个实例,称为原型。
单例有三种写法:
/**
*
*@类名称:ZooKeeperProSync.java
*@类描述:双重锁 双重锁写法用到了两个synchronized,
* 这个关键字是负责防止多个用户在同一时间都使用这个方法的,
* 他的作用是一个时间点只能有一个用户访问。
* 站在安全的角度使用双重锁比较好。
*@创建人:kwy(1516)
*@创建时间:2019年8月20日 下午2:25:17
*@版本号:v7.1.8
*/
public class ZooKeeperProSync {
private static ZooKeeperProSync tempB = new ZooKeeperProSync();
private ZooKeeperProSync(){}
public static synchronized ZooKeeperProSync getB() {
synchronized (ZooKeeperProSync.class) {
return tempB;
}
}
}
/**
*
*@类名称:ZooKeeperProSync.java
*@类描述:懒汉 懒汉写法是别人使用我的时候我实例化。 如果这个类不经常使用可以使用懒汉。
*@创建人:kwy(1516)
*@创建时间:2019年8月20日 下午2:25:26
*@版本号:v7.1.8
*/
public class ZooKeeperProSync {
private static ZooKeeperProSync tempB;
private ZooKeeperProSync(){}
public static synchronized ZooKeeperProSync getB(){
if(tempB == null) tempB = new ZooKeeperProSync();
return tempB;
}
}
/**
*
*@类名称:ZooKeeperProSync.java
*@类描述:饿汉 就是我实例化好了,就等着被别人调用了。 如果这个类经常被频繁使用可以使用饿汉。
*@创建人:kwy(1516)
*@创建时间:2019年8月20日 下午2:25:29
*@版本号:v7.1.8
*/
public class ZooKeeperProSync {
private static ZooKeeperProSync tempA = new ZooKeeperProSync();
private ZooKeeperProSync(){}
public static synchronized ZooKeeperProSync getA(){return tempA;}
}
2.整数的二进制找出有几个 1,效率要求最高
/**
*
*@描述:计算一个整数 的二进制中有几个1
*@创建人:kwy(1516)
*@创建时间:2019年8月20日下午3:04:48
*@修改人:
*@修改时间:
*@修改描述:
*@param args
*/
public static void main(String[] args) {
int n = 10100010;
int count = 0;
while (n != 0) {
count++;
n = n & (n - 1);
}
System.out.println(count);
}
3.会场安排问题
自己去百度去吧, 太乱套了。
4.如何用两个栈模拟一个队列
链接 给你:https://blog.csdn.net/cherrydreamsover/article/details/80466781
5.TCP 三次握手的过程
三次握手建立连接:
第一次握手:客户端发送syn包(seq=x)到服务器,并进入SYN_SEND状态,等待服务器确认;第二次握手:服务器收到syn包,必须确认客户的SYN(ack=x+1),同时自己也发送一个SYN包(seq=y),即SYN+ACK包,此时服务器进入SYN_RECV状态;第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=y+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。
来一张图
6.http 了解吗?(这道我直接说没有深入研究 web 开发)
7.java 集合类,哪些线程安全,哪些线程不安全
8.线程安全问题(如何保证线程安全,哪些地方要使用线程安全;lock 和 synchronized
区别,用哪个更好,为什么?)
9.用过 volatile 吗,说一下
10.有看过 JDK 源码吗?(这个我说没有深入了解过)
11.数据库隔离级别哪几种?(这道直接说忘了,可以提示一下吗)
12.其他问题忘了
(没问项目,全问基础题,算法题最重要,答不好估计过不了)
#二面
1.详细问了项目的整个架构和一些具体功能,关键技术的实现?(谈了估计快半个钟)
2.TCP 三次握手,以及一些具体问题如”为什么要有第三次握手?客户端发给服务器的 报文段丢失了怎么办?这时客户端还没收到服务器的确认包,那它会继续发吗?服务器收到 之后重传的确认号应该是多少?”等等(两轮都问了 TCP,总的来说就是要精通 TCP,滑动窗口,确认重传都要很清楚)
3.线程安全问题(同一面)
4.平衡二叉树(说一下原理?开发实践中哪些地方要用到它?)
5.一个字符串中找出给定字符串,要求效率最高?(字符串匹配的 KMP 算法)
6.如果 HashMap 的大小超过了负载因子定义的容量,怎么办?
7.说一下 hashcode?(自己关联了 equals 和==回答)
8.知道 Unicode 编码吗?(这道我直接说没有深入研究)
9.其他细节题,如 char a=‘海’;float a=1.1; short a=1;分别问了这几个正确吗?
10.想问一道概率论的题目
11.学习理论和做项目你是怎么看的?
12.问了我的职业规划是什么?
13.考不考研,为什么?
#hr 面
1.看到我的实践经历,问我怎么在学习中能抽出时间做这些实践?
2.看到我之前被内推过安卓,问为什么从安卓转做 java?(我给了很多原因,面试官都 表示不理解)
3.说一下职业规划?怎么学习自己这个方向?
4.详细介绍一个自己的项目?
5.自己扩展过的网络通信框架有测试过性能吗,比原框架好在哪里?从几个指标来回答?
6.实习去哪个城市都行吗?
(hr 面表现不太好,没有事先准备)
#总结
TCP、Hashmap、线程安全等重要的知识点基本必考,准备面试的时候需要重点深入 学习。