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

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 面试总结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

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
25天前
|
Java 程序员
java线程池讲解面试
java线程池讲解面试
43 1
|
3天前
|
XML 缓存 Java
Java大厂面试题
Java大厂面试题
14 0
|
3天前
|
存储 安全 Java
Java大厂面试题
Java大厂面试题
10 0
|
3天前
|
存储 安全 Java
Java大厂面试题
Java大厂面试题
12 0
|
4天前
|
安全 Java
就只说 3 个 Java 面试题 —— 02
就只说 3 个 Java 面试题 —— 02
17 0
|
4天前
|
存储 安全 Java
就只说 3 个 Java 面试题
就只说 3 个 Java 面试题
10 0
|
14天前
|
安全 应用服务中间件 网络安全
渗透测试工程师面试题大全
渗透测试工程师面试题大全
|
14天前
|
Java 关系型数据库 MySQL
大厂面试题详解:Java抽象类与接口的概念及区别
字节跳动大厂面试题详解:Java抽象类与接口的概念及区别
39 0
|
23天前
|
存储 缓存 算法
Java入门高频考查基础知识4(字节跳动面试题18题2.5万字参考答案)
最重要的是保持自信和冷静。提前准备,并对自己的知识和经验有自信,这样您就能在面试中展现出最佳的表现。祝您面试顺利!Java 是一种广泛使用的面向对象编程语言,在软件开发领域有着重要的地位。Java 提供了丰富的库和强大的特性,适用于多种应用场景,包括企业应用、移动应用、嵌入式系统等。下是几个面试技巧:复习核心概念、熟悉常见问题、编码实践、项目经验准备、注意优缺点、积极参与互动、准备好问题问对方和知其所以然等,多准备最好轻松能举一反三。
48 0
Java入门高频考查基础知识4(字节跳动面试题18题2.5万字参考答案)
|
27天前
|
敏捷开发 安全 API
C/C++ 工程师面试:如何精彩展示你的项目经验并获得高分
C/C++ 工程师面试:如何精彩展示你的项目经验并获得高分
71 0