初级java开发工程师
由组长指导----承担组长分配的开发
能力要求
基础知识:
数据结构/计算机原理/网络
Java基础
面向对象基础知识
数据库基础知识
代码规范
常用框架(Spring+SpringMVC+MyBatis)
了解常用中间件(微服务、Redis、MQ)
开发能力
良好的编程实现
框架的使用(Spring+SpringMVC+MyBatis)
数据库的使用
工具的使用(IDE、GIT、Tomcat等)
使用常用中间件的编程(微服务、Redis、MQ)
个人发展
学习能力
团队合作能力
面试的主要问题
自我介绍--->参与的项目--->技术--->其他(团队协助,工具的使用,职业的规划)
常见面试题--计算机基础
数组与链表的区别
数组是一组具有相同数据类型的变量集合,每个元素都有一个下标,通过下标访问元素,数据的个数就是数组的长度
链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。 链表的特性是在中间任意位置插入和删除元素都非常快,不需要移动其他元素。 对于单向链表而言,链表中的每一个元素都要保存一个指向下一个元素的指针。 对于双向链表而言,链表中的每个元素既要保存指向下一个元素的指针,又要保存上一个元素的指针。 对于双向循环链表而言,链表的最后一个元素保存一个指向第一个元素的指针。
怎么解决哈希冲突
- 开放定址法:去寻找一个新的空闲的哈希地址
- 再哈希法
- 链地址法:将所有哈希地址相同的记录都链接在同一链接中
- 建立公共溢出区:将哈希表分为基本表和溢出表,将发生冲突的都放在溢出表中
排序算法有哪些
非线性时间比较类排序:
- 交换类排序(快速排序和冒泡排序)
- 插入类排序(简单插入排序和希尔排序)
- 选择类排序(简单选择排序和堆排序)
- 归并排序(二路归并排序和多路归并排序)
TCP和UDP协议的区别
TCP | UDP |
面向连接 | 无连接 |
可靠传输 | 不可靠传输 |
面向字节流传输 | 面向报文传输 |
描述通过浏览器访问一个页面的网络交互过程
- 用户输入网址(一般包含地址和请求两部分)。
- 浏览器通过DNS查找用户输入网址对应的服务器IP地址。如果IP存在转到3,否则转到7
- .尝试与服务器建立TCP连接。如果连接成功转到4,否则转到7。
- 将用户的请求封装入HTTP协议数据包,通过上一步建立TCP连接发送至服务器,并等待数据返回。如果有正确HTTP数据返回转到5,否则转到7。
- 拆解返回的HTTP数据包,获得状态码和数据净核。先判断状态码,如果是一个表示成功处理的状态码(比如200)转到6,否则(比如500)转到7。
- 分析数据净核,根据不同情况处理,比如说,返回的是一个html页面,则渲染这个页面(可以理解为显示出来),渲染的过程中会遇到一些数据标记,比如图片,这时候就查找本地缓存,如果缓存里有且没过期,就使用本地缓存的数据,否则就向服务器发送请求,从2开始。同时还要下载和运行js代码。
- 根据不同的错误情况,显示相应的错误提醒。
常见面试题--java基础
接口和抽象类有什么区别
接口 | 抽象类 | |
构造方法: | 没有 | 有 |
成员变量: | 常量(默认public static final) | 可变量、可常量 |
成员方法: | 只能抽象 | 可抽象,可非抽象 |
ArrayList和LinkedList有什么区别
- 数据结构不同:
- ArrayList底层是Array(动态数组)的数据结构,LinkedList底层是Link(链表)的数据结构
- 效率不同:
- 随机访问List(get和set)时,ArrayList比LinkedList效率更高,因为LinkedList是线性的数据存储方式,所以需要移动指针从前往后依次查找。
- 添加和删除(Add和Remove)时,LinkedList比ArrayList效率高,因为ArrayList是数组,所以进行增删时会对操作点之后的元素下标造成影响,需要进行元素移动。
HashMap、Hashtable、LinkedHashMap、TreeMap各个区别
HashMap | HashTable | LinkedHashMap | TreeMap |
线程不安全 | 线程安全 | 线程不安全 | 线程不安全 |
无序 | 无序 | 有序 | 有序还可以对数据排序 |
StringBuilder和StringBuffer有什么区别
相同点:
1、都继承了AbstractStringBuilder,实现了Serializable和CharSequence
不同点:
- StringBuffer在Append、Delete、Replace、Length等方法都加了Synchronized关键字使得线程安全
- StringBuffer有一个toStringCache的char数组,用于记录最近一次toString()方法的缓存
关键字Final、Finally、Finalize有什么区别
- final是一个修饰关键词,可用于修饰类、方法、变量
- Finally在处理异常机制的提供Finally方法来执行一切操作,不管是否异常捕捉还是抛出都会执行,一般用来释放资源、关闭资源(两种极端情况不执行1、try方法块未执行2、JVM关机,列入system.exit(n)也不执行)
- Finalize是Object中的Protected方法,子类可以覆盖方法可以实现资源清理工作
堆和栈有什么区别
堆 | 栈 | |
申请方式 | 人为申请 | 系统自动分配 |
申请大小 | 获得空间大 | 获得空间小 |
申请效率 | 申请速度慢 | 申请速度快 |
存储内容 | 在头部用一个字节存放堆的大小,堆中具体内容人为安排 | 函数调用,各个参数进栈。静态变量不进栈 |
底层 | 不连续空间 | 连续空间 |
你线程安全是怎么理解的
多个线程访问同一个对象时,如果不适用同步控制或者其他协调操作可能产生线程安全问题
一个线程占有另一个线程所需要的资源
为什么要有JVM分代模型
因为JVM中的对象生命周期不同,有的对象长期存在,有点对象朝生夕死,所以导致进行垃圾回收时存活比例不同,比例不同就需要使用不同的垃圾算法进行回收
回收区分为三块,新生代、老年代、永久代;垃圾回收针对堆内存和方法区,方法区作为永久代,而堆内存划分新生代与老年代两部分。
类加载器会把.class文件加载到方法区中(永久代),永久代存储的是字节码文件生成的类信息、静态变量、常量等等;JVM执行引擎在读取字节码跑程序的过程中,会生成一些对象,生成的对象一般都在新生代里,经过一些机制处理之后依然存活的对象会进入老年代。
JVM新生代是如何进行垃圾回收的
新生代采用了复制算法进行垃圾回收,因为存货对象少,所以复制的对象也少,效率自然也高。
JVM老年代是如何进行垃圾回收的
标记整理算法,让所有存货的对象都向一端移动,然后清理端边界以外的内存
JVM垃圾回收算法有那些
- 标记-清除算法
- 复制算法
- 标记-整理算法
- 分代收集算法
常见面试题--常用框架
为什么使用Spring框架
- 容器化:
- Spring包含并管理应用中对象的生命周期和配置
- 方便解耦、简化开发:
- 可以将所有对象创建和依赖关系维护交给Spring管理,实现松耦合。
- 符合高内聚,低耦合的思想,这个特性也叫IOC(控制反转)
- AOP编程的支持
- 提供面向切面编程,方便实现对程序进行权限拦截、运行监控
- 通过动态代理和cglib实现的,底层原理是反射
- 声明式事务的支持
- 通过AOP实现,只需在配置文件中做出相关的事务规则声明,就可应用在逻辑当中
- 方便程序测试
- 对Junit4的支持,可通过注解测试Spring程序
什么是Spring依赖注入
程序运行过程中,如果需要创建对象,无需从代码中new创建,而是依赖外部的注入
什么是SpringMVC框架的控制器
Controller提供一个访问程序的行为,通过服务接口实现,解析用户输入url并将其转换为一个视图呈现给用户的模型,一个控制层中允许用户创建多种用途的控制器
使用MyBatis的优点是什么
- 比JDBC减少50%的代码量
- 从程序中彻底分离,降低耦合度,便于代码统一和优化可重用
- 提供XML标签,支持动态SQL语句
- 提供映射标签,支持对象与数据库的ORM字段关系映射
MyBatis中#{}和${}的区别是什么
- #{}为参数占位符,即sql预编译;${}为字符串替换
- 预编译可以防止sql注入,在sql中的#{}替换
常见面试题--数据库
数据库的事务有什么作用
事务是一系列对数据库的操作,是数据库应用的基本逻辑
- 原子性:不可分割,事务要么全部被执行,要么全部都不被执行
- 一致性或可串性:事务的执行使得数据库从一种正确状态转换成另一种正确状态
- 隔离性:在事务提交之前,不允许把该事务对数据写的任何改变提供给其他事务
- 持久性:事务正确提交后,其结果将永久保存在数据中,即使在事务提交后有了其他故障,事务的处理结果也会得到保存。
索引有什么作用
- 快速取数据
- 保证数据记录的唯一性
- 实现表与表之间的参照完整性
- 在使用Order by、Group by子句进行数据索引时,利用索引可以减少排序和分组的时间
缺点:
占用物理空间
对表中的数据进行增加、删除、修改的时候,索引需要动态维护,降低了数据的维护速度
索引有那些种类
- 普通索引:仅仅加速查询
- 唯一索引:加速查询+列值唯一(可null)
- 主键索引:加速查询+列值唯一(不可null)+表中只有一个
- 组合索引:多列值组成一个索引,专门用于组合搜索,其效率大于索引合并
- 全文索引:对文本的内容进行分词,进行搜索
Inner join 和 left join 有什么区别
内连接:
只显示两表关联条件匹配的数据
外连接:
分为主表和从表,left join为左主表右从表,right相反。主表数据会全部显示,从表数据只显示关联部分数据,误匹配数据用null补全
数据库连接池有什么作用
数据库连接池负责分配、管理、释放数据库的连接,它允许应用程序重复使用一个现有的数据库连接,而不是新建立一个;明显提高数据库操作的性能