java开发工程师面试题有哪些?java开发工程师面试题

面试java开发工程师,首先就要过面试官考核这一关,考核不过,是不能胜任java开发工程师的,所以为了能够顺利面试,我们可以在面试之前刷一些相关面试题,那java开发工程师面试题有哪些?下面来我们就来给大家讲解一下。

1.讲一下JAVA中的集合

java中的集合分为value(Collection),和key-value(Map)两种;

存储value的有list和set两种:

list是有序的,可重复的

set是无序的,不可重复的

存储为key-value是map:HashMap,Hashtable,CurrentHashMap

2. 线程并发库和线程池的作用是什么?

简单了解过,JDK5中增加了并发库,java.util.concurrent中提供了对线程优化.管理的各项操作,该包提供了线程的运行,线程池的创建,线程生命周期的控制.

线程池:java.util.concurrent.Executors创建四种线程池;

newCachedThreadPool 创建非固定数量,可缓存的线程池,若线程池超过处理需要,可灵活回收空线程,若没有线程可回收,则建新线程;

newFixedThreadPool固定线程池,底层是无界队列,可控制最大并发数,超出的线程会在队列中等待;

newScheduledThreadPool定时执行线程池,支持定时及周期性任务执行;newSingleThreadExecutor单线程化的线程池,只会用唯一的工作线程来执行任务,保证所有任务按照顺序执行;

3.Statement与PreparedStatement的区别,什么是SQL注入,如何防止SQL注入?

使用PreparedStatement可以提升代码的可读性和可维护性,可以尽最大可能提高性能。因为Statement每次执行一个SQL命令都会对其编译,但PreparedStatement则只编译一次。PreparedStatement就类似于流水线生产。另一方面PreparedStatement可以极大提高安全性:它对传递过来的参数进行了强制参数类型转换,确保插入或查询数据时,与底层数据库格式匹配。

SQL注入:就是通过将sql命令插入到web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意SQL命令。如sql命令:select id from test where name='1' or 1=1; drop table test,但用PreparedStatement就可以避免这种问题。

4.DB中索引原理,种类,使用索引的好处和问题是什么?

原理:因为检索磁盘比对数据,需要大量的时间和IO,所以就需要构造某列的数据的btree、hash值、位图索引。一般的索引能快速的查找比对,而索引的值记录了磁盘的位置,直接读取数据库字段对应位置的内容。

索引好处:加快数据检索速度、加速表与表之间的连接特别是实现数据的参考完整性方面有特别的意义、减少查询中分组和排序的时间,使用优化隐藏器,提高系统性能。

缺点:创建和维护索引需要时间,索引需要占用物理空间,当对表中的数据惊醒增删改时所有也需要动态维护。

5.volatile 能使得一个非原子操作变成原子操作吗?

一个典型的例子是在类中有一个 long 类型的成员变量。如果你知道该成员变量会被多个线程访问,如计数器、价格等,你最好是将其设置为 volatile。为什么?因为 Java 中读取 long 类型变量不是原子的,需要分成两步,如果一个线程正在修改该 long 变量的值,另一个线程可能只能看到该值的一半(前 32 位)。但是对一个 volatile 型的 long 或 double 变量的读写是原子。

6.10 个线程和 2 个线程的同步代码,哪个更容易写?

从写代码的角度来说,两者的复杂度是相同的,因为同步代码与线程数量是相互独立的。但是同步策略的选择依赖于线程的数量,因为越多的线程意味着更大的竞争,所以你需要利用同步技术,如锁分离,这要求更复杂的代码和专业知识。

我们要想顺利通过java工程师面试,一定要掌握相关知识,并且提高自己技能以及项目经验,才能在工作中独立完成项目!最后大家如果想要了解更多Java面试题知识,敬请关注奇Q工具网。

推荐阅读:

git客户端如何设置用户名密码?git合并冲突怎么办?

java系统初步架构需要什么?java 做系统架构的原则

怎么用eclipse编写java程序?Eclipse插件怎么安装?