`

java 面试整理一——基础知识

阅读更多
1. short s1 = 1; s1 = s1 + 1;有错吗?short s1 = 1; s1 += 1;有错吗?
对于short s1 = 1; s1 = s1 + 1;由于1是int类型,因此s1+1运算结果也是int 型,需要强制转换类型
而short s1 = 1; s1 += 1;可以正确编译,因为s1+= 1;相当于s1 = (short)(s1 + 1);其中有隐含的强制类型转换
2. &和&&的区别?
&运算符有两种用法:(1)按位与;(2)逻辑与。&&运算符是短路与运算。
逻辑与跟短路与的差别是非常巨大的,虽然二者都要求运算符左右两端的布尔值都是true整个表达式的值才是true。
&&之所以称为短路运算是因为,如果&&左边的表达式的值是false,右边的表达式会被直接短路掉,不会进行运算。
3. swtich 是否能作用在byte上,是否能作用在long上,是否能作用在String上?
switch(expr)中,expr支持byte、short、char、int、enum、string(1.7)
4. 两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对?
答:不对,如果两个对象x和y满足x.equals(y) == true,它们的哈希码(hash code)应当相同。Java对于eqauls方法和hashCode方法是这样规定的:(1)如果两个对象相同(equals方法返回true),那么它们的hashCode值一定要相同;(2)如果两个对象的hashCode相同,它们并不一定相同。
5. 关于equals和hashCode方法,
equals方法必须满足
自反性(x.equals(x)必须返回true)、
对称性(x.equals(y)返回true时,y.equals(x)也必须返回true)、
传递性(x.equals(y)和y.equals(z)都返回true时,x.equals(z)也必须返回true)
一致性(当x和y引用的对象信息没有被修改时,多次调用x.equals(y)应该得到同样的返回值)
6. 重载(Overload)和重写(Override)的区别。重载的方法能否根据返回类型进行区分?
重载:一个类中同一方法参数数量或者类型不同,对返回值无要求
重写:要求子类被重写方法有相同的返回类型、比父类重写的方法更好访问,不能比父类重写方法有更多的异常。
7. 如何实现对象克隆?
1). 实现Cloneable接口并重写Object类中的clone()方法;
2). 实现Serializable接口,通过对象的序列化和反序列化实现克隆,可以实现真正的深度克隆
public static <T> T clone(T obj) throws Exception {
        ByteArrayOutputStream bout = new ByteArrayOutputStream();
        ObjectOutputStream oos = new ObjectOutputStream(bout);
        oos.writeObject(obj);
ByteArrayInputStream bin = new ByteArrayInputStream(bout.toByteArray());
        ObjectInputStream ois = new ObjectInputStream(bin);
        return (T) ois.readObject();
        }
基于序列化和反序列化实现的克隆不仅仅是深度克隆,更重要的是通过泛型限定,可以检查出要克隆的对象是否支持序列化,这项检查是编译器完成的,不是在运行时抛出异常,这种是方案明显优于使用Object类的clone方法克隆对象。让问题在编译的时候暴露出来总是优于把问题留到运行时。
8. 创建对象时构造器的调用顺序
为对象分配存储空间
开始构造对象
从超类到子类对static成员进行初始化
超类成员变量按顺序初始化,递归调用超类的构造方法
子类成员变量按顺序初始化,子类构造方法调用
9. ArrayList和linkedList
ArrayList基于动态数组实现,查询快、插入删除慢
LinkedList基于链表实现,插入删除快,查询慢
10. hashSet、、LinkedHashSet、TreeSet
hashSet:基于hashMap实现的,无序,不能包含重复元素,非线程安全的
LinkedHashSet:HashSet的子类,使用链表维护元素的次序。有序,非线程安全
TreeSet:使用红黑树结构实现,是sortedSet接口的唯一实现类,可以确保集合内元素处于有序状态
11. HashMap、LinkedHashMap、TreeMap
HashMap:在底层将key-value封装成一个Entry【】进行处理,根据键值的hashcode值存储数据
LinkedHashMap:继承自HashMap,其内部增加了一个链表,用以存放元素的顺序,基于元素的进入顺序排序
TreeMap:实现SortMap接口,能够把它保存的记录根据键排序
12. concurrentHashMap
ConcurrentHashMap在线程安全的基础上提供了更好的写并发能力,但同时大量的利用了volatile,final,CAS等lock-free技术来减少锁竞争对于性能的影响,降低了对读一致性的要求;
Jdk1.7中,concurrenthashMap的核心是分段锁技术,减少锁竞争同时牺牲了对一致性的要求
Jdk1.8中,concurrentHashMap的核心是volatile变量+CAS,比较并交换,乐观锁的实现机制。
13. volatile修饰符
保证了不同线程对这个变量进行操作时的可见性。加入volatile关键字时,会多出一个lock前缀指令。
应用场景:高并发编程下的状态变量、一次性安全发布(双重锁定问题)

14. 说一下几种常见的排序算法和分别的复杂度。
排序法 最差时间分析 平均时间复杂度 稳定度 空间复杂度
冒泡排序 O(n2) O(n2) 稳定 O(1)
快速排序 O(n2) O(n*log2n) 不稳定 O(log2n)~O(n)
选择排序 O(n2) O(n2) 稳定 O(1)
二叉树排序 O(n2) O(n*log2n) 不稳定 O(n)
插入排序 O(n2) O(n2) 稳定 O(1)
堆排序 O(n*log2n) O(n*log2n) 不稳定 O(1)
15. 描述一下链式存储结构。
顺序存储时,相邻数据元素的存放地址也相邻(逻辑与物理统一);要求内存中可用存储单元的地址必须是连续的。
优点:存储密度大(=1),存储空间利用率高。
缺点:插入或删除元素时不方便。
链式存储时,相邻数据元素可随意存放,但所占存储空间分两部分,一部分存放结点值,另一部分存放表示结点间关系的指针
优点:插入或删除元素时很方便,使用灵活。
缺点:存储密度小(<1),存储空间利用率低。
16. 如何遍历一棵二叉树?


先序遍历:遍历顺序规则为【根左右】ABCDEFGHK
中序遍历:遍历顺序规则为【左根右】BDCAEHGKF
后序遍历:遍历顺序规则为【左右根】DCBHKGFEA
17. 倒排一个LinkedList。
Collections.reverse(list);
18. ==和equals的区别?
==是操作符,equals是方法
==一般用于原生类型比较,equals一般用于对象比较
如果==用于对象比较,当两个对象引用的地址相同时返回true
19. hashCode方法的作用?
hashCode()方法和equal()方法的作用其实一样,在java里都是用来对比两个对象是否相等一致.因为重写的equal()里一般比较的比较全面比较复杂,这样效率就比较低,而利用hashCode()进行对比,则只要生成一个hash值进行比较就可以了,效率很高.每当需要对比的时候,首先用hashCode()去对比,如果hashCode()不一样,则表示这两个对象肯定不相等(也就是不必再用equal()去再对比了),如果hashCode()相同,此时再对比他们的equal(),如果equal()也相同,则表示这两个对象是真的相同了,这样既能大大提高了效率也保证了对比的绝对正确性!
20. 如何保证HashMap的线程安全?
//synchronizedMap 本质和hashTable类似
Map<String, String> synchronizedHashMap = Collections.synchronizedMap(new HashMap<String, String>());
//Hashtable 使用synchronized来保证线程安全的
Map<String, String> hashtable = new Hashtable<>();
//ConcurrentHashMap
Map<String, String> concurrentHashMap = new ConcurrentHashMap<>();
21. Java中一个字符占几个字节?
“字节”是byte,“位”是bit;1 byte = 8 bit;java是用unicode来表示字符
1字节: byte , boolean
2字节: short , char
4字节: int , float
8字节: long , double
22. 创建一个对象实例有哪些方法?
a) New
b) 运用反射手段,Java.lang.class或java.lang.reflect.Constructor类的newInstance()
c) 调用对象的clone
d) 通过反序列化实现的深度克隆
23. Session/Cookie的区别?
Session是在服务端保存的一个数据结构,用来跟踪用户的状态,这个数据可以保存在集群、数据库、文件中;
Cookie是客户端保存用户信息的一种机制,用来记录用户的一些信息,也是实现Session的一种方式。
24. String/StringBuffer/StringBuilder的区别
a) String是字符常量;stringBuffer和StringBuilder是字符变量;
b) 执行速度Stringbuilder>StringBuffer>String
c) StringBuffer 与 StringBuilder 中的方法和功能完全是等价的,都继承自AbstractStringBuilder中采用一个char数组来保存需要append的字符串,char数组有一个初始大小,当append的字符串长度超过当前char数组容量时,则对char数组进行动态扩展。只是StringBuffer中的方法大都采用了synchronized关键字进行修饰,因此是线程安全的


网络相关
1. TCP建立连接的三次握手
第一次握手:客户端发送syn包(syn=j)到服务器。
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个ASK包(ask=k)。
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1)。
2. TCP断开连接的四次挥手
TCP客户端发送一个FIN,用来关闭客户到服务器的数据传送
服务器收到这个FIN,它发回一个ACK,确认序号为收到的序号加1
服务器关闭客户端的连接,发送一个FIN给客户端
客户段发回ACK报文确认,并将确认序号设置为收到序号加1
3. 出现大量TIME_WAIT的原因及解决方法
根据TCP协议定义的3次握手断开连接规定,主动关闭socket的一方socket将进入TIME_WAIT状态,TIME_WAIT状态将持续2个MSL(Max Segment Lifetime)。例如,服务器端主动关闭客户端的socket连接,将导致服务器端存在大量的TIME_WAIT状态的socket。 TIME_WAIT是TCP协议用以保证被重新分配的socket不会受到之前残留的延迟重发报文影响的机制,是必要的逻辑保证。
解决方法:调整内核参数
vi /etc/sysctl.conf
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 30
然后执行 /sbin/sysctl -p 让参数生效
net.ipv4.tcp_syncookies = 1 表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭;
net.ipv4.tcp_tw_reuse = 1 表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;
net.ipv4.tcp_tw_recycle = 1 表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。
net.ipv4.tcp_fin_timeout 修改系統默认的 TIMEOUT 时间
4. HTTP协议的头域
a) 通用头域
i. Cache-Control:指定请求和相应遵循的缓存机制,最常见的值是no-cache,指示请求和响应消息不能缓存;
ii. Connection:用于指定处理完本次请求/响应后,客户端和服务器是否还要继续保持连接。
iii. Transfer-Encoding:用于指定实体内容的传输编码方式。
b) 请求头域
i. Accept:用于指定客户端程序能够处理的MIME类型,多个时用逗号隔开;
ii. Accept-Encoding:指定客户端程序支持的压缩方式;
iii. Accept-Language:指定客户端期望返回哪个国家语言的文档;
iv. Accept-Charset:指定客户端程序可以使用的字符集;
v. Host:指定资源所在的主机名和端口号;
vi. Referer:指定请求uri的源资源地址,也就是用户从哪个uri过来,允许服务器生成回退链表;
vii. User-Agent:浏览器客户端信息,如使用哪种浏览器等;
viii. Cookie:服务器在浏览器端留下的信息,这是最重要的请求头字段之
c) 响应头域
i. Server:说明响应服务器的名称,如BWS/1.0或者Apache/1.3.27;
ii. Location:在302跳转页面应答的时候,带有Location指明跳转的目的地址;
iii. Set-Cookie:服务器对浏览器端设置Cookie
d) 实体头域
i. Content-Encoding:指明实体内容采用的压缩方式;
ii. Content-Length:指明实体内容的长度,单位为字节;
iii. Content-Type:指定实体内容的MIME类型;
iv. Expires:指明实体内容在什么时间之后过期,不再缓存。
5. HTTP应答状态码
1xx:信息,请求收到,继续处理;
2xx:成功,行为被成功地接受、理解和采纳;
3xx:重定向,为了完成请求,必须进一步执行的动作;
4xx:客户端错误,请求包含语法错误或者请求无法实现;
5xx:服务端错误,服务器不能正确执行一个正确的请求。
200 正确返回结果
302 页面跳转
304 页面未改动
400 请求错误,不符合协议
404 页面未找到
405 方法不允许
501 未被使用
503 服务不可用
6. HTTP、TCP、UDP的区别
TCP/IP是个协议组,可分为三个层次:网络层、传输层和应用层。
在网络层有IP协议、ICMP协议、ARP协议、RARP协议和BOOTP协议
在传输层中有TCP协议与UDP协议
在应用层有FTP、HTTP、TELNET、SMTP、DNS等协议
Http协议是基于TCP协议实现的
Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。
  • 大小: 11.6 KB
分享到:
评论

相关推荐

    Java面试题必备——Java基础知识部分汇

    Java面试题必备——Java基础知识部分汇总 本文总结了Java基础知识部分的重要知识点,涵盖了Java面试中常见的问题,包括作用域、String类、int和Integer的区别、String和StringBuffer的区别、运行时异常与一般异常的...

    java面试题答案——面试经典

    在Java面试中,面试官常常会考察候选人的基础知识,包括数据类型、字符串操作、数据转换、日期时间处理、数组与集合、文件I/O操作、多态性、编码转换以及数据库访问等。下面我们将对这些知识点进行详细讲解。 1. **...

    java程序员面试题——863面试集

    #### 一、Java基础知识 1. **作用域public, private, protected, 以及不写时的区别** - **public**: 可以被任何类访问。 - **protected**: 可以被同一包内及不同包内的子类访问。 - **friendly** (默认): 只能...

    115个Java面试题和答案——终极列表

    Java面试题是每个Java开发者在求职过程中必须面对的挑战,涵盖范围广泛,从基础概念到高级特性和设计模式。这份终极列表包含115个Java面试题和答案,旨在帮助求职者全面准备,以期在面试中表现出色。以下是部分核心...

    【精品干货】JAVA超全知识点总结——核心面试知识汇总(283页).pdf

    以上是Java面试中常见的JVM和内存管理相关的知识点,对于Java开发者来说,理解和掌握这些概念是基础,也是提升职业竞争力的关键。在实际面试中,面试官可能会深入询问这些话题,例如垃圾收集的工作机制、内存泄漏的...

    090830 Java面试题——基础篇60题

    ### Java面试题——基础篇60题解析 #### 1. 作用域 public,private,protected 以及不写时的区别 在Java中,类成员(如变量、方法等)的作用域可以通过不同的修饰符来控制。具体如下: - **public**:公开的,...

    Java面试题——重整理版

    Java面试题涵盖了许多Java语言的核心概念,包括J2SE(Java 2 Standard Edition)的基础知识,JSP(Java Server Pages)、Servlet、JDBC(Java Database Connectivity)、JDO(Java Data Objects)、XML、EJB...

    java程序员必备——比较全的Java面试题

    【Java程序员必备——比较全的Java面试题】 Java编程语言作为全球最受欢迎的开发语言之一,其面试题库广泛且深入,涵盖了基础语法、面向对象、集合框架、多线程、网络编程、I/O流、数据库操作、设计模式等多个方面...

    java面试题——数据结构

    Java面试中,数据结构是一个重要的考察点,因为它涉及到程序设计的基础和效率。以下是根据题目提供的内容,对相关知识点的详细阐述: 1. 栈和队列都是线性数据结构,它们的共同特性是仅允许在特定位置(栈顶或队尾...

    java面试——深圳-银盛支付-Java中级.zip

    这份"java面试——深圳-银盛支付-Java中级.zip"压缩包文件很可能包含了针对Java中级开发者的一系列面试问题和解答,旨在帮助求职者提升自己的技能,并在面试中脱颖而出。下面,我们将深入探讨一些可能涵盖的Java中级...

    Java自学之路——超仔细含练习项目及源码 Java知识体系最强总结————含各个阶段的面试题

    ### Java自学之路——超详细含练习项目及源码 #### Java知识体系最强总结 ...通过上述内容的学习,不仅可以掌握Java的基础知识,还能了解到更多关于Java开发的实践经验和技巧。这对于初学者来说是非常宝贵的学习资源。

    java面试——南京-软通动力-Java中级.zip

    这份资料“java面试——南京-软通动力-Java中级.zip”包含了一份详细的PDF文档,旨在帮助求职者准备相关的面试问题。以下是基于Java中级面试可能会涉及的一些核心知识点的详细阐述: 1. **Java基础** - **数据类型...

    java面试——深圳-中国平安-Java中级.zip

    下面将根据"java面试——深圳-中国平安-Java中级.pdf"这份资料,提炼出一些核心的Java知识点。 1. **Java基础**: - **数据类型**:包括基本数据类型和引用数据类型,理解它们的区别和内存管理。 - **类与对象**...

    java——面试题

    在Java编程语言中,面试题往往涵盖了广泛的知识点,从基础语法到高级特性。以下是根据题目给出的部分内容解析的一些Java面试常见问题及其解答: 1. **一个.java源文件中的类数量**: - 一个`.java`源文件可以包含...

    Java面试题和答案——终极(上、下)_尚硅谷_宋红康.zip

    本资料"Java面试题和答案——终极(上、下)_尚硅谷_宋红康.zip"包含了全面的Java面试问题和解答,旨在帮助求职者准备Java程序员或高级工程师的面试。 这份压缩包由两个PDF文件组成:115个Java面试题和答案——终极...

    2021Java大厂面试题——大厂真题之拼多多-Java高级.pdf

    ### 并发编程基础知识 #### 一、并发编程三要素 **1. 原子性** - **定义**:原子性是指一系列的操作或事务作为一个整体被执行,要么全部完成,要么全部都不执行。在多线程环境中,一个操作如果具有原子性,则意味...

    BAT 115个Java面试题和答案——终极(上)

    这份“BAT 115个Java面试题和答案——终极(上)”的资源提供了丰富的学习材料,旨在帮助Java开发者深入理解语言的核心概念、高级特性以及在实际开发中的应用。以下是一些关键知识点的概述: 1. **基础语法**:面试...

Global site tag (gtag.js) - Google Analytics