JAVA 开发 工程师 面经 大厂 2019

#一面

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、线程安全等重要的知识点基本必考,准备面试的时候需要重点深入 学习。
 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值