`

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基础知识 1.Java有那些基本数据类型,String是不是基本数据类型,他们有何区别。 答案: 8种基本类型 char byte short int long float double boolean String和他们的区别你从首字母就能看出来了,String的...

    Java程序员面试宝典——2012版

    面试必问的技术,以及刁钻问题的解答。 java基础知识。

    八股文知识点汇总——Java面试题指南

    JavaOOP面试题 Java集合/泛型面试题 Java异常面试题 Java中的IO与NIO面试题 Java反射面试题 Java序列化面试题 Java注解面试题 多线程&并发面试题 JVM面试题 Mysql面试题 Redis面试题 Memcached面试题 MongoDB面试题 ...

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

    2.Java知识体系最强总结(含各个阶段的面试题) 3.Java是一门面向对象的编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java...

    2009最新java经典面试题目(包含答案)

    2009最新java面试注意地方——请不要忽视这些java基础知识

    Java面试宝典——spring相关100道经典面试题.pdf

    java开发应聘必备,此文档可以让你之花2小时就可以基本掌握srping面试基础,总结了包括阿里,京东,字节跳动的大厂面试经历,基本看此文档就可以回顾sring和springmvc的基础知识了

    java面试题库2021.pdf

    2、 Java 高级知识 ①线程 ②锁 ③JDK ④反射 ⑤JVM ⑥GC ⑦ IO 和 NIO, AIO 二、 JavaEE 部分 1、 Spring ①IoC 与 Bean 配置、 管理 ②AOP 与事务、 权限控制 ③S2SH 整合开发 ④Spring, JPA 整合 2、 Hibernate...

    2021最新java面试合集pdf.rar

    Java面试题(基础).pdf JVM 实用参数系列 - v1.0.pdf JVM与性能优化知识点整理.pdf JVM面试专题.docx JVM面试专题及答案.pdf Linux系统Redis笔记.docx MongoDB学习笔记.docx mybatis原理.docx MyBatis面试专题.docx...

    Java面试题资料,包含核心知识,消息队列,大数据等

    在准备Java面试的过程中,一份详尽且深入的学习资料就如同航海者的指南针,为你在知识的海洋中指引方向。这份资料不仅应该触及Java的基石——例如JVM的工作原理、内存模型、垃圾回收机制,以及Java的集合框架中的...

    java面试题及技巧4

    │ java程序员面试资料.zip │ JAVA笔试题(上海释锐).pdf │ MIME简介.txt │ SCJP试题详解.pdf │ SQL面试题_心灵深处.htm │ Struts+Hibernate+Spring轻量级J2EE企业应用实战.pdf │ Struts中文手册.pdf │ ...

    java面试题以及技巧

    │ java程序员面试资料.zip │ JAVA笔试题(上海释锐).pdf │ MIME简介.txt │ SCJP试题详解.pdf │ SQL面试题_心灵深处.htm │ Struts+Hibernate+Spring轻量级J2EE企业应用实战.pdf │ Struts中文手册.pdf │ ...

    java面试题目与技巧1

    │ java程序员面试资料.zip │ JAVA笔试题(上海释锐).pdf │ MIME简介.txt │ SCJP试题详解.pdf │ SQL面试题_心灵深处.htm │ Struts+Hibernate+Spring轻量级J2EE企业应用实战.pdf │ Struts中文手册.pdf │ ...

    java面试题及技巧3

    │ java程序员面试资料.zip │ JAVA笔试题(上海释锐).pdf │ MIME简介.txt │ SCJP试题详解.pdf │ SQL面试题_心灵深处.htm │ Struts+Hibernate+Spring轻量级J2EE企业应用实战.pdf │ Struts中文手册.pdf │ ...

    java面试题以及技巧6

    │ java程序员面试资料.zip │ JAVA笔试题(上海释锐).pdf │ MIME简介.txt │ SCJP试题详解.pdf │ SQL面试题_心灵深处.htm │ Struts+Hibernate+Spring轻量级J2EE企业应用实战.pdf │ Struts中文手册.pdf │ ...

    Java 基础——尚硅谷学习笔记(含面试题) 2023年.zip

    Java前后开发面试题,大厂进阶之路,基于JavaGuide、Cyc大佬、牛客上的面经及王道考研相关视频,并改进了其中说法矛盾或含糊之处。 包含计算机网络知识、JavaSE、JVM、Spring、Springboot、SpringCloud、Mybatis、多...

    Java编程语言的基础知识作了一个较为全面的汇总-供大家学习研究参考

    4、编写第一个Java程序并运行 5、CLASSPATH指的是类加载路径 6、程序注释,对以后的所有代码都要进行注释,主页可以方便进行开发需求 7、标识符和关键字 8、Java数据类型的划分以及数据类型的操作 java数据类型的...

    Java实战开发(李兴华)——代码部分

    “注意”、“提示”、“问答”是《Java开发实战经典(名师讲坛)》的一大特色,通过这样的方式,可以让读者进行更加全面的思考,这些特色中还包含了不少在Java面试中有可能遇到的问题,这让每位读者在打好基础、巩固...

    面试宝典——死记硬背也能拿15k

    此为初稿,目前包括 java 基础、javaweb、前端技术、ssm 框架、数据 库、开发工具、权限管理、分布式中间件、第三方技术、面试技巧、面试礼仪、电话沟通礼仪、邮件沟通礼仪、面试技巧等内容,话术中难免也有不严谨...

    互联网公司资料整理及面试资料.zip

    这份互联网校招试题资料包含了各个互联网公司常见的笔试面试题目,涵盖了计算机基础知识、编程语言、数据结构与算法、操作系统、网络通信等多个方面。这些试题旨在考察求职者的专业知识水平和解决问题的能力,是...

Global site tag (gtag.js) - Google Analytics