java面试题

目录

Java相关

1、从概念方面来说

2、从内存的构建方面来说(内存中,有堆内存和栈内存两者)

Serializable接口的作用。

1、运行时异常

2、被检查异常

3、错误

吗?

1. 多态是继封装、继承之后,面向对象的第三大特性。

2. 多态现实意义理解:

1. 多态体现为父类引用变量可以指向子类对象。

2. 前提条件:必须有子父类关系。

1. 多态的定义与使用格式

1. HashMap和Hashtable都实现了Map接口

2. 都可以存储key-value数据

1、能够运行时动态获取类的实例,提高灵活性;

2、与动态编译结合

3、ReflectASM工具类,通过字节码生成的方式加快反射速度

是用==还是equals()?它们有何区别?

11. ArrayList和LinkedList区别?

12. ArrayList和Vector的区别

13. ArrayList,Vector,LinkedList的存储性能和特性

14. HashMap和Hashtable的区别

15. Java中的同步集合与并发集合有什么区别?

16. Java中的集合及其继承关系

17. poll()方法和remove()方法区别?

18. LinkedHashMap和PriorityQueue的区别

19. WeakHashMap与HashMap的区别是什么?

20. ArrayList和LinkedList的区别?

21. ArrayList和Array有什么区别?

22. ArrayList和HashMap默认大小?

23. Comparator和Comparable的区别?

24. 如何实现集合排序?

25. 如何打印数组内容

26. LinkedList的是单向链表还是双向?

27. TreeMap是实现原理

28. 遍历ArrayList时如何正确移除一个元素

29. HashMap的实现原理

30. HashMap自动扩容

31. HashMap线程安全吗?

32. HashMap总结

33. Java集合框架是什么?说出一些集合框架的优点?

34. 集合框架中的泛型有什么优点?

35. Java集合框架的基础接口有哪些?

36. 为何Collection不从Cloneable和Serializable接口继承?

37. 为何Map接口不继承Collection接口?

38. Iterator是什么?

39. Iterator和ListIterator的区别是什么?

40. Enumeration和Iterator接口的区别?

41. 为何没有像Iterator.add()这样的方法,向集合中添加元素?

42. 为何迭代器没有一个方法可以直接获取下一个元素,而不需要移动游标?

43. Iterater和ListIterator之间有什么区别?

44. 遍历一个List有哪些不同的方式?

45. 通过迭代器fail-fast属性,你明白了什么?

46. fail-fast与fail-safe有什么区别?

47. 在迭代一个集合的时候,如何避免

ConcurrentModificationException?

Java并发编程

方法一:继承Thread类,作为线程对象存在(继承Thread对象)

方法二:实现runnable接口,作为线程任务存在

方法三:匿名内部类创建线程对象

方法四:创建带返回值的线程

方法五:定时器Timer

方法六:线程池创建线程

方法七:利用java8新特性 stream 实现并发

synchronized关键字最主要的三种使用方式:

1、获取项目的pid,jps或者ps -ef | grep java,这个前面有讲过

2、top -H -p pid,顺序不能改变

JVM面试题

1、如果类存在直接的父类并且这个类还没有被初始化,那么就先初始化父类;

2、如果类中存在初始化语句,就依次执行这些初始化语句。

1. CMS默认启动的回收线程数=(CPU数目+3)*4

4、G1

1、虚拟机栈中引用的对象

2、方法区静态成员引用的对象

3、方法区常量引用对象

4、本地方法栈JNI引用的对象

1. 当Eden区满时,触发Minor GC. FullGC:

1. 调用System.gc时,系统建议执行Full GC,但是不必然执行

2. 老年代空间不足

3. 方法区空间不足

4. 通过Minor GC后进入老年代的平均大小大于老年代的剩余空间

5. 堆中分配很大的对象,而老年代没有足够的空间

数据结构与算法

1. 给定的数组按照顺序已经排好:只需要进行

1. 三数取中法

2. 随机法

1. 必须在原数组上操作,不能拷贝额外的数组。

2. 尽量减少操作次数。

1. 定义一个栈,先将根节点压入栈

2. 若栈不为空,每次从栈中弹出一个节点

3. 处理该节点

4. 先把节点右孩子压入栈,接着把节点左孩子压入栈(如果有孩子节点)

5. 重复 2-4

6. 返回结果

网络协议面试题

1、http的响应报是服务器返回给我们的数据,必须先有请求体再有响应报文

2、响应报文包含三部分 状态行、响应首部字段、响应内容实体实现

1、建立TCP连接

2、Web浏览器向Web服务器发送请求行

3、Web浏览器发送请求头

4、Web服务器应答

5、Web服务器发送应答头

6、Web服务器向浏览器发送数据

7、Web服务器关闭TCP连接

1. 使用参数传递机制:

2. 使用 Cookie 技术

3. 使用 Session 技术

1、1xx(临时响应)

2、2xx(成功)

3、3xx(重定向):表示要完成请求需要进一步操作

4、4xx(错误):表示请求可能出错,妨碍了服务器的处理

5、5xx(服务器错误):表示服务器在尝试处理请求时发生内部错误

1. 寻找到SQL注入的位置

2. 判断服务器类型和后台数据库类型

3. 针对不通的服务器和数据库特点进行SQL注入攻击

2、SQL注入攻击实例:

3、应对方法:

1. 参数绑定:

数据库

1、Server

2、存储引擎: 存储数据, 提供读写接口.

1. B+Tree 的磁盘读写代价更低

1. B+Tree 的查询效率更加稳定

1、读写分离

2、分段加锁

3、减少锁持有的时间

数据库操作

字符集编码

1. 数值类型

2. 字符串类型

3. 日期时间类型

1. PRIMARY 主键

2. UNIQUE 唯一索引(唯一约束)

3. NULL 约束

4. DEFAULT 默认值属性当前字段的默认值。

5. AUTO_INCREMENT 自动增长约束

6. COMMENT 注释

7. FOREIGN KEY 外键约束

a. select_expr

b. FROM 子句

c. WHERE 子句

d. GROUP BY 子句, 分组子句

子查询

TRUNCATE

视图

1. 原子性(Atomicity)

2. 一致性(Consistency)

3. 隔离性(Isolation)

4. 持久性(Durability)

触发器

用户和权限管理

杂项

1、 高性能:

2、高并发:

redis 中的数据都是热点数据?

1、会话缓存(Session Cache)

2、全页缓存(FPC)

3、队列

4、排行榜/计数器

5、发布/订阅

3 秒后使用 ttl 命令查询剩余的超时时间:

1:成功清理过期时间。

1、缓存雪崩

2、 缓存穿透

redis 比多线程的memcached 效率要高?**

1. mc 可缓存图片和视频。rd 支持除 k/v 更多的数据结构;

2. rd 可以使用虚拟内存,rd 可持久化和 aof 灾难恢复,rd 通过主从支持数据备份;

3. rd 可以做消息队列。

1、 快照(snapshotting)持久化(RDB)

2、 AOF(append-only file)持久化

3、 Redis 4.0 对于持久化机制的优化

4、 补充内容:AOF 重写

1. 通过双向链表来实现,新数据插入到链表头部;

2. 每当缓存命中(即缓存数据被访问),则将数据移到链表头部;

3. 当链表满的时候,将链表尾部的数据丢弃。

1、纯 KV,数据量非常大的业务,使用 memcache 更合适,原因是:

1、 String

2、 Hash

3、 List

4、 Set

5、 Sorted Set

会遇到问题吗?

MongoDB 环境?

(journaling)而其他部分则不使用吗?

GridFS来存储文件?

GridFS来存储文件?

1、架构简单

2、没有复杂的连接

3、深度查询能力,MongoDB支持动态查询。

4、容易调试

5、容易扩展

6、不需要转化/映射应用对象到数据库对象

7、使用内部内存作为存储工作区,以便更快的存取数据。

框架相关面试题

1、单例模式

2、原型模式

3、工厂模式

4、适配器模式

5、包装模式

6、代理模式

7、观察者模式

8、策略模式

9、模板模式

1、第一种基于JDK的动态代理的原理是:

1、properties文件; 2、YAML文件;

1、在 Eclipse 中,使用文件 - 新建 Maven 项目来创建一个新项目

2、添加依赖项。

3、添加 maven 插件。

4、添加 Spring Boot 应用程序类。到这里,准备工作已经做好!

1、Spring

2、Spring MVC

3、SpringBoot

微服务

1、添加pom依赖

2、配置文件添加相关配置

3、启动类添加注解@EnableConfigServer

1、添加pom依赖。

2、启动类添加@EnableFeignClients

3、定义一个接口@FeignClient(name=“xxx”)指定调用哪个服务

1、使用功能区进行负载平衡。

2、获取服务实例,然后获取基本 URL。

3、利用 REST 模板来使用服务。前面的代码如下

中间件相关

1. Dubbo是什么?

2. 为什么要用Dubbo?

3. Dubbo 和 Spring Cloud 有什么区别?

1、通信方式不同

2、组成部分不同

4. Dubbo都支持什么协议,推荐用哪种?

3、hessian:// 4、http://

5、webservice:// 6、thrift://

1、Spring 配置方式

2、Java API 配置方式

1、顺序一致性

2、原子性

3、单一视图

4、可靠性

5、实时性(最终一致性)

1、数据发布/订阅

2、负载均衡

3、命名服务

4、分布式协调/通知

5、集群管理

6、Master 选举

7、分布式锁

8、分布式队列

1、恢复模式

2、广播模式

还可以使用吗?

3 个节点的 cluster 可以挂掉 1 个节点(leader 可以得到 2 票>1.5)

1、直接差异化同步(DIFF 同步)

2、先回滚再差异化同步(TRUNC+DIFF 同步)

3、仅回滚同步(TRUNC 同步)

4、全量同步(SNAP 同步)

Linux

touch命令

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值