Java面试总结

Java面试:假如我是面试官,我会这样虐你! 前言 我发现一个奇怪的现象:那些跳槽的人,总是从一个坑,跳进令一个坑中。毕竟过去了,会的还是原来的知识,人的身价就摆在那里,无论怎么折腾,也不会拿到更好的offer。这样的跳槽其实没有意义,也许就有人问,现在都是互联网寒冬了,要怎样才能把握好机会,拿到跟好跟适合自己的offer呢?技术才是我们程序员的立身之本,在再好的机遇面前我们也要有这个实力去抓住它。 快到年后跳槽季,假如我是面试官,我会这... 阅读详情

转自:http://www.importnew.com/21445.html


Java相关

Java GC机制(重要程度:★★★★★)

主要从三个方面回答:GC是针对什么对象进行回收(可达性分析法),什么时候开始GC(当新生代满了会进行Minor GC,升到老年代的对象大于老年代剩余空间时会进行Major GC),GC做什么(新生代采用复制算法,老年代采用标记-清除或标记-整理算法),感觉回答这些就差不多了,也可以补充一下可以调优的参数(-XX:newRatio,-Xms,-Xmx等等)。详细的可以看我另一篇博客(Java中的垃圾回收机制)。

如何线程安全的使用HashMap(重要程度:★★★★★)

作为Java程序员还是经常和HashMap打交道的,所以HashMap的一些原理还是搞搞清除比较好。这个问题感觉主要就是问HashMap,HashTable,ConcurrentHashMap,sychronizedMap的原理和区别。具体的可以看我另一篇博客(如何线程安全的使用HashMap)。

HashMap是如何解决冲突的(重要程度:★★★★☆)

其实就是链接法,将索引值相同的元素存放到一个单链表里。但为了解决在频繁冲突时HashMap性能降低的问题,Java 8中做了一个小优化,在冲突的元素个数超过设定的值(默认为8)时,会使用平衡树来替代链表存储冲突的元素。具体的可以看我另一篇博客(Java 8中HashMap和LinkedHashMap如何解决冲突)。

Java创建对象有哪几种(重要程度:★★★★☆)

这个问题还算好回答,大概有四种—new、工厂模式、反射和克隆,不过这个问题有可能衍生出关于设计模式,反射,深克隆,浅克隆等一系列问题。。。要做好准备~
参考资料:
设计模式Java版
Java反射详解
深克隆与浅克隆的区别

注解(重要程度:★★★☆☆)

如果简历中有提到过曾自定义过注解,还是了解清楚比较好。主要是了解在自定义注解时需要使用的两个主要的元注解@Retention和@Target。@Retention用来声明注解的保留策略,有CLASS,RUNTIME,SOURCE三种,分别表示注解保存在类文件,JVM运行时刻和源代码中。@Target用来声明注解可以被添加到哪些类型的元素上,如类型,方法和域等。
参考资料:
Java注解

异常(重要程度:★★★☆☆)

一道笔试题,代码如下,问返回值是什么。

1
2
3
4
5
6
7
8
9
10
11
int ret = 0 ;
try {
throw new Exception();
}
catch (Exception e){
ret = 1 ;
return ret;
}
finally {
ret = 2 ;
}

主要的考点就是catch中的return在finally之后执行 但是会将return的值放到一个地方存起来,所以finally中的ret=2会执行,但返回值是1。
参考资料:
深入理解Java异常处理机制
Java异常处理

悲观锁和乐观锁区别,乐观锁适用于什么情况(重要程度:★★★★☆)

悲观锁,就是总觉得有刁民想害朕,每次访问数据的时候都觉得会有别人修改它,所以每次拿数据时都会上锁,确保在自己使用的过程中不会被他人访问。乐观锁就是很单纯,心态好,所以每次拿数据的时候都不会上锁,只是在更新数据的时候去判断该数据是否被别人修改过。
大多数的关系数据库写入操作都是基于悲观锁,缺点在于如果持有锁的客户端运行的很慢,那么等待解锁的客户端被阻塞的时间就越长。Redis的事务是基于乐观锁的机制,不会在执行WATCH命令时对数据进行加锁,只是会在数据已经被其他客户端抢先修改了的情况下,通知执行WATCH命令的客户端。乐观锁适用于读多写少的情况,因为在写操作比较频繁的时候,会不断地retry,从而降低性能。
参考资料:
关于悲观锁和乐观锁的区别
乐观锁和悲观锁

单例模式找错误(重要程度:★★★★☆)

错误是没有将构造函数私有化,单例还是比较简单的,把它的饿汉式和懒汉式的两种实现方式看明白了就可以了。
单例模式

__

Spring相关

关于Spring的问题主要就是围绕着Ioc和AOP,它们真是Spring的核心啊。

Spring Bean的生命周期(重要程度:★★★★★)

就不写我那么low的回答了,直接看参考资料吧。
参考资料:
Spring Bean的生命周期
Top 10 Spring Interview Questions Answers J2EE

Spring中用到的设计模式(重要程度:★★★★★)

工厂模式:IOC容器
代理模式:AOP
策略模式:在spring采取动态代理时,根据代理的类有无实现接口有JDK和CGLIB两种代理方式,就是采用策略模式实现的
单例模式:默认情况下spring中的bean只存在一个实例
只知道这四个。。。。
参考资料:
Design Patterns Used in Java Spring Framework

讲一讲Spring IoC和AOP(重要程度:★★★★★)

IoC的核心是依赖反转,将创建对象和对象之间的依赖管理交给IoC容器来做,完成对象之间的解耦。
AOP主要是利用代理模式,把许多接口都要用的又和接口本身主要的业务逻辑无关的部分抽出来,写成一个切面,单独维护,比如权限验证。这样可以使接口符合“单一职责原则”,只关注主要的业务逻辑,也提高了代码的重用性。

AOP的应用场景(重要程度:★★★★☆)

权限,日志,处理异常,事务等等,个人理解就是把许多接口都要用的又和接口本身主要的业务逻辑无关的部分抽出来,写成一个切面,单独维护,比如权限验证。这样可以使接口符合“单一职责原则”,只关注主要的业务逻辑,也提高了代码的重用性。

Spring中编码统一要如何做(重要程度:★★★☆☆)

配置一个拦截器就行了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<filter> 
        <filter-name>CharacterEncodingFilter</filter-name> 
        <filter- class >org.springframework.web.filter.CharacterEncodingFilter</filter- class > 
        <init-param> 
            <param-name>encoding</param-name> 
            <param-value>UTF- 8 </param-value> 
        </init-param> 
        <init-param> 
            <param-name>forceEncoding</param-name> 
            <param-value> true </param-value> 
        </init-param> 
    </filter> 
    <filter-mapping> 
        <filter-name>CharacterEncodingFilter</filter-name> 
        <url-pattern>/*</url-pattern> 
    </filter-mapping>

数据库相关

Mysql索引的内部结构(重要程度:★★★★☆)

B+树,三层,真实的数据存储在叶子节点
参考资料:
MySQL索引原理及慢查询优化

如果一个SQL执行时间比较长怎么办(重要程度:★★★★☆)

可以利用pt-query-digest等工具分析慢查询日志,也可以用explain查看SQL的执行计划。具体可看我的另一篇博客MySQL调优

如果一张表中有上千万条数据应该怎么做分页(重要程度:★★★☆☆)

肯定不能直接limit,offset,主要就是要想办法避免在数据量大时扫描过多的记录。具体可看我的另一篇博客【译】优化MySQL中的分页

什么样的列适合加索引,如果一个列的值只有1和2,那么它适合加索引么(重要程度:★★★☆☆)

  • 在where从句,group by从句,order by从句,on从句中出现的列
  • 索引的字段越小越好
  • 在建立联合索引时,离散度大的列放大联合索引的前面

只有1和2不适合建索引

Redis相关

Redis提供哪几种数据结构(重要程度:★★★★★)

一共有5种,字符串,散列,列表,集合,有序集合。
参考资料:
Redis中文官网

Redis支持集群么,从哪个版本开始支持集群的(重要程度:★★☆☆☆)

支持集群,从3.0版本开始。当然面试时我也没记住版本。。。

Redis集群中,如何将一个对象映射到对应的缓存服务器(重要程度:★★★★☆)

一般就是hash%N,就是用对象的hash值对缓存服务器的个数取余

接上个问题,缓存集群中如果新增一台服务器,怎么才能不影响大部分缓存数据的命中?(重要程度:★★★★☆)

其实就是一致性Hash算法。以前有看过,可惜面试的时候脑袋就空了,只记得一个环,果然还是要实践啊。
参考资料:
Consistent Hashing
五分钟理解一致性哈希算法(consistent hashing)

项目中具体是怎样使用Redis的(重要程度:★★★★☆)

根据实际情况回答吧。。。。我是主要做权限控制时用到了Redis,将用户Id和权限Code拼接在一起作为一个key,放到Redis的集合中,在验证某一用户是否有指定权限时,只需验证集合中是否有用户Id和权限Code拼接的key即可

算法相关

判断一个数字是否为快乐数字(重要程度:★☆☆☆☆)

leetcode第202题
链接

给定一个乱序数组和一个目标数字 找到和为这个数字的两个数字 时间复杂度是多少(重要程度:★☆☆☆☆)

leetcode第一题
链接

如何判断一个链表有没有环(重要程度:★☆☆☆☆)

用快慢指针

删除字符串中的空格 只留一个(重要程度:★☆☆☆☆)

这个比较简单。。。。

二叉树层序遍历(重要程度:★★☆☆☆)

利用队列就可以了

地铁票价是如何计算的(重要程度:★★☆☆☆)

不知道正确答案,感觉是图的最短路径算法相关的。

Elasticsearch相关

为什么要用Elasticsearch(重要程度:★★★★☆)

其实对Es的了解还是比较少的,因为没做多久就去写坑爹代理商了。个人觉得项目中用Es的原因一是可以做分词,二是Es中采用的是倒排索引所以性能比较好,三是Es是个分布式的搜索服务,对各个节点的配置还是很简单方便的

Elasticsearch中的数据来源是什么,如何做同步(重要程度:★★★★☆)

数据是来自其他部门的数据库,会在一开始写python脚本做全量更新,之后利用RabbitMQ做增量更新,就是数据更改之后,数据提供方将更改的数据插入到指定消息队列,由对应的消费者索引到Es中

接上个问题,利用消息队列是会对对方代码造成侵入的,还有没有别的方式(重要程度:★★★☆☆)

还可以读MySQL的binlog

发散思维的题

以下题都是没有正确答案的,不知道是想考思维,还是压力面试,就只写题目,不写回答了。。。

画一下心中房树人的关系(重要程度:★☆☆☆☆)
给你一块地建房如何规划(重要程度:★☆☆☆☆)
估计二号线有几辆车在运行(重要程度:★☆☆☆☆)

其他

Thrift通信协议(重要程度:★★★☆☆)

这个问题被问了两遍,然而现在还是不知道。。。什么东西都不能停留在只会用的阶段啊~

git相关(重要程度:★★★★★)

一些git相关的问题,比如如何做分支管理(git flow),rebase和merge的区别(merge操作会生成一个新的节点)等等。。。

如何学习一门新技术(重要程度:★★★☆☆)

google+官网+stackoverflow+github

比较爱逛的网站和爱看的书(重要程度:★★★☆☆)

根据实际情况回答吧。。。

了不了解微服务(重要程度:★★☆☆☆)

简单了解过。。。
参考资料:
基于微服务的软件架构模式

针对简历中的项目问一些问题(重要程度:★★★★★)

就是根据简历上的项目问一些东西,比如权限控制是怎么做的,有没有碰到过比较难解决的问题之类的,不具体列举了,只要简历上的内容是真实的基本都没啥问题

为什么要离职(重要程度:★★★★★)

被问了n遍,挺不好回答的一个问题,毕竟不算实习期工作还没满一年,这个时候跳槽很容易让人觉得不安稳。。。。

对公司还有什么问题(重要程度:★★★★★)

基本每轮面试结束都会问的一个问题,一开始也没当回事,直到有家公司居然挂在四面的这个问题上,我也是蛮醉的,果然言多必失啊。。。

在***公司最大的收获是什么(重要程度:★★★★★)

对于我来说,觉得最大的收获就是对企业级的应用有了一个大致的了解,企业里的项目不像学校的课程作业,只要jdbc连接数据库完成功能就可以了,企业的项目要考虑很多东西,比如说为了提高可用性,要部署在多台服务器上,用nginx做负载均衡,还有就是用缓存,异步之类来提高接口性能。然后,也是第一次接触到SOA,这种面向服务的架构。也了解到一个好的应用,除了开发本身,一些自动化发布系统和监控系统也是必不可少的。当然,还认识了一群三观合的小伙伴~~~

最新Java面试题汇总,看完这些面试文章足够了 十月底十一月将至,2020年已然接近尾声,回顾这一年,经历了太多太多,在这过程中,有点人成功,也有些人频频失败。下面是我对这一年来的面试总结。大家觉得文章不错的,可以点点关注。如果想跟作者交流面试经验以及探讨技术问题,大家也可以扫描尾部二维码添加,暗号【优快云】。 2020年Java最新面试题汇总,希望这些文字对于面试的你们有帮助。 基础面试题 Java面试题-基础篇一 Java面试题-基础篇二 Java面试题-集合框架篇三 Java基础面试题(4) Java基础面试题(5) Java.. 阅读详情

相关推荐

面试技巧

NULL 博文链接:https://itjiehun.iteye.com/blog/1119121

面试总结

原文链接:http://www.importnew.com/21445.html 原文出处: Giraffe Java相关 Java GC机制(重要程度:★★★★★) 主要从三个方面回答:GC是针对什么对象进行回收(可达性分析法),什么时候开始GC(当新生代满了会进行Minor GC,升到老年代的对象大于老年代剩余空间时会进行Major GC),GC做什么(新生代采

enpain的专栏 639

WPF数据可视化:LiveCharts自定义X轴与Y轴的5个实战技巧(附完整代码)

本文详细介绍了在WPF应用中使用LiveCharts进行数据可视化时,自定义X轴与Y轴的5个核心实战技巧。内容涵盖精确控制刻度步距、深度定制视觉样式、实现多轴布局对比、优化显示空间以及构建响应式动态轴,并提供了完整的C#和XAML代码示例,帮助开发者创建专业且用户体验出色的图表。

moss5的博客 690

如何对只有两个值的列进行索引

      一个数据量较大的表,其中有一个列(status),表示数据所处的状态(N),随着业务的变化,该状态会改变(Y)。在业务中,经常需要对Status=N进行统计,该如何为这列建立索引?      第一印象,“哦,使用位图索引”。位图索引对低基数的列有用,该列只有N、Y两个列。但是这列需要大量的单行更新,从N到Y,位图索引不能应用于经常修改的列,这就排除了位图索引。      有的直

newzqs的专栏 3330

告别手动处理:用 Bruker NSMatlabUtilities 工具箱批量分析 AFM 力曲线数据的实战案例

本文介绍了如何使用 Bruker NSMatlabUtilities 工具箱实现 AFM 力曲线数据的批量分析,解决传统手动处理耗时且易出错的问题。通过实战案例展示工具箱的核心功能,包括数据读取、力曲线分析和可视化,帮助科研人员提升数据处理效率和准确性。

weixin_28362173的博客 213

ETL基础概念及要求详解

ETL即Extract(抽取)Transform(转换)Load(装载)的过程,如下图,同时也包括数据清洗的部分,是数据从源端到目标端的一个数据处理的过程,是构建数据仓库的重要一环,但不局限于构建数据仓库其他BI(商业智能)的设计和开发数据分析平台也经常用到ETL。

qq_43605229的博客 8943

mysql索引建立规则

索引设计原则 1、代码先行,索引后上 不知大家一般是怎么给数据表建立索引的,是建完表马上就建立索引吗? 这其实是不对的,一般应该等到主体业务功能开发完毕,把涉及到该表相关sql都要拿出来分析之后再建立索引。 2、联合索引尽量覆盖条件 比如可以设计一个或者两三个联合索引(尽量少建单值索引),让每一个联合索引都尽量去包含sql语句里的where、order by、group by的字段,还要确保这些联合索引的字段顺序尽量满足sql查询的最左前缀原则。 3、不要在小基数字段上建立索引 索引基数是指这

做你的时光机的博客 1707

免费,Python蓝桥杯等级考试真题--第10级(含答案解析和代码)

Python中蓝桥杯算是含金量和难度最大的比赛之一,网上可以找到不少真题,不过要么零零散散要么付费才能解锁,而且大都是没答案和解析的,给学习者造成很大困扰。因此本文档打算整理历年等级考试、STEMA、省赛、国赛真题卷和解析,供大家学习参考。

1576

找实习期间整理一份Java面试题,持续更新......

1. 面向对象编程的三大特性是什么,请简要阐述。(1)继承。Java中允许并鼓励类的重用,所以提供了一种明确表示共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继 承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增 加新的方法使之更适合特殊的需要。 (2)封装。封装是把过程和数据

虾哔哔的博客 2518

Qt自带绘图与GDI+绘图方式比较_gdi+实时绘制qt(2)

2、GDI+是Windows操作系统中的图形设备接口,它提供了一套用于绘制图形的API,包括了图形渲染、图形变换、图形剪切、图形填充等功能,使开发者可以快速地开发出各种类型的图形应用程序。1、Qt是一个跨平台的C++应用程序框架,它提供了一套用于GUI编程的类库,包括了绘图、网络、XML、数据库、多线程等模块,使开发者可以快速地开发出高质量的跨平台应用程序。Qt提供了一套用于绘图的类库,包括了QPainter、QPen、QBrush等类,使开发者可以快速地进行图形绘制。

qq_17136213的博客 915

YOLO11改进-注意力-引入Deformable Large Kernel Attention (DLKA) 解决多尺度、小目标、遮挡等问题

Deformable Large Kernel Attention (DLKA) 是一种用于视觉任务的注意力机制,旨在提升模型在处理不同尺寸和形状对象时的灵活性和性能。DLKA 的设计灵感源自传统的注意力机制,但通过引入可变形核(deformable kernel)来增强对局部特征的适应能力。

qq_64693987的博客 4042

最全java面试题及答案(208道)

最全java面试题及答案(208道)

有人和我一样懒 676

OCR文字识别领域经典论文总结

本篇将介绍文字识别经典论文,内容包括文字检测、文字识别、端到端识别等方法,具体将分别对论文算法简介、思路、代码等几个部分展开介绍。目前各部分只举例经典论文,算法没有全部写完,后续会将在此部分基础上更新更多论文综述及代码实战部分。.................................

专注大数据与人工智能技术分享,欢迎私信加群互相学习! 1万+

Java面试中Java基础面试题

java基础面试题 java一些基础面试题,对刚刚步入社会的2019届毕业生有帮助,自己总结的,很基础。

唐_方的博客 9604

基于STM32设计的智能家居控制系统(华为云)_363

本项目设计并实现了一种基于STM32的智能家居控制系统,融合了语音识别、远程控制、环境监测与安全报警等功能。系统以STM32F103C8T6单片机为核心控制器,集成ESP8266 Wi-Fi模块实现与华为云IOT物联网平台的数据交互,采用MQTT协议进行通信。用户可通过语音识别模块控制风扇、空调、窗帘、卧室灯、客厅灯和电视等家电的开关操作,同时也可通过Android手机APP或Windows电脑上位机进行远程控制。系统还具备温湿度、光照强度、烟雾浓度和火焰检测功能,当检测到异常情况时,自动触发蜂鸣器报警并向

880

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

10年Java面试总结:Java程序员面试必备的面试技巧

作为一名Java程序员,面试是你职业生涯中不可或缺的一部分。一个成功的面试不仅能展现你的技术能力,更能展示你的思维过程、问题解决能力和与人合作的态度。通过这些18个技巧的运用,你可以在面试中更好地展示自己,从而获得心仪的工作机会。记住,持续学习和不断实践是提升自己的关键。祝你面试成功!本文已收录于,我的技术网站ddkk.com,有大厂完整面经,工作技术,架构师成长之路,等经验分享。

架构师专栏 2396

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

【面试】——Java面试题内容总结

往期内容聚合 设计模式内容聚合 面试技术文 Java岗 面试考点精讲(基础篇01期) Java岗 面试考点精讲(基础篇02期) Java岗 面试考点精讲(网络篇03期) Java 面试中遇到的坑 Java面试中遇到的坑【填坑篇】 Java面试中遇到的坑【篇二】 java面试遇到的坑[第三期] java面试填坑解惑篇[三] java面试遇到的坑[第四期] 面试官:你分析...

我爱吃土豆 5920

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

java面试集锦,java面试大全

Java面试题(01) Java面试题(02) 他在说接口与抽象类中的区别的时候有个点说错了: 接口中也可以定义静态方法的,只是在实现这个接口的时候接口中的静态方法可以不用被重写。 Java面试题(03) Java面试题(04) Java面试题(05) Java面试题(06) Java面试题(07) Java面试题(08) Java面试题(09) Java面试题(10) Ja...

zhankuangqu4845的博客 2294

如何准备Java面试?

准备Java面试需要全面而细致的准备,从基础知识到项目经验,再到行为面试问题,每一个环节都不可忽视。

破损的天堂鸟博客 2659

java面试官如何面试别人

  java面试官如何面试别人(一)   java面试官的“面试心得”   在公司当技术面试官几年间,从应届生到工作十几年的应聘者都遇到过。先表达一下我自己对面试的观点:   1.笔试、面试去评价一个人肯定是不够准确的,...

afea39660的博客 623

java面试

学会总结自己的面试经验,每当面试完成,第一时间去寻找面试官问题的答案,总结背下来。

weixin_64446270的博客 1232

java面试宝典2019

java面试宝典2019 1、 meta标签的作用是什么 2、 ReenTrantLock可重入锁(和synchronized的区别)总结 3、 Spring中的自动装配有哪些限制? 4、 什么是可变参数? 5、 什么是领域模型(domain model)?贫血模型(anaemic domain model)和充血模型(rich domain model)有什么区别? 6、 说说http,http...

聚娃科技开发者博客 5467

java面试 自我介绍_java面试自我介绍

java程序员面试自我介绍:我叫XXX,今年21岁,毕业于XX解放军信息工程大学计算机科学与技术专业,拥有扎实的Core Java基础,良好的编程风格;熟悉JSP+Servlet+JavaBean模式的WEB开发;熟悉Struts,Hibernate,Spring等开源框架,了解EJB; 熟悉Tom...面试自我介绍是Java程序员求职者面试前必练的内容,也是Java程序员求职面试中的重要一环。本...

weixin_35988311的博客 7797
上一篇: Java关键字final、static使用总结
下一篇: Java高级工程师面试总结
andybbc
博客等级 码龄11年 64粉丝 93原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值