1.连接数据库的配置和操作
加载JDBC驱动程序
提供JDBC连接的URL
创建数据库的连接
需要向java.sql.DriverManager请求并获得Connection对象
创建一个Statement对象
执行SQL语句
关闭JDBC对象

2.创建对象的四种方式?
1.使用new关键字创建对象
2.通过反射的方式
3.通过clone的方式
j4.通过反序列化的方式

3.接口与抽象类的区别?
一个类只能继承一个抽象类,但可以实现多个接口
抽象类可以有构造器,但接口不能有构造器
抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的
抽象类中的抽象方法的访问类型可以是public,protected和默认类型,但接口中的抽象方法只能是public类型的
抽象类中的变量的访问类型可以任意,但接口中定义的变量只能是public static final类型

4.==与equals的区别?
基本数据类型:比较的值是否相等;
引用数据类型:如String,==比较的是引用是否指向同一块内存;euqals被重写了,比较的是引用指向内存中的值是否相等

5.String、StringBuffer和StringBuilder的区别?
String 大小固定,不可变
StringBuffer 大小可变,线程安全(有锁),同步,效率低,适用于多线程,低并发
StringBuilder 大小可变,线程不安全(无锁),不同步,效率高,适用于单线程,高并发

6.List问题汇总
ArrayList 底层数组,在查找元素的时候效率高(每个元素都有对应的索引),线程非安全,不同步
LinkedList 基于双向链表,在插入和删除元素的时候效率高(链表不需要内存移位)线程非安全,不同步
Vector 线程安全,同步,操作与ArrayList类似

7.HashMap和HashTable的区别?
(1)hashMap同步,hashTable不同步,都非安全
(2)hashTable的key和value都不允许null,hashMap允许
(3)HashTable使用Enumeration进行遍历,HashMap使用Iterator进行遍历
(4)HashTable直接使用对象的hashCode,hashmap重新计算hash值

8.介绍泛型
泛型:数据类型参数化
泛型类:类名{}
泛型接口:接口名{}
泛型方法:访问修饰符 返回值类型 方法名称(){}

<?>不确定的数据类型,是实参

受限泛型<? extends E>,只能填写E或者E的子类,确定上限
<? super E>,只能填写E或者E的父类,确定下限
泛型擦拭:.java–>.class,泛型会被消除掉,这个过程叫做泛型擦拭。(JVM不认识泛型)
泛型的作用:1.提高java程序的类型安全 2.消除强制类型转换 3.提高了代码的复用性

9.Throw和Throws的区别?
Throw 用来抛出一个具体的异常类型。
Throws 用来声明一个方法可能产生的所有异常,不做任何处理而是将异常往上传,谁调用就抛给谁。

10.进程和线程的区别?
进程是系统进行资源分配和调度的最小单位
线程是CPU调度和分派的基本单位
一个进程包含一个或多个线程
进程在执行过程中拥有独立的内存单元,而多个线程共享内存
线程执行开销小,但不利于资源的管理和保护;进程则相反
线程有6种状态:新建,运行(可运行),阻塞,等待,计时等待和终止。

11.创建线程的四种方式?
继承Thread类,重写run方法
实现Runnable接口
实现Callable接口

12.Callable和Runnable的区别:
Runnable接口不会返回结果和抛出异常,Callable接口可以返回结果和抛出异常。
通过线程池来创建线程

13.sleep和wait的区别?
sleep()方法是Thread类的静态方法,而wait()方法是object类的方法
调用sleep()方法并不会释放锁。而wait()方法会
wait()方法必须放在同步方法和同步块中使用,sleep()方法则可以放在任何地方使用。
sleep()方法必须捕获异常,而wait()不需要捕获异常

14.synchronized 底层实现原理?
方法和代码块被synchronized修饰后,同一时刻只有一个方法可以进入到临界区
synchronized会阻止其它线程获取当前对象的监控锁,这样synchronized修饰的代码块就无法被其它线程访问,也就无法并发执行
synchronized还会保证所有操作结果都会直接刷到主存中,从而保证了内存可见性

15.volatile底层实现原理?
volatile只能修饰变量,不能修饰方法和代码块
volatile保证可见性
使用volatile之后,变量在被修改后可以立即同步到主内存,变量每次在使用之前都从主内存拷贝。所以其他线程可以立马看到变量的更新

volatile保证有序性。volatile可以禁止指令重排,CPU会严格按照代码顺序执行。
volatile不能保证原子性

原子性是指一个操作是不可中断的,要全部执行完成,要不就都不执行
CPU有时间片的概念,当一个线程时间片耗尽之后,就会失去CPU使用权。所以在多线程场景下,由于时间片在线程间轮换,就会发生原子性问题。

16.线性安全的
Vector:只要是关键性的操作,方法前面都加了synchronized关键字,来保证线程的安全性
Hashtable:使用了synchronized关键字,所以相较于Hashmap是线程安全的。
ConcurrentHashMap:使用锁分段技术确保线性安全,是一种高效但是线程安全的集合。
Stack:栈,也是线程安全的,继承于Vector。

17.线性不安全的
Hashmap
Arraylist
LinkedList
HashSet
TreeSet
TreeMap

18.Synchronized和Lock的区别?
Synchronized是关键字,Lock是接口。
Synchronized会自动释放锁。Lock异常时不会自动释放锁,所以需要在finally中释放锁。
Synchronized是非中断锁,必须等待线程执行完成释放锁,Lock是可中断锁。
Synchronized在竞争不激烈的情况下性能更好。Lock功能更强大灵活,竞争激烈时性能较好

19.实现线程同步的方式?
1.使用Synchronized关键字修饰的同步方法方法或同步代码块实现线程同步
2.使用volitile关键字修饰的特殊域变量实现线程同步
3.使用重入锁实现线程同步
4.使用局部变量实现线程同步

20.Sql优化
查询使用适当的索引
避免空判断语句
避免左侧模糊查询
避免使用in 用exists代替
避免使用or 和 不等于条件查询
避免在 where 子句中对字段进行表达式操作和函数操作
尽可能的使用 varchar 代替 char
避免使用"*"返回所有,可以用具体的字段代替
上述会导致数据库引擎放弃索引进行全表扫描

21.什么是索引及其类型与种类?
索引是表的目录,是数据库中专门用于帮助用户快速查询数据的一种数据结构(就像新华字典的目录一样)
类型:BTREE、RTREE、HASH、FULLTEXT
种类:普通索引、唯一索引、主键索引、全文索引、组合索引
哪些情况适合使用索引?
数据量较大的表、
经常查询的字段、
主键和做外键的字段、
经常与其他表连接的表中连接字段、
经常做排序的字段、
经常用在where子句、order by、group by的字段

22.哪些情况不适合使用索引?
查询很少使用的情况不适合建立索引;
经常增、删、改的字段不适合建立索引;
当数据过少的时候不适合建立索引;
定义为text, image和bit数据类型的列不适合建立索引

23.聚集索引和非聚集索引的区别?
聚集索引一个表只能有一个,而非聚集索引一个表可以存在多个
聚集索引存储记录是物理上连续存在,而非聚集索引是逻辑上的连续
聚集索引物理存储按照索引排序,而非聚集索引物理存储不按照索引排序

24.什么是事务及其属性?
事务包含一个或多个操作,这些操作如果都成功就全部提交;如果有一条失败,则全部回滚
事务的属性:
原子性:事务开始后的所有操作要么全部执行,要么全部回滚
一致性:事务开始前和结束后,数据库的完整性没有被破坏,数据处于一致状态
隔离性:并发的不同事务之间不能互相干扰
隔离级别:读未提交、读已提交、可重复读、串行化
持久性:事务提交后,对数据库的改变是永久的

25.事务的并发问题?
脏读:事务A读取了事务B更新的数据,然后B回滚操作,那么A读取到的数据是脏数据
不可重复读 :事务 A 多次读取同一数据,事务 B 在事务A多次读取的过程中,对数据作了更新并提交,导致事务A多次读取同一数据时,结果不一致
幻读 :事务A将数据库分数改为等级,事务B在此期间插入一条分数数据,插入的这条数据没有改过来
乐观锁和悲观锁
悲观锁:在操作数据之前把数据锁住,然后再对数据读写,在释放锁之前其他不能对该数据进行操作
乐观锁:在操作数据时不会对操作的数据进行加锁,只有到数据提交的时候才通过一种机制来验证数据是否存在冲突(一般实现方式是通过加版本号然后进行版本号的对比方式实现)

26.TCP和UDP的区别?
TCP是基于连接的可靠的传输协议,UDP是基于广播的不可靠的传输协议.
TCP保证数据的正确性,同时保证数据的顺序,UDP有可能丢包,同时不保证数据的顺序
TCP是面向字节流的,他把数据看成一串无结构的二进制数据,UDP是通过报文传递数据的
TCP是点对点连接的,只能是一对一的,UDP可以是一对一的,一对多的,多对一的,多对多的

27.GET提交和POST提交的区别?
GET将表单数据追加在提交地址的后面进行提交,提交速度快,提交的数据有大小的限制
POST将表单数据作为一个整体的数据块进行提交,提交速度慢,提交的数据大小没有限制

28.重定向和转发的区别?
重定向:重新发起一次新的请求/响应来完成页面的跳转,不能带数据,浏览器的URL会发生变化
转发:使用现有的请求/响应来完成页面的跳转,可以带数据,浏览器的URL不会发生变化
常用的选择器
id选择器、元素选择器、类选择器、后代选择器、子元素选择器、兄弟选择器

29.常见错误代码及含义?
400 错误请求
403 禁止访问
404 无法找到文件
408 请求超时
500 服务器错误

30.JSP九大内置对象、七大动作与三大指令?
内置对象:request、response、session、application、out、page、pageContext、config和exception
动作:jsp:include、jsp:useBean 、jsp:setProperty、jsp:getProperty、jsp:forward、jsp:plugin、jsp:param
指令:Page指令、include指令、taglib指令
排序算法

n:数据规模;k:"桶"的个数;In-place:占用常数内存,不占用额外内存;Out-place:占用额外内存;
1.冒泡排序

2.选择排序

3.插入排序

4.希尔排序
5.归并排序
6.快速排序

7.堆排序
8.计数排序
9.桶排序
10.基数排序
JVM GC回收机制

HashMap的底层及扩容机制?
31.Spring
介绍及优点:
Spring一个轻量级的Java 开发框架,Spring的核心是控制反转(IoC)和面向切面(AOP)

1.方便解耦,简化开发 (高内聚低耦合)
Spring就是一个大工厂(容器),可以将所有对象的创建和依赖关系,交给Spring容器管理
2.支持AOP
Spring提供面向切面编程,可以方便的实现对程序进行权限拦截、运行监控等功能
3.方便集成各种优秀框架
Spring不排斥各种优秀的开源框架

32.IOC:
Spring作为容器,负责生成bean的实例和对bean的依赖注入
三种注入方法:
构造方法注入、setter方法注入、注解注入

33.AOP:
Aop是面向切面编程,是通过动态代理的方式,
在不改变原有代码的情况下对类的功能进行无限的增强
主要的功能有:添加日志,事务,权限
特点是:降低模块间的耦合度、提高可维护性

34.SpringMVC
介绍springMVC,说一下优点
springmvc是一个基于MVC的轻量级Web框架,能够完成前后台的交互
Model 业务层 = Service层 + Dao层
View 显示层 表现层 前台的页面表现(jsp页面)
Controller层 控制层 前台页面与后台代码之间的数据的交互(Servlet)

优点:耦合性低、与Spring框架集成、简化JSP开发、支持Restful风格

35.MyBatis
介绍MyBatis
ORM框架 DAO层
对象关系映射框架,以面对对象的方式完成对数据库的操作
类 --> 表
属性 --> 字段
实例 --> 记录
MyBatis中#和KaTeX parse error: Expected 'EOF', got '#' at position 5: 区别? #̲{}是预编译处理,防止SQL注…{}是字符串替换。

36.注解
注解是说明程序的,给计算机看的。JDk 1.5之后的新特性,可以声明在包、类、字段、方法、局部变量、方法参数等前面,用来对这些元素进行说明、注释

作用:安全性考虑 减少内存泄露 减少程序员工作量。

java开发面试题(40个常问面试题含答案,亲测有效)相关推荐

  1. 面试中C语言常问问题(含答案)

    1. 什么是 C 语言?它与其他编程语言的异同点是什么? C 语言是一种通用的.高级的编程语言,它可以在不同的平台上编写可重用的代码.相比于其他编程语言,C 语言拥有更高的执行效率和更好的内存控制能力 ...

  2. 2020年Java常问面试题--聂

    2020年Java常问面试题 打算这几天每天更新15~20题.(这样有助于你们阅读和理解!)我们先从简单的开始 加qq群:568680919,免费赠送1000道java面试题和简历模板 JDK 和 J ...

  3. Java常问面试题整理,帮你搞定‘金9银10’(附答案纯干货)

    前言: 工作做螺丝钉,面试造火箭,我想这个是每个程序员比较头疼的事情,但是又有必须经历的流程,尤其是摸不清面试官问的问题,准备不充分,导致面试的时候不知道如何回答.本文是小编个人从几十次面试中挑选的面 ...

  4. 思科java开发面试题

    思科java开发面试题 1.mybatis怎么用的 2.MySQL怎么用的 3.git怎么用的 4.hashmap和hashtable 5.建立多线程 6.设计模式 7.程序的优化 8.程序的安全

  5. 面试java回答优缺点_阿里Java开发面经分享,面试题(附回答)

    下面要给大家分享一个阿里Java开发面经,里面包含了具体的问题,以及相关回答,主要包括了数据库.操作系统.项目相关.java基础.数据结构.计算机网络等内容. 一.数据库 1.为什么在项目中用Mong ...

  6. 2022最新Spring相关大厂常问技术面试题大全 —— 金三银四好时机

    Spring相关大厂常问面试题 1. 什么是 Spring 框架? 2. 列举一些重要的Spring模块? 3. @RestController 与 @Controller 的区别 4. 谈谈自己对于 ...

  7. 京东java开发面经_面经|京东技术中台Java开发面经

    原标题:面经|京东技术中台Java开发面经 作者:牛肉干o 来源:牛客网 京东技术中台Java开发 title: 京东技术中台秋招面试 希望自己别再干蠢事了 把昨天上午的快手面试给忘了,一觉睡过去了. ...

  8. android常问面试题及答案 经典

    android常问面试题及答案 经典 转载 1. 什么是Activity? 四大组件之一,一般的,一个用户交互界面对应一个activity, activity 是Context的子类,同时实现了win ...

  9. VUE前端常问面试题

    文章目录 一.VUE前端常问面试题 二.文档下载地址 一.VUE前端常问面试题 1.MVC和MVVM 区别 MVC:MVC全名是 Model View Controller,即模型-视图-控制器的缩写 ...

最新文章

  1. 单源最短路——dijkstra算法
  2. 元宇宙大比拼:苹果Apple, Facebook,微软,英伟达,iwemeta
  3. libgdx学习记录27——线段与线段相交检测
  4. inspect python_python之inspect模块
  5. Badboy自动化测试工具11 导出脚本用于Jmeter并发测试
  6. php 调用带返回多个结果集的方法,PHP中有多个结果集?
  7. 挖掘建模-分类与预测-回归分析-逻辑回归
  8. 实战必备!文本分类中的一些经验和 tricks
  9. 【CNN】94页论文综述卷积神经网络:从基础技术到研究前景
  10. c语言基础知识点字母和含义,大学c语言必背基础知识_c语言基础知识大全
  11. MySQL用什么输入法_最好用的输入法是什么?
  12. java生成pdf带图片_(例)Java生成PDF图片 iText
  13. 分而治之,大型文件分片上传
  14. 域用户创建和计算机加入域
  15. 基于GARCH模型的股市研究与危机预警——R语言实现
  16. Windows服务器忘记密码后找回方法
  17. 【3】IMU模块:PA-IMU-460 ROS驱动 + 与GNSS时间同步
  18. 计算机作业我家乡的变化,家乡的变化
  19. 【非常好英文】非常好用英文怎么说
  20. android 设置边框圆角

热门文章

  1. 基于双重交叉注意的医学图像分割
  2. Django学习笔记2-使用QuerySet删除和查询单表
  3. Medical Checkup ---ACM
  4. 约瑟夫环 java代码_约瑟夫环算法的Java实现代码
  5. mysql快熟导入大量excel表格数据
  6. 高校实验室管理的建设思路
  7. c++ 中sizeof 与数组形参
  8. 打开含有pdf文件的文件夹电脑一直闪烁解决方案
  9. 透明网关不认字段的解决方案(tg4mssql)
  10. 如何查看显卡支持的CUDA版本