简单:
- Java语言有几种基本类型,分别是什么?
8种,int byte short long double float char boolean
2.int[]类型是不是基本类型?
不是
3.什么是128陷阱?什么是装箱?什么是拆箱?为什么要有包装类?
integer类型在取值128用==判断返回false。装箱,基本类型转包装类类型(引用类型)。拆箱,包装类类型(引用类型)转基本类型。
泛型只能放引用类型不能放基本类型,所以要用包装类代替。
4.位运算有哪几种?
7种,与、或、异或(ab交换不依赖其它变量)、取反、左移、不带符号右移、带符号右移
5.“>>”和”>>>”的区别是什么?
>>右移过程中左侧补符号位,>>>右移过程中左侧补0
6.String类的常用函数有哪些?列举十种。
Length(),charAt(),contains(),isEmpty(),startwith(),endwith(),equals(),toCharArray(),replace(),split(),substring(),toUpperCase(),trim()
7.String和StringBuffer,StringBuilder的区别有哪些?所有类名包含Buffer的类的内部实现原理是什么?有什么优势?
String本地不可变,StringBuffer和StringBuilder本地可变,内部实现是一个足够大的数组。StringBuffer内部加锁,保证多线程下的安全性。StringBuffer和StringBuilder速度更快。
所有的Buffer数据都是通过数组实现,在数据量大的时候可以减少内存开销。
内存页?字符串类型每次修改都申请新的内存页(4KB起步),加剧内存消耗
8.String字符串的不可变是指哪里不可变?
原地址不可变
9.字符串常量池是什么?不同的JDK版本都分别位于哪个区域?
JVM为了降低字符串对象创建次数,增加一个内存叫字符串常量池。String a=“”的形式。1.7之前方法区中,1.7以及以后堆中。
10.Java异常类有哪些?分别管理什么异常?
人为异常(输入输出不符合要求)、别人配合异常、硬件异常、自身代码异常 try catch可以使线程不中断仍旧向下执行。
11.Java反射获取类信息的方式有哪几种?分别是什么?
3种,对象.getclass()、类名.class、class.forname(类路径)
12.Java代理的主要方法有哪几种?列举代理的使用场景2个。
- invoke普通类代理,普通类newInstance生成对象后调用方法。
- 接口类、抽象类不能有自己的对象,通过多态调用子类的方法。
13.equals()方法的作用是什么?重写equals需要注意哪些事项?为什么?
类继承的默认方法是比较引用的地址,String重写了equals()比较值,基本类型不能使用equals()。重写hashcode(),因为使用hashmap时二者配合。
14.Java是按值传递还是按引用传递?什么是引用传递,什么是值传递,哪些语言支持引用传递?
按值传递,引用传递调用方法时传递句柄地址,按值传递传递基本类型或者对象地址,c++(&)
15.描述java的类初始化顺序?如果存在继承,初始化顺序会如何
父类静态块 子类静态块 父类非静态块 父类构造方法 子类非静态块 子类构造方法
注意:不要和类加载顺序搞混JVM详细讲
16.重写和重载的区别是什么?
重写:覆盖从父类继承下的方法
重载:在同一个类中方法名一样,参数列表不同。
17.子类构造方法调用父类构造方法的注意事项有哪些?
super调用,放在第一行。
18.子类实例初始化是否触发发父类实例初始化?
是
19.instanceof关键字的作用是什么?
判断某对象是否属于某个类或者这个类的子孙类
20.基本类型的强制类型转换是否会丢失精度?引用类型的强制类型转换需要注意什么?
会,长类型接收短类型不需要强转,短类型接收长类型会丢失精度。
引用类型强制类型转换要满足多态要求。句柄1=句柄2强转,通过instanceof判断,句柄2指向的对象要是句柄1指向对象的子孙类对象。
21.什么是枚举?详细介绍,不低于100字
枚举:限制对象个数的类,声明类时已经给出。枚举类的构造方法是私有的,不能随便new。
22.一个汉字占多少位?一个字母占多少位?
汉字:Ascll编码没有汉字 Unicode 2byte utf8 3-4byte utf32 4byte
字母:任何编码都包含ascll编码所以所有编码中字母占的大小都一样 1byte。
23.字符串类的length()方式是否能够得到字符串内有多少个字符?为什么?
绝大多数可以,length获取的是占代码单元的数量,绝大多数字符占一个代码单元,极少数特殊字符占两个代码单元。
24.“”与null的区别是什么?
“”是空字符串,java底层C实现“”,里面有占位符。Null里面是什么也没有。
25.什么是代码单元?什么是码点?
码点某个字符编码值,代码单元存储的基本单位
26.switch可以选择哪些类型?什么是siwtch击穿?
Byte short int char 字符串 枚举 从case满足处开始一直往下执行直到遇到break
27.基本类型数组和引用类型数组的数据在物理地址上是否连接在一起?
不是,只有基本类型的一维数组物理地址连续。基本类型多维数组和引用数据类型数组都是在逻辑上连续。
28.TCP协议有哪些协议字段?如何保障可靠传输的?滑动窗口解决了什么问题?
目的IP地址,目的端口号,来源IP地址,来源程序端口号,响应时间,超时重发,过期时间,CRC校验码,数据总大小
校验和:通过检验和的方式,接收端可以检测出来数据是否有差错和异常,假如有差错就会直接丢弃TCP段,重新发送。TCP在计算检验和时,会在TCP首部加上一个12字节的伪首部。检验和总共计算3部分:TCP首部、TCP数据、TCP伪首部。
确认应答机制:发送端发送信息给接收端,接收端会回应一个包,这个包就是应答包。只要发送端有一个包传输,接收端没有回应确认包(ACK包),都会重发。或者接收端的应答包,发送端没有收到也会重发数据。这就可以保证数据的完整性。
超时重传:超时重传是指发送出去的数据包到接收到确认包之间的时间,如果超过了这个时间会被认为是丢包了,需要重传。
流量控制:TCP根据接收端对数据的处理能力,决定发送端的发送速度,这个机制就是流量控制。
拥塞控制:网络非常拥堵,此时再发送数据就会加重网络负担,那么发送的数据段很可能超过了最大生存时间也没有到达接收方,就会产生丢包问题。为此TCP引入慢启动机制,先发出少量数据,就像探路一样,先摸清当前的网络拥堵状态后,再决定按照多大的速度传送数据。
滑动窗口:把定量的数据分为一组,当一整组的数据都传递完成后,再进行响应,不需要每次传输都进行回应,节省时间。(类似核酸检测)
29.什么是深拷贝?什么是浅拷贝?
深拷贝创建新的内存空间,将值拷贝过来。浅拷贝是直接指向原来的对象。
30.访问器如何保障线程安全?举例说明。
深拷贝
31.final关键字的作用有哪些?
变量不可第二次赋值,方法不可重写,类不能继承,对象不能改变指向,防止指令重排序保证多线程下的可见性。
32.static的作用是什么?详细介绍一些
修饰的代码块、属性、方法存放在静态常量池。通过类名调用。
33.什么是对象锁,什么是类锁?
类锁,如果有多个加锁的静态方法,当调用其中一个加锁的静态方法相当于锁住了整个类中所有带锁的静态方法都不允许访问,直到该方法完成出栈,不带锁的不受影响。
对象锁,如果有多个加锁的非静态方法,调用其中一个加锁的非静态方法相当于锁住了这个对象的加锁的非静态方法。只有当该方法出栈,其他方法才可被访问。
34.类是否支持多继承?是否支持多派生?
不支持多继承,支持多派生
35.解释一下什么是多态?
父类句柄指向子孙类对象
36.反射可以获取类的哪些信息?
所有信息
37.什么是注解?
Java注解它提供了一种安全的类似注释的机制,用来将任何的信息或元数据(metadata)与程序元素(类、方法、成员变量等)进行关联。
38.什么是泛型,请写一个泛型队列或者泛型栈。
广泛代表任意
泛型列表
泛型队列
泛型栈
39.反射能否获取私有信息,如果能,需要注意什么?
能,setAccessible(true)
40.基本类型的数据存在jvm的哪个区域?
全局变量在堆,方法内的在栈中
41.Object类的方法有哪些?分别有什么作用?
equals(Object obj)//比较两个对象物理地址是否相等
getClass()//获取反射信息
hashCode()//根据地址获取散列码,作为对象标记,有极小的概率不同对象hashcode一样
notify()//唤醒等待的单个线程
notifyAll()//唤醒等待的所有线程
toString()//输出类的类信息(包括类的路径,类的包名,类的名字)
wait()//让线程进入等待状态
wait(long timeout)
wait(long timeout,int nanos)
中等(每道题不低于200字):
标蓝亮点
1.如何实现断点续传技术?
传输文件被分成若干小文件数据包,并给他们编号。接收方受到小数据包后记录他们的编号。如果产生中断可以根据已接收的编号继续接收传输异常的部分。
2.什么是socket?作用有哪些?
Socket是用来解析数据包的,实现网络通信
2.视频加载技术如何做到边加载边播放的?
将一个视频数据包切割成多个数据包,然后以小数据包为单元就行下载,接收方下载完一个小数据包就可以观看,同时还在下载别的小数据包,这样就可以一边下载一边观看。
困难(写详细,能够给面试官讲明白的,沟通障碍不加分):
- 前端如何调用servlet方法的?
js通过ajax传输数据,socket解析数据包传递给tomcat。socket将数据给处理了,tomcat获取的只有网络协议部分,内有请求路径、request和response两个入参。tomcat通过反射和代理找到请求路径对应的servlet。
servlet传回tomcat数据包,tomcat数据包将数据交给socket处理。通过ajax返回前端。