2019年,干货神总结,程序员面试技巧

Java相关

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

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

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

作为Java程序员还是经常和HashMap打交道的,所以HashMap的一些原理还是搞搞清除比较好。这个问题感觉主要就是问HashMap,HashTable,ConcurrentHashMap,sychronizedMap的原理和区别。

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

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

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

这个问题还算好回答,大概有四种—new、工厂模式、反射和克隆,不过这个问题有可能衍生出关于设计模式,反射,深克隆,浅克隆等一系列问题。。。要做好准备~

参考资料:

设计模式Java版

Java反射详解

深克隆与浅克隆的区别

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

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

参考资料:

Java注解

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

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

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中编码统一要如何做(重要程度:★★★☆☆)

配置一个拦截器就行了

数据库相关


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

B+树,三层,真实的数据存储在叶子节点

参考资料:

MySQL索引原理及慢查询优化

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

可以利用pt-query-digest等工具分析慢查询日志,也可以用explain查看SQL的执行计划。

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

肯定不能直接limit,offset,主要就是要想办法避免在数据量大时扫描过多的记录。

什么样的列适合加索引,如果一个列的值只有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,这种面向服务的架构。也了解到一个好的应用,除了开发本身,一些自动化发布系统和监控系统也是必不可少的。

金三银四来临,我们这里准备来一些面试题分享给再摩拳擦掌准备跳槽的程序员们,点赞关注我私信“面试资料”获取面试,高并发,分布式,Spring,MyBatis,Netty源码分析以及大数据等多个知识点资料。

原文地址:https://blog.51cto.com/14207296/2357368

时间: 2024-11-02 05:49:44

2019年,干货神总结,程序员面试技巧的相关文章

一个程序员面试的毒鸡汤

人们都说,这个世界上有两种人注定单身,一种是太优秀的,另一种是太平凡的. 我一听 呀?那我这岂不是就不优秀了吗,于是毅然决然和女朋友分了手. 人们都说,互联网寒冬来了,这个时候还在大面积招人的公司,必然是牛逼的公司.而这个时候勇敢跳槽的人,必然是牛逼的人. 于是2019年1月25日下午14:00,我开始了字节跳动的社招面试. 为了这天,我前一天排老长的队理了个利落的发型,胡子刮得一干二净.穿上崭新的新百伦999,连袜子都是崭新的NB,墨绿色工装裤配酒红色卫衣,外面再搭一件精致的黑色羽绒小坎肩,准

金九银十,浅谈关于java程序员面试的一些事项

本篇博文针对的是应届毕业生以及工作两三年左右的java程序员. 为什么要跳槽? 这是一个很广义的问题,每个人心中都有一份答案. 例如: 公司的待遇不好, 薪资涨幅不符合预期要求, 厌倦了出差的荒无天日的繁重工作, 公司的妹子太少, 领导太傲娇, 同事之间关系太逼格, 某某同学跳槽到某某公司之后涨到了多少多少钱, 某某同学的朋友的同事的三姑妈家的大儿子的好基友在某某高就, 等等辞职理由. 咱们就不多说了,还是谈谈怎么应付面试吧. 以下内容是我在面试中总结的一些经验,希望这些可以给各位带来帮助和启迪

《Java程序员面试笔试宝典》之字符串创建与存储的机制是什么

在Java语言中,字符串起着非常重要的作用,字符串的声明与初始化主要有如下两种情况:(1) 对于String s1=new String("abc")语句与String s2=new String("abc")语句,存在两个引用对象s1.s2,两个内容相同的字符串对象"abc",它们在内存中的地址是不同的.只要用到new总会生成新的对象. (2) 对于String s1 = "abc"语句与String s2 = "

程序员面试、算法研究、编程艺术、红黑树、数据挖掘5大系列集锦

程序员面试.算法研究.编程艺术.红黑树.数据挖掘5大系列集锦

《Java程序员面试宝典》学习笔记(基本语法部分)

这是我学习欧立奇<Java程序员面试宝典>第三版的笔记.这篇是基本语法部分. ClassLoader主要对类的请求提供服务,当JVM需要某类时,它根据名称向ClassLoader要求这个类,然后由ClassLoader返回这个类的class对象. 在Java中,字符只以一种形式存在,那就是Unicode.在JVM内部一切都由Unicode表示,而输出到外部后(JVM和OS的交界处就是各种输入/输出流)转换为其他形式的编码. Java用了中间缓存变量的机制,所以,j=j++可换成如下写法: te

《Java程序员面试笔试宝典》终于在万众期待中出版啦~

<Java程序员面试笔试宝典>终于在万众期待中出版啦~它是知名畅销书<程序员面试笔试宝典>的姊妹篇,而定价只要48元哦,恰逢求职季节,希望本书的出版能够让更多的求职者能够走进理想的企业 在这里,众多知名企业面试官将为你撕开神秘的求职面纱: 在这里,各种求职达人将现身说法为你揭开求职谜团: 在这里,各种类型的企业招聘细节都会被展露无疑: 在这里,我们将为你抽丝剥茧,还原IT行业的真相: 在这里,我们将为你指点迷津,告诉你职场上的风风雨雨: 在这里,我们将为你点石成金,成为那盏指引你前

程序员面试笔试宝典学习记录(三)(数据库相关知识)

关系数据库系统与文件数据库系统的区别如下: (a)关系数据库系统的主要特征是数据的结构化,而文件数据库系统是数据的非结构化. (b)关系数据库系统中,用户看到的逻辑结构是二维表,而文件数据库系统中,基本元素是文件. (c)文件数据库系统可以实现多媒体文件管理,支持C/S工作模式. acid,指数据库事务正确执行的四个基本要素的缩写.包含:原子性(atomicity),一致性(consistency),隔离性(isolation),持久性(durability). 数据查询:select sele

《程序员面试宝典》精华 编程语言部分

<程序员面试宝典>精华 编程语言部分 正所谓取其精华,去其糟粕.本文谨记录下<程序员面试宝典>一些关键的知识点.易错点,对于一些虽然重要但书中没有解释清楚的地方不做记录.当然这里的糟粕只是指不那么重要,或者比较简单,并不是说书写的不好.希望以后回顾时无需再看此书,只看保留在文中的精华即可. 文中有少许bug,亦摘录在此. 本文专注编程语言部分,包括第五章到第九章的内容 第五章 语言细节 5.1 y = z = 5,等号先计算右边,返回值是赋值后的左边的变量值 5.1 printf函

php程序员面试分享

面试总结 今天去了北京著名IT公司进行PHP程序员的面试.这是人生第一次么,怎么不紧张?我是不是有病.不是,这叫自信呵. 首先是做一些笔试题. 1.mysql数据库索引使用的数据结构?这样做的好处是? 可以参考这篇博文:http://blog.csdn.net/ant_ren/article/details/2932068 2.有两个字符串a和b,判断b字符串是否出现在a中.不考虑大小写.. 我的答案是:使用stripos()这个函数来解决的. if(stripos($a,$b)>-1) ech