java开发工程师-0.1篇

初级java开发工程师

由组长指导----承担组长分配的开发

能力要求

基础知识:

数据结构/计算机原理/网络

Java基础

面向对象基础知识

数据库基础知识

代码规范

常用框架(Spring+SpringMVC+MyBatis)

了解常用中间件(微服务、Redis、MQ)

开发能力

良好的编程实现

框架的使用(Spring+SpringMVC+MyBatis)

数据库的使用

工具的使用(IDE、GIT、Tomcat等)

使用常用中间件的编程(微服务、Redis、MQ)

个人发展

学习能力

团队合作能力

面试的主要问题

自我介绍--->参与的项目--->技术--->其他(团队协助,工具的使用,职业的规划)

常见面试题--计算机基础

数组与链表的区别

数组是一组具有相同数据类型的变量集合,每个元素都有一个下标,通过下标访问元素,数据的个数就是数组的长度

链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。   链表的特性是在中间任意位置插入和删除元素都非常快,不需要移动其他元素。   对于单向链表而言,链表中的每一个元素都要保存一个指向下一个元素的指针。   对于双向链表而言,链表中的每个元素既要保存指向下一个元素的指针,又要保存上一个元素的指针。   对于双向循环链表而言,链表的最后一个元素保存一个指向第一个元素的指针。

怎么解决哈希冲突

  1. 开放定址法:去寻找一个新的空闲的哈希地址
  2. 再哈希法
  3. 链地址法:将所有哈希地址相同的记录都链接在同一链接中
  4. 建立公共溢出区:将哈希表分为基本表和溢出表,将发生冲突的都放在溢出表中

排序算法有哪些

非线性时间比较类排序:

  1. 交换类排序快速排序和冒泡排序)
  2. 插入类排序(简单插入排序和希尔排序)
  3. 选择类排序(简单选择排序和堆排序)
  4. 归并排序(二路归并排序和多路归并排序)

TCP和UDP协议的区别

TCP

UDP

面向连接

无连接

可靠传输

不可靠传输

面向字节流传输

面向报文传输

描述通过浏览器访问一个页面的网络交互过程

  1. 用户输入网址(一般包含地址和请求两部分)。
  2. 浏览器通过DNS查找用户输入网址对应的服务器IP地址。如果IP存在转到3,否则转到7
  3. .尝试与服务器建立TCP连接。如果连接成功转到4,否则转到7。
  4. 将用户的请求封装入HTTP协议数据包,通过上一步建立TCP连接发送至服务器,并等待数据返回。如果有正确HTTP数据返回转到5,否则转到7。
  5. 拆解返回的HTTP数据包,获得状态码和数据净核。先判断状态码,如果是一个表示成功处理的状态码(比如200)转到6,否则(比如500)转到7。
  6. 分析数据净核,根据不同情况处理,比如说,返回的是一个html页面,则渲染这个页面(可以理解为显示出来),渲染的过程中会遇到一些数据标记,比如图片,这时候就查找本地缓存,如果缓存里有且没过期,就使用本地缓存的数据,否则就向服务器发送请求,从2开始。同时还要下载和运行js代码。
  7. 根据不同的错误情况,显示相应的错误提醒。

常见面试题--java基础

接口和抽象类有什么区别

接口

抽象类

构造方法:

没有

成员变量:

常量(默认public static final)

可变量、可常量

成员方法:

只能抽象

可抽象,可非抽象

ArrayList和LinkedList有什么区别

  1. 数据结构不同:
    1. ArrayList底层是Array(动态数组)的数据结构,LinkedList底层是Link(链表)的数据结构
  2. 效率不同
    1. 随机访问List(get和set)时,ArrayList比LinkedList效率更高,因为LinkedList是线性的数据存储方式,所以需要移动指针从前往后依次查找。
    2. 添加和删除(Add和Remove)时,LinkedList比ArrayList效率高,因为ArrayList是数组,所以进行增删时会对操作点之后的元素下标造成影响,需要进行元素移动。

HashMap、Hashtable、LinkedHashMap、TreeMap各个区别

HashMap

HashTable

LinkedHashMap

TreeMap

线程不安全

线程安全

线程不安全

线程不安全

无序

无序

有序

有序还可以对数据排序

StringBuilder和StringBuffer有什么区别

相同点:

1、都继承了AbstractStringBuilder,实现了Serializable和CharSequence

不同点:

  1. StringBuffer在Append、Delete、Replace、Length等方法都加了Synchronized关键字使得线程安全
  2. StringBuffer有一个toStringCache的char数组,用于记录最近一次toString()方法的缓存

关键字Final、Finally、Finalize有什么区别

  1. final是一个修饰关键词,可用于修饰类、方法、变量
  2. Finally在处理异常机制的提供Finally方法来执行一切操作,不管是否异常捕捉还是抛出都会执行,一般用来释放资源、关闭资源(两种极端情况不执行1、try方法块未执行2、JVM关机,列入system.exit(n)也不执行)
  3. Finalize是Object中的Protected方法,子类可以覆盖方法可以实现资源清理工作

堆和栈有什么区别

申请方式

人为申请

系统自动分配

申请大小

获得空间大

获得空间小

申请效率

申请速度慢

申请速度快

存储内容

在头部用一个字节存放堆的大小,堆中具体内容人为安排

函数调用,各个参数进栈。静态变量不进栈

底层

不连续空间

连续空间

你线程安全是怎么理解的

多个线程访问同一个对象时,如果不适用同步控制或者其他协调操作可能产生线程安全问题

一个线程占有另一个线程所需要的资源

为什么要有JVM分代模型

因为JVM中的对象生命周期不同,有的对象长期存在,有点对象朝生夕死,所以导致进行垃圾回收时存活比例不同,比例不同就需要使用不同的垃圾算法进行回收

回收区分为三块,新生代、老年代、永久代;垃圾回收针对堆内存和方法区,方法区作为永久代,而堆内存划分新生代与老年代两部分。

类加载器会把.class文件加载到方法区中(永久代),永久代存储的是字节码文件生成的类信息、静态变量、常量等等;JVM执行引擎在读取字节码跑程序的过程中,会生成一些对象,生成的对象一般都在新生代里,经过一些机制处理之后依然存活的对象会进入老年代。

JVM新生代是如何进行垃圾回收的

新生代采用了复制算法进行垃圾回收,因为存货对象少,所以复制的对象也少,效率自然也高。

JVM老年代是如何进行垃圾回收的

标记整理算法,让所有存货的对象都向一端移动,然后清理端边界以外的内存

JVM垃圾回收算法有那些

  1. 标记-清除算法
  2. 复制算法
  3. 标记-整理算法
  4. 分代收集算法

常见面试题--常用框架

为什么使用Spring框架

  1. 容器化:
    1. Spring包含并管理应用中对象的生命周期和配置
  2. 方便解耦、简化开发:
    1. 可以将所有对象创建和依赖关系维护交给Spring管理,实现松耦合。
    2. 符合高内聚,低耦合的思想,这个特性也叫IOC(控制反转)
  3. AOP编程的支持
    1. 提供面向切面编程,方便实现对程序进行权限拦截、运行监控
    2. 通过动态代理和cglib实现的,底层原理是反射
  4. 声明式事务的支持
    1. 通过AOP实现,只需在配置文件中做出相关的事务规则声明,就可应用在逻辑当中
  5. 方便程序测试
    1. 对Junit4的支持,可通过注解测试Spring程序

什么是Spring依赖注入

程序运行过程中,如果需要创建对象,无需从代码中new创建,而是依赖外部的注入

什么是SpringMVC框架的控制器

Controller提供一个访问程序的行为,通过服务接口实现,解析用户输入url并将其转换为一个视图呈现给用户的模型,一个控制层中允许用户创建多种用途的控制器

使用MyBatis的优点是什么

  1. 比JDBC减少50%的代码量
  2. 从程序中彻底分离,降低耦合度,便于代码统一和优化可重用
  3. 提供XML标签,支持动态SQL语句
  4. 提供映射标签,支持对象与数据库的ORM字段关系映射

MyBatis中#{}和${}的区别是什么

  1. #{}为参数占位符,即sql预编译${}为字符串替换
  2. 预编译可以防止sql注入,在sql中的#{}替换

常见面试题--数据库

数据库的事务有什么作用

事务是一系列对数据库的操作,是数据库应用的基本逻辑

  1. 原子性:不可分割,事务要么全部被执行,要么全部都不被执行
  2. 一致性或可串性:事务的执行使得数据库从一种正确状态转换成另一种正确状态
  3. 隔离性:在事务提交之前,不允许把该事务对数据写的任何改变提供给其他事务
  4. 持久性:事务正确提交后,其结果将永久保存在数据中,即使在事务提交后有了其他故障,事务的处理结果也会得到保存。

索引有什么作用

  1. 快速取数据
  2. 保证数据记录的唯一性
  3. 实现表与表之间的参照完整性
  4. 在使用Order by、Group by子句进行数据索引时,利用索引可以减少排序和分组的时间

缺点:

占用物理空间

对表中的数据进行增加、删除、修改的时候,索引需要动态维护,降低了数据的维护速度

索引有那些种类

  1. 普通索引:仅仅加速查询
  2. 唯一索引:加速查询+列值唯一(可null)
  3. 主键索引:加速查询+列值唯一(不可null)+表中只有一个
  4. 组合索引:多列值组成一个索引,专门用于组合搜索,其效率大于索引合并
  5. 全文索引:对文本的内容进行分词,进行搜索

Inner join 和 left join 有什么区别

内连接:

只显示两表关联条件匹配的数据

外连接:

分为主表和从表,left join为左主表右从表,right相反。主表数据会全部显示,从表数据只显示关联部分数据,误匹配数据用null补全

数据库连接池有什么作用

数据库连接池负责分配、管理、释放数据库的连接,它允许应用程序重复使用一个现有的数据库连接,而不是新建立一个;明显提高数据库操作的性能

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值