深圳Java开发面试总汇
所有题目答案都不完整,这些针对个人所整理的
SpringBoot有哪些核心注解和配置以及和spring的区别?
https://www.cnblogs.com/lin02/p/11480535.html
https://www.cnblogs.com/lin02/p/11469541.html
springBoot中开发中配置文件和测试以及生产如何配置?
1.首先在resources目录下创建完整的配置文件(包括测试、开发、生产环境下的相关配置文件)
2.然后创建一个application.yml文件,因为springboot项目启动的时候会默认加载该配置文件,解析其中的内容
3.在application.yml中配置一下内容(Spring.profiles.active = dev[配置文件的后缀]),springboot在启动时会自动解析你配置的文件application-dev.yml文件下的配置
Mybatis如何分页?
- 使用数组分页查询出全部数据返回,然后再list中截取需要的部分
- Sql分页mysql(limit分页关键字)、oracle(rownum伪列)
- Pagehelper插件 首先得导入maven依赖
Mybatis 如何判断为null?
使用动态if标签<if test=”type != null and type !=”’”></if>
Mybaits $和#的区别?
#是预编译处理 $是字符串替换
Mybatis在处理#会把#{}替换成?,调用PreparedStatement的set方法来赋值
Mybatis在处理${} 会替换成变量值
#可以防止sql注入,提高安全性
事务的四大特性?
事务就是将诺干个相关操作绑定在一起作为一个逻辑工作单元的sql语句分组,如果任何一个语句操作失败那么整个操作就会失败,以后操作失败就会回滚到操作前状态,为了保证要么执行要么不执行,就可以使用事务。
事务具有一致性,原子性,隔离性和持久性。即ACID
锁是实现事务的关键,保证事务的完整性和并发性。
你对存储过程的理解 ?
https://www.cnblogs.com/lin02/p/11583382.html
类似函数,封装了某些特定功能的SQL语句集,经过编译保存在数据库中的一个特殊对象,存储过程不能出现在SQL中。
String有哪些方法?
equals:字符串是否相同
indexOf:目标字符或字符串在源字符串中位置下标
lastIndexOf:目标字符或字符串在源字符串中最后一次出现的位置下标
valueOf:其他类型转字符串
charAt:获取指定下标位置的字符
isEmpty:字符串长度是否为0
format:格式化字符串
join:以某字符串,连接某字符串数组
length:字符串字符数
replace:字符串替换
replaceFirst:替换第一个出现的目标字符串
split:以某正则表达式分割字符串
substring:截取字符串
toLowerCase:字符串转小写
toUpperCase:字符串转大写
trim:去字符串首尾空格
接口和抽象类?
1、抽象类使用abstract修饰;接口使用Inteface修饰
2、抽象类中的抽象方法只有方法体,没有具体实现;接口中只能是抽象方法。
3、抽象类只能单继承,多实现,接口可以多继承其他接口,但不能实现接口,和不能继承其他类。
4、抽象类继承自Object,接口不是。
5、抽象类中有构造器,接口中没有构造器。
6、抽象类可以有静态的方法,接口不可以。
7、抽象类中可以有final的方法(非抽象方法),接口中不能有final的方法。
怎么解决同步?
加上synchronized关键字
也可以使用特殊域变量volatile关键字
Form表单多次提交怎么解决?
- js禁掉提交按钮—当然如果客户端把js给禁止掉了就无效了
- 使用验证码
- 使用令牌机制token+session(技术一个随机数)
Js如何创建对象?
- 使用new关键字(工厂模式)
Js有哪些设计模式?
单例模式:保证一个类只有一个实例
适配器模式:解决两个软件实体间的不兼容问题
装饰者模式:为对象动态加入行为,经过多重保装,可以形成一条装饰链
等等等好多
什么是检查性异常?
- 检查性异常必须使用try catch或throws等关键字进行处理,否则编译器会报错
- 非检查性异常一般代码写的不够严谨而导致的问题,可以修改代码解决
- 所有的检查性异常都继承自Exception
- 所有的非检查性异常都是继承自RuntimeException
什么是多态?
就是同一种事务的不同种表现形式。
例如重写、重载、父类的声明指向子类的对象。可变参数。
Redis有哪些类型?
String这是最简单的类型,就是普通的set和get,做简单的Key value缓存。
Hash 这个是类似于map的一种结构
List 是有序列表
Set 是无序集合,自动去重。
例如可以利用set的交集可以把两个人的粉丝列表整一个交集,
看看两人的共同好友是谁的一个功能。
Sorted set是有序的set,也去重,自动根据分数排序。
Oracle中去重的方式有哪些?
用distinct方法
用group by分组
Union方法
equals和==的区别?
==如果用在基本数据类型上是同时比较内存地址和值,如果是引用类型==比较的是内存地址
equals方法是object类的方法,默认比较内存地址,如果重写了安装重写的规则进行比较
Oracle与mysql的区别?
他们都是关系型数据库,也都是比较流行的数据库。
- oracle是收费的,mysql是不收费的。
- 分页查询不同,mysql用limit关键字(select * from dual limit 开始位置,记录个数),oracle用rownum伪列实现代码比较繁琐。
- 主键自增不同,mysql是员工自动增长的数据类型,插入数据时,不需要管理自己会自动增长。Oracle需要通过建立一个自动增长的序列号来完成自动增长。
- 安装空间大小不同,mysql安装完也就一百多兆子,而oracle有3G左右,且使用的时候oracle占特别大的内存空间。
- Sql的语法不同。
面向对象的理解?
抽象、继承、封装、多态性。
抽象:抽象技术忽略一个主题中与当前目标无关的哪些方面,以便更充分的注意与当前目标有关的方面。抽象并不是打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是数据抽象。
继承:子类拥有父类一切非私有的方法。
封装:封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即现实世界可以被描述绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。
多态性:同一种事务的不同种表现形式。
重写与重载有什么区别?
重写:发生在子类和父类之中,方法名相同、参数列表相同、返回值相同、不能是final的方法、重写的方法不能比父类方法更为严格的修饰符权限、重写的方法所抛出的异常不能比父类更大。
如果父类私有的方法,子类拥有相同的方法,子类不属于重写父类的方法,该方法属于子类的新方法。
重载:发生在同一个类之中,方法名相同、参数列表不相同(个数、类型)、与返回值无关、与final无关、与修饰符无关、与异常无关。
Linux的基础命令?
1.查看进程
Ps | -ef|grep进程号
2.Kill命令用于种植进程
Kill -9[id]
不止这些
Java的设计模式?
创建型模式(5种):工厂模式、抽象工厂模式、单例模式、建造者模式、原型模式。
结构性模式(7种):适配器模式、装饰者模式、代理模式、外观模式、桥接模式、组合模式、享元模式。
行为性模式(11种):测略模式、板块方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
项目中用到了哪些模式?
比如spring中的控制反转IOC和依赖注入DI
工厂设计模式:通过BeanFatory创建对象。
(singleton)单例设计模式:保证一类对象中只有一个实例。
代理设计模式:AOP就是基于动态代理的,而动态代理又基于Java反射机制。
观察者模式:它表示的是一种对象之间的依赖关系,当一个对象发生改变的时候,这个对象所依赖的对象也会做出反应。
适配器模式:将一个接口转换成客户希望的另一个接口,适配器模式使接口不兼容的哪些类可以一起工作,其名未包装器。
装饰者模式:可以动态的给对象添加一些额外的属性或行为。
o工厂设计模式 : Spring使用工厂模式通过 BeanFactory、ApplicationContext 创建 bean 对象。
o代理设计模式 : Spring AOP 功能的实现。
o单例设计模式 : Spring 中的 Bean 默认都是单例的。
o模板方法模式 : Spring 中 jdbcTemplate、hibernateTemplate 等以 Template 结尾的对数据库操作的类,它们就使用到了模板模式。
o包装器设计模式 : 我们的项目需要连接多个数据库,而且不同的客户在每次访问中根据需要会去访问不同的数据库。
这种模式让我们可以根据客户的需求能够动态切换不同的数据源。
o观察者模式: Spring 事件驱动模型就是观察者模式很经典的一个应用。
o适配器模式 :Spring AOP 的增强或通知(Advice)使用到了适配器模式、spring MVC 中也是用到了适配器模式适配Controller。
你是如何理解全栈式开发?
Arraylist和linklist的区别?
首先他们都是接口List的实现类,数据都是有序可重复的。
ArrayList采用的是数组形式保存对象的,访问速度更快,而Linklist的插入和删除更快。
你对未来的职业规划?
大部分面试官司都会问你是否有职业规划,这个问题的背后是了解你的求职动机和对自己中长期职业发展的思考。在回答这个问题之前,要对自己有个清晰的认识,知道自己想往哪个方向发展以及未来有什么计划,要给面试官一种积极向上,好学上进,有追求,有规划的感觉,面试官喜欢有规划的求职者。
Java中有哪四大域?
Page、request、session、application
PageContext : pageConext 存放的数据在当前页面有效。开发时使用较少。(page域)
ServletRequest: request 存放的数据在一次请求(转发)内有效。使用非常多。
HttpSession: session 存放的数据在一次会话中有效。使用的比较多。
如:存放用户的登录信息,购物车功能。
ServletContext: application 存放的数据在整个应用范围内都有效。因为范围太大,应尽量少用。
Hibernate中有几种状态?
临时状态、持久化状态、游离状态、删除状态
Spring IOC注入有几种方式?
set注入、构造器注入、静态工厂注入、实例工厂注入
Springmvc的执行流程?
https://www.cnblogs.com/lin02/p/11469621.html
Hibernate的执行流程以及怎么使用?
https://www.cnblogs.com/lin02/p/11393719.html
笔试题:小张承诺:如果天不下雨,我一定去听音乐会。
https://wenku.baidu.com/view/b0a6ea305b8102d276a20029bd64783e09127d92.html
有1000瓶水,3个瓶子可以再换1瓶,一共可以喝多少瓶?
https://www.cnblogs.com/dreamkunk/p/6528630.htmlstring、stringbuffer、stringbuilder的区别?
首先说一下执行速度,在这方面运行速度快慢:String<StringBuffer<StringBuilder。
String最慢的原因String为字符串常量,StringBuffer和StringBuilder均为字符串变量,String是final的类。
在线程安全上,StringBuffer是线程安全的,StringBuilder是线程不安全的。
HashMap和Hashtable的区别?
Map用于存储键值对,根据键得到值,因此不允许键重复,值可以重复。
HashMap是一个最常用的Map,它根据键的HashCode值存储数据,根据键可以直接获取它的值,具有很快的访问速度。
HashMap不支持线程的同步,即任意时刻可以有多个线程同时写HashMap,可能会导致数据的不一致。如果需要同步,可以使用Colletions.synchronizedMap(HashMap map)方法使HashMap具有同步的能力。
Hashtable与HashMap类似,不同的是
它不允许记录的键或值为空,支持线程的同步,即任意时刻只有一个线程能写Hashtable,然而,这也导致Hashtable写入时比较慢。
LinkedHashMap保存了记录的插入顺序,在使用迭代器遍历时,先得到的记录肯定是先插入的。遍历速度会比hashmap慢,有hashmap的全部特性。
Treemap能够把它保存的记录根据键排序,默认是按升序,也可以指定排序的比较器。在使用迭代器遍历时,得到的记录是排过序的,键和值不能为空。
如何创建一个线程?线程的创建方式有哪些?ThreadLolocal有什么用?
继承类Thread->重写run方法->创建对象->启动线程start()
- 继承Thread类,并重写它的run方法
- 实现Runnanle接口,并重写它的run方法
- 使用线程池例如用Executor框架
ThreadLocal为每个使用该便量的线程提供独立的变量副本,所以每一个线程都可以独立地改变自己的副本,而不影响其他线程所对应的副本。
- 方便同一个线程使用某一对对象,避免不必要的参数传递
- 线程间数隔离
- 获取数据库连接、session、关联id
Xml文档有几种形式?他们之间有何本质区别?
两种形式dtd/schema。
本质区别:schema本身是xml的,可以被xml解析器解析(这也是从DTD上发展schema的目的)
Statement和PreparedStatement的区别?如何做批量处理?
https://www.cnblogs.com/tongxuping/p/6880314.html
PreparedStatement接口继承Statement接口
Statement可以包含不同的sql语句
PreparedStatement可以防止sql注入攻击、采取预编译机制,效率高、如果发送的sql语句主干部分相同,主干部分只需写一次,每次发送的只是参数部分。
Websocket的理解?
WebSocket是html5出的东西(协议),并且是一个持久化的协议
协议:
UDP:不需要建立连接,不可靠,速度快,数据大小64kb
TCP:需要建立连接,形成传输数据的通道,三次握手,可靠,速度比不上UDP
Socket:是为网络服务的一种机制