问:谈谈你自己对面向对象的理解?
抽象,封装,继承,多态
理解:假如我是女娲,我要造人(人是个对象),人要有思想,肉体(抽象)
因为要造很多人,所以我想请人一起帮忙造,但是我又不想让他知道我的技术,所以我就把造人的技术封装起来,然后他只需要知道造什么样子的人就行了(封装)
但是这样效率还是很慢,所以我就造了一个父母的模板,孩子只要去继承他们就行了。(继承)
但是所有的父母模板肯定不是全部一样,我要在原来的模板上面添加别的东西,这个就是多态。
问:面向对象和面向过程的区别?
举个例子:大象塞进冰箱
面向过程:
1.打开冰箱门
2.塞进大象
3.关闭冰箱门
面向对象
1.冰箱的门打开
2.冰箱装入大象
3.冰箱的门关闭
问:在java中使用包管理类有什么好处?
答:1.避免命名冲突 2.分类管理 3.提高复用性(复用性即可以多次使用的特性。对于代码来说复用性就是一种框架式结构,通过高度的抽象,让你的代码能适应更多种的情况,完成更多种情况的任务,这就是代码的复用性。)
问:SpringMVC的原理?
1.http请求到dispathservlet
2.handermapping寻找处理器(handermapping请求映射处理器,也就是通过请求的URL找到对应的controller)
3.调用处理器controller
4.controller调用业务逻辑后,返回modelandview
5.DispatherServlet查询modelandview
6.modelandview将数据反馈给http
问:shiro框架的优缺点?
1.优点:安全性高,可以对用户权限进行授权
2.缺点:不能反向解码
问:进程和线程区别?
根本区别:进程是操作系统资源分配的基本单位,而线程是任务调度和执行的基本单位
进程:相当于流水线作业,线程:相当于流水线上面的工作人员
问:SQL语句中的$和#的区别?
#相当于预处理操作,防止sql的注入,相当会把你的传入的参数给隐藏掉
$不会将你传入的参数给隐藏掉
问:Java多线程并发?
Thread 类本质上是实现了 Runnable 接口的一个实例,代表一个线程的实例。启动线程的唯一方法就是通过 Thread 类的 start()实例方法。
问:多线程的start和run的区别?
1.start()方法来启动线程,真正实现了多线程运行。这时无需等待 run 方法体代码执行完毕,可以直接继续执行下面的代码。
2.通过调用 Thread 类的 start()方法来启动一个线程, 这时此线程是处于就绪状态, 并没有运 行。
3.. 方法 run()称为线程体,它包含了要执行的这个线程的内容,线程就进入了运行状态,开始运行 run 函数当中的代码。 Run 方法运行结束, 此线程终止。然后 CPU 再调度其它线程。
问:java的容器有哪些?它们之间有什么关系,集成了那些类?
list(列表),map(映射),set(集合)
java集合可以分为两种体系conllection和map
list存放有序的数据,set存放无序的数据
map存放数据是<key,value>的形式
问:面向对象的设计模式?
1.单一职责(一个方法或一个类只做一件事情,为了模块内高内聚)
2.迪米特法则(为了模块间低耦合)
3.里氏替换(就是继承原则,子类继承父类的方法)
4.依赖倒置(类之间的依赖通过接口实现,低耦合的同时对扩展开放)
5.接口隔离
6.合成复用原则
问:hashmap的应用场景?
hashmap相当于集合map,可以保存kv形式的数据,key不可重复且无序,但是查找的效率很高。
问:mybatis-plus添加数据,id生成问题?
mybatis-plus默认会生成id,该id是雪花算法生成的id
雪花算法:SnowFlake 算法,是 Twitter 开源的分布式 id 生成算法。其核心思想就是:使用一个 64 bit 的 long 型的数字作为全局唯一 id。在分布式系统中的应用十分广泛,且ID 引入了时间戳,基本上保持自增的。
解决方法:
将字段改为long(长整型)
实体类上面添加注解
问:什么是乐观锁?
乐观锁 : 故名思意十分乐观,它总是认为不会出现问题,无论干什么不去上锁!如果出现了问题,
再次更新值测试
悲观锁:故名思意十分悲观,它总是认为总是出现问题,无论干什么都会上锁!再去操作!
失败的案例:多线程的情况下面测试乐观锁,不会覆盖插队线程的值
问:什么是restful风格?
我的理解是设计接口的风格,最显著的特点:给用户一个url,根据method不同在后端做不同的处理,比如post是创建数据,get是获取数据,put是修改数据,delete删除数据
问:JDBC连接数据库的步骤?
1.注册驱动(driver-class-name)
2.获取连接(url,username,password)
3.编写sql语句
4.执行sql语句
5.处理对象结果集
6.关闭连接
问:JAVA序列化?
保存(持久化)对象及其状态到内存或者磁盘
序列化对象以字节数组来保存
在 Java 中,只要一个类实现了 java.io.Serializable 接口,那么它就可以被序列化。
通过 ObjectOutputStream 和 ObjectInputStream 对对象进行序列化及反序列化。
问:spring的特点?
轻量级,控制反转,面向切面,容器,框架集合
问:aop实现切面的步骤?
1.导入依赖
2.在spring的配置文件中加入aop的命名空间
3.基于注解/配置的方式来使用aop
4.编写切面类
5.配置切面
问:全局唯一ID的生成策略?
UUID,redis自增,snowflake算法,数据库自增
问:数据库的事务性?
原子性,一致性,隔离性,持久性.ACID 并且操作要么执行要么都不执行
1.setAutoCommit(false)设置事务为手动提交,2.commit提交事务,3.出现异常产生回滚rollback
问:什么是脏读?
当我们使用事务时,有可能会出现这样的情况,有一行数据刚更新,与此同时另一个查询读到了这个刚更新的值。这样就导致了脏读,因为更新的数据还没有进行持久化,更新这行数据的业务可能会出现回滚,这样这个数据就是无效的。
问: arraylist和linkedlist的区别?
arraylist是基于索引的数据接口,底层是数组;linkedlist是以元素列表的形式存储他的数据
插入和删除的时候linkedlist更加方便,查询的时候arraylist(支持随机访问)更加方便
问:jdk1.8的新特性?
lambada表达式,重复的注解,扩展方法(接口中可以静态、默认的方法)
标签:面试题,多线程,JAVA,方法,线程,序列化,数据,id From: https://blog.51cto.com/u_16155131/6986206