最近Java高级工程师面试总结

简介: 面试总结Java基础Hashtable和HashMap的区别。抽象类与接口的区别。final关键字的使用和区别。

面试总结

Java基础

Hashtable和HashMap的区别。

抽象类与接口的区别。

final关键字的使用和区别。

异常分类和处理机制。

JDK版本区别。

StringBuilder内部实现机制。

反射机制的使用。

匿名内部类的使用。

泛型的概念和使用。

弱引用和虚引用的概念和使用方式。

开源框架

SpringMVC和Struts2的区别

Spring IOC和AOP的概念以及实现方式

Spring事务的管理

Hibernate与MyBatis的比较

Hibernate延迟加载的机制

JVM虚拟机

GC算法有哪些

垃圾回收器有哪些

如何调优JVM

缓存和NoSQL

缓存的使用场景

缓存命中率的计算

Memcache与Redis的比较

如何实现Redis的分片

MongoDB的特点

分布式

zookeeper的用途

dubbo的用途以及优点

dubbo的实现原理

数据结构和算法

单向链表的逆序排列

双向链表的操作

1亿个整数的倒序输出

找出给定字符串中最长回文(回文:abcdcba,两端对称)

网络编程

Get和Post的区别

Https协议的实现

长连接的管理

Socket的基本方法

数据库

inner join和left join的区别

复杂SQL语句

数据库优化方式

数据库拆分方式

如何保证不同数据结构的数据一致性

安全

什么是XSS攻击,具体如何实现?

开放问题:如何保障系统安全?

设计模式

写出一个设计模式的类图

设计模式的意义是什么

写个单例模式的代码

多线程

如何避免Quartz重复启动任务

线程池满了如何处理额外的请求

同一个对象的连个同步方法能否被两个线程同时调用

1、零基础(没有任何编程经验)

2、有前端基础(HTML+CSS+JAVASCRIPT),没有JAVA基础

3、有前端基础(HTML+CSS+JAVASCRIPT),有JAVA基础(没有相关工作经验)

4、有前端基础(HTML+CSS+JAVASCRIPT),有JAVA工作经验

5、没有前端基础,有JAVA基础(没有相关工作经验)

6、没有前端基础,有JAVA工作经验

多年工作经验的梳理和总结,带着大家全面、

科学地建立自己的技术体系和技术认知!

部分答案

Java基础

HashMap和Hashtable的区别

HashMap是非线程安全的,Hashtable是线程安全的。

HashMap的键值都可以为null,Hashtable的键值都不可以为null值。

HashMap继承自AbstractMap类,Hashtable继承自Dictionary类。

ps : Properties类继承自Hashtable类。

异常分类和处理机制

分类:

运行时异常(Runtime Exception)

受检查异常(Checked Exception)

运行时异常:

必须继承RuntimeException类,

定义方法时不必声明会抛出运行时异常。

调用方法时不必捕获运行时异常。

受检查异常:

不继承自RumtimeException类

定义方法时需要抛出可能会抛出的Checked Exception

调用方法时需要捕获Checked Exception或者继续向上抛出。

逻辑上:

运行时异常:一般不需要或者不知道如何处理此类异常;

受检验异常:一般需要知道如何处理可能发生的异常情况。

StringBuilder内部实现机制

StringBuilder内部有一个字符数组,代码如下

char[] value; //字符数组int count; //字符串长度

每一次append操作都是将新的字符串加入到可变长的字符数组中,长度计算方式与ArrayList类似。调用toString()方法时,new一个String对象即可。

public String toString() { return new String(value, 0, count);// Create a copy, don't share the array}

ps: StringBuffer是线程安全的,StringBuilder是非线程安全的。

匿名内部类的使用

匿名内部类是没有名字的类,只在某一处被使用,不会被多处调用,一般是某个父类或接口的特定实现。

强引用、软引用、弱引用和虚引用

强引用: 一般的引用都是强引用,即使OutOfMemory也不会回收这部分被把持的引用内存。

软引用(SoftReference): 如果内存空间足够,垃圾回收器就不会回收它;如果内存空间不足了,就会回收这些对象的内存。只要垃圾回收器没有回收它,该对象就可以被使用。++软引用可以用来实现内存敏感的高速缓存。++

弱引用(WeakReference):弱引用的对象拥有更短暂的生命周期。当垃圾回收期发现只有若引用的对象,不论内存空间足够与否,都会回收它。

虚引用():虚引用不会决定对象的生命周期,如果一个对象仅持有一个虚引用,那么它随时可能被回收。++虚引用主要用来跟踪对象被垃圾回收器回收的活动。++

开源框架

SpringMVC和Struts2的区别

SpringMVC的方法级别的拦截,Struts2是类级别的拦截;

SpringMVC是基于Servlet实现Controller,Struts2是基于Filter实现;

SpringMVC性能和安全性高于Struts2;

SpringMVC更加组件化和流程化,易于扩展,比如返回JSON通过设置@ResponseBody即可;

Struts2更加无耦合,比较纯粹,但是需要更多的自行开发的代码以支持更多功能。

Spring事务的管理

分类:声明式事务、编程式事务

声明式事务:通过统一配置实现事务的统一管理,一般配置TransactionMananger以及相关属性即可。

编程式事务(注解方式):在需要事务的方法上配置相关的注解(包括事务类型、回滚策略等)

事务类型:

PROPAGATION_REQUIRED

PROPAGATION_SUPPORTS

PROPAGATION_MANDATORY

PROPAGATION_REQUIRES_NEW

PROPAGATION_NOT_SUPPORTED

PROPAGATION_NEVER

PROPAGATION_NESTED

事务隔离级别

ISOLATION_DEFAULT

ISOLATION_READ_UNCOMMITTED

ISOLATION_READ_COMMITTED

ISOLATION_REPEATABLE_READ

ISOLATION_SERIALIZABLE

Hibernate与MyBatis的比较

Hibernate完全实现对象关系映射(ORM),MyBatis实现的是SQL Mapping

MyBatis可以进行更为细致的SQL优化,可以减少查询字段。比Hibernate容易掌握,Hibernate门槛较高。

Hibernate的DAO层开发比MyBatis简单,Mybatis需要维护SQL和结果映射。

Hibernate对对象的维护和缓存要比MyBatis好,对增删改查的对象的维护要方便。

Hibernate数据库移植性很好,MyBatis的数据库移植性不好,不同的数据库需要写不同SQL。

Hibernate有更好的二级缓存机制,可以使用第三方缓存。MyBatis本身提供的缓存机制不佳。

JVM虚拟机

GC算法有哪些

引用计数

复制

标记-清除

标记-压缩

分代(新生代、老年代、永久代)

垃圾回收器有哪些

串行回收器:新生代串行回收器、老年代串行回收器

并行回收器:新生代ParNew回收器、新生代ParallelGC回收器、老年代ParallelGC回收器

CMS回收器:(Concurrent Mark Sweep、并发标记清除)

G1回收器(1.7以后代替CMS回收器)

如何调优JVM

标准参数:

-client -server模式

-Xmn、-Xms、-Xmx

监控:jps、jstat、jinfo、jmap、jhat、jstack…

Java 中堆和栈有什么区别?

JVM 中堆和栈属于不同的内存区域,使用目的也不同。

栈常用于保存方法帧和局部变量,而对象总是在堆上分配。

栈通常都比堆小,也不会在多个线程之间共享,而堆被整个 JVM 的所有线程共享。

缓存和NoSQL

缓存命中率的计算

命中缓存次数/(命中缓存次数+未命中缓存次数) = 命中率

Memcache与Redis的区别

memcache把数据存在内存之中,断电后会挂掉;Redis部分数据持久化在硬盘上,断电不会丢失。

memcache存的是key-value对,redis支持更多的数据结构和数据类型

memcache可以使用一致性hash做分布式,redis可以做主从同步

redis单线程,只使用1个cpu

如何实现Redis的分片

使用一致性哈希对数据进行映射

实现方式:客户端分片(每个客户端对应一个分片)、代理协助分片、查询路由分片;

使用redis集群,如codis(豌豆荚,依赖zookeeper);

分布式

zookeeper的用途

zookeeper作为分布式应用协调系统,已经用到很多分布式项目中。

可以用来完成统一命名服务、状态同步服务、集群管理、分布式应用配置项等管理工作。

zookeeper的主要操作分一下几种:

创建节点

读取节点数据

更新节点数据

删除节点

监控节点变化

应用场景:

统一命名服务,使用create自动创建节点编号;

配置管理,多个节点的共享配置,当配置发生变化时,可利用zookeeper让使用这些配置的节点获得通知,进行重新加载等操作。如dubbo服务。

集群管理:集群选举主节点,资源定位。

共享锁

负载均衡

应用项目:

dubbo服务集群、redis集群、Hadoop集群等

dubbo的用途以及优点

Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。

数据结构和算法

将单项链表逆序排列

将单向链表逆序输出,方法有三种:

遍历链表,将每个节点的内容存入一个数组中,然后逆序输出数组(最简单的做法)

使用栈来逆序输出

直接将链表(指针)逆序然后输出

如果对自己未来有想法,想提升自己,你现在在JAVA这条路上挣扎,也想在IT行业拿高薪,可以参加我们免费的公开课试听学习 干货满满的,选择最适合自己的课程学习,技术大牛亲授,课程内容有:Java工程化、高性能及分布式、高性能、深入浅出。高架构。性能调优、Spring,MyBatis,Netty源码分析和大数据等多个知识点。如果你想拿高薪的,想学习的,想就业前景好的,想跟别人竞争能取得优势的,想进阿里面试但担心面试不过的,你都可以来。

群号:468947140

进群修改群备注:开发年限-地区-经验
点击链接加入群聊【Java-BATJ企业级资深架构】:https://jq.qq.com/?_wv=1027&k=52j2FVO

相关文章
|
12月前
|
缓存 Java 关系型数据库
2025 年最新华为 Java 面试题及答案,全方位打造面试宝典
Java面试高频考点与实践指南(150字摘要) 本文系统梳理了Java面试核心考点,包括Java基础(数据类型、面向对象特性、常用类使用)、并发编程(线程机制、锁原理、并发容器)、JVM(内存模型、GC算法、类加载机制)、Spring框架(IoC/AOP、Bean生命周期、事务管理)、数据库(MySQL引擎、事务隔离、索引优化)及分布式(CAP理论、ID生成、Redis缓存)。同时提供华为级实战代码,涵盖Spring Cloud Alibaba微服务、Sentinel限流、Seata分布式事务,以及完整的D
614 1
|
12月前
|
存储 安全 Java
常见 JAVA 集合面试题整理 自用版持续更新
这是一份详尽的Java集合面试题总结,涵盖ArrayList与LinkedList、HashMap与HashTable、HashSet与TreeSet的区别,以及ConcurrentHashMap的实现原理。内容从底层数据结构、性能特点到应用场景逐一剖析,并提供代码示例便于理解。此外,还介绍了如何遍历HashMap和HashTable。无论是初学者还是进阶开发者,都能从中受益。代码资源可从[链接](https://pan.quark.cn/s/14fcf913bae6)获取。
449 3
|
9月前
|
算法 Java
50道java集合面试题
50道 java 集合面试题
|
11月前
|
缓存 Java API
Java 面试实操指南与最新技术结合的实战攻略
本指南涵盖Java 17+新特性、Spring Boot 3微服务、响应式编程、容器化部署与数据缓存实操,结合代码案例解析高频面试技术点,助你掌握最新Java技术栈,提升实战能力,轻松应对Java中高级岗位面试。
661 0
|
12月前
|
存储 安全 Java
2025 最新史上最全 Java 面试题独家整理带详细答案及解析
本文从Java基础、面向对象、多线程与并发等方面详细解析常见面试题及答案,并结合实际应用帮助理解。内容涵盖基本数据类型、自动装箱拆箱、String类区别,面向对象三大特性(封装、继承、多态),线程创建与安全问题解决方法,以及集合框架如ArrayList与LinkedList的对比和HashMap工作原理。适合准备面试或深入学习Java的开发者参考。附代码获取链接:[点此下载](https://pan.quark.cn/s/14fcf913bae6)。
6228 50
|
11月前
|
Java 数据库连接 数据库
Java 相关知识点总结含基础语法进阶技巧及面试重点知识
本文全面总结了Java核心知识点,涵盖基础语法、面向对象、集合框架、并发编程、网络编程及主流框架如Spring生态、MyBatis等,结合JVM原理与性能优化技巧,并通过一个学生信息管理系统的实战案例,帮助你快速掌握Java开发技能,适合Java学习与面试准备。
470 2
Java 相关知识点总结含基础语法进阶技巧及面试重点知识
|
9月前
|
算法 Java
50道java基础面试题
50道java基础面试题
|
12月前
|
算法 架构师 Java
Java 开发岗及 java 架构师百度校招历年经典面试题汇总
以下是百度校招Java岗位面试题精选摘要(150字): Java开发岗重点关注集合类、并发和系统设计。HashMap线程安全可通过Collections.synchronizedMap()或ConcurrentHashMap实现,后者采用分段锁提升并发性能。负载均衡算法包括轮询、加权轮询和最少连接数,一致性哈希可均匀分布请求。Redis持久化有RDB(快照恢复快)和AOF(日志更安全)两种方式。架构师岗涉及JMM内存模型、happens-before原则和无锁数据结构(基于CAS)。
325 5
|
12月前
|
NoSQL Java 微服务
2025 年最新 Java 面试从基础到微服务实战指南全解析
《Java面试实战指南:高并发与微服务架构解析》 本文针对Java开发者提供2025版面试技术要点,涵盖高并发电商系统设计、微服务架构实现及性能优化方案。核心内容包括:1)基于Spring Cloud和云原生技术的系统架构设计;2)JWT认证、Seata分布式事务等核心模块代码实现;3)数据库查询优化与高并发处理方案,响应时间从500ms优化至80ms;4)微服务调用可靠性保障方案。文章通过实战案例展现Java最新技术栈(Java 17/Spring Boot 3.2)的应用.
972 9