JAVA基础
- 面向对象的特征 基本原则
1.1 继承、封装和多态
1.2 单一职责原则 开放封闭原则 替换原则 依赖原则 接口分离原则
- final, finally, finalize 的区别
2.1 final是修饰符(关键字;
2.2 finally是catch异常处理后执行;
2.3 finalize是方法名,将对象从内存中清除出去之前做必要的清理工作
- Exception、Error、运行时异常与一般异常有何异同
3.1 Error是JVM无法预测,属于JVM层次的严重错误
3.2 Exception是可捕捉,可处理的,如果不处理会往上抛直到程序退出
- 请写出5种常见到的runtime exception
4.1 NullPointerException, 空指针异常
4.2 NumberFormatException, 字符串转换为数字异常
4.3 IOException, 输入输出异常
4.4 SQLException, 操作数据库异常
4.5 ClassNotFoundException 类没找到时,抛出该异常
- int 和 Integer 有什么区别,Integer的值缓存范围
5.1 int 是基本类型,Integer是对象,封装数据类型,范围-128~127
- 包装类,装箱和拆箱
6.1 包装类是指将基本数据类型封装,例如int的包装类是Integer
6.2 将基本数据类型变成包装类称为装箱
6.3 将包装类的类型变为基本数据类型称为拆箱
- String、StringBuilder、StringBuffer
7.1 String 字符串常量
7.2 StringBuffer 字符串变量(线程安全)
7.3 StringBuilder 字符串变量(非线程安全)
- 重载和重写的区别
8.1 重载方法名一致,参数可以不一致,可返回不同类型,可有不同的访问修饰符,是多态的表现
8.2 重写是参数一致,返回类型一致,访问修饰符的限制一定要大于被重写方法的访问修饰符(public>protected>default>private)
- 抽象类和接口有什么区别
9.1 接口是对动作的抽象,而抽象类是对根源的抽象。
9.2 一个类只能继承一个抽象类,但是一个类可以同时实现多个接口
9.3 都不能被直接实例化,抽象类要被子类继承,接口要被子类实现
- 反射的用途及实现
10.1 反射可以动态获得一个类的所有属性、方法
10.2 Class.newInstance()
- 自定义注解的场景及实现
11.1 没用过
- HTTP请求的GET与POST方式的区别
12.1 一般用GET取数据POST提交数据
12.2 GET后退按钮/刷新无害,POST数据会被重新提交
12.3 GET的数据在 URL 中对所有人都是可见的。POST的数据不会显示在 URL 中
- Session与Cookie区别
13.1 session 在服务器端,cookie 在客户端,一个可见一个不可见
13.2 session 默认被存在在服务器的一个文件里(不是内存)
13.3 用户验证这种场合一般会用 session
- 常用的JDK包
14.1 java.lang java.util java.io java.net
- MVC设计思想
15.1 model view controller 把应用逻辑,处理过程和显示逻辑分成不同的组件实现,便于解耦和开发
- equals与==的区别
16.1 ==比较原生类型
16.2 equals()比较对象
16.3 一个是操作符一个是方法
- hashCode和equals方法的区别与联系
17.1 HashCode的存在主要是为了查找的快捷性,HashCode是用来在散列存储结构中确定对象的存储地址的
17.2 如果两个对象equals相等,那么这两个对象的HashCode一定也相同
17.3 如果对象的equals方法被重写,那么对象的HashCode方法也尽量重写
17.4 如果两个对象的HashCode相同,不代表两个对象就相同,只能说明这两个对象在散列存储结构中,存放于同一个位置
- 什么是Java序列化和反序列化,如何实现Java序列化?或者请解释Serializable 接口的作用
18.1 JAVA对象转换为字节序列的过程就称为对象的序列化
18.2 将字节序列恢复成Java对象的过程称为对象的反序列化
18.3 将需要被序列化的类实现Serializable接口,然后使用一个输出流(如:FileOutputStream)来构造一个ObjectOutputStream(对象流)对象,接着,使用ObjectOutputStream对象的writeObject(Object obj)方法就可以将参数为obj的对象写出(即保存其状态),要恢复的话则用输入流
- Object类中常见的方法,为什么wait notify会放在Object里边
19.1 toString() equals() hashCode()
19.2 锁对象可以是任意对象
- Java的平台无关性如何体现出来的
20.1 最主要的是Java平台本身。Java平台扮演Java程序和所在的硬件与操作系统之间的缓冲角色。这样Java程序只需要与Java平台打交道,而不用管具体的操作系统
20.2 Java class文件。Java程序最终会被编译成二进制class文件。class文件可以在任何平台创建,也可以被任何平台的Java虚拟机装载运行。它的格式有着严格的定义,是平台无关的。
- JDK和JRE的区别
21.1 JDK是Java的开发工具,它不仅提供了Java程序运行所需的JRE,还提供了一系列的编译,运行等工具,如javac,java,javaw等。JRE只是Java程序的运行环境,它最核心的内容就是JVM(Java虚拟机)及核心类库。
JAVA常见集合
- List 和 Set 区别
1.1 List是有序集合,元素可以重复
1.2 Set是无序集合,元素不可重复
- Arraylist 与 LinkedList 区别
2.1 ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。
2.2 对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针
2.3 对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据
设计模式
- Spring中用到了哪些设计模式
1.1 工厂模式 在各种BeanFactory以及ApplicationContext创建中都用到了
1.2 代理模式 在Aop实现中用到了JDK的动态代理
1.3 单例模式 在创建bean的时候
- MyBatis中用到了哪些设计模式
2.1 工厂模式 SqlSessionFactoryBean
2.2 建造者模式 BaseBuilder
2.3 模板方法 BaseExecutor
2.4 动态代理 MapperProxy
- 你项目中有使用哪些设计模式
3.1 根据实际描述
- 说说常用开源框架中设计模式使用分析
4.1 参考1和2
数据结构
- 树(二叉查找树、平衡二叉树、红黑树、B树、B+树)
- 深度有限算法、广度优先算法
- 克鲁斯卡尔算法、普林母算法、迪克拉斯算法
- 什么是一致性Hash及其原理、Hash环问题
- 常见的排序算法和查找算法:快排、折半查找、堆排序等
网络/IO基础
- BIO、NIO、AIO的概念
- 什么是长连接和短连接
- Https的基本概念
- 三次握手和四次挥手、为什么挥手需要四次
- 从浏览器中输入URL到页面加载的发生了什么
数据库
- MySQL 索引使用的注意事项
1.1 略
- DDL、DML、DCL分别指什么
2.1 DML Data Manipulation Language 数据操纵语言CRUD
2.2 DDL Data Definition Language 数据库定义语言如create table
2.3 DCL Data Control Language 数据库控制语言如grant,deny,revoke等,只有管理员才有这样的权限
- explain命令
3.1 略
- left join,right join,inner join
4.1 left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录
4.2 right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录
4.3 inner join(等值连接) 只返回两个表中联结字段相等的行
- 数据库事务ACID(原子性、一致性、隔离性、持久性)
5.1 原子性(事务必须是一个不可分割的整体)
5.2 一致性(执行完数据库操作后,数据不会被破坏,例如转账中一方转出另一方转入)
5.3 隔离性(事务操作不受干扰)
5.4 持久性(数据要永久保存在磁盘里)
- 事物的隔离级别(读未提交、读以提交、可重复读、可序列化读)
- 脏读、幻读、不可重复读
- 数据库的几大范式
8.1 第一范式(1NF)无重复的列。指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性
8.2 第二范式(2NF)属性完全依赖于主键 [ 消除部分子函数依赖 ]。满足第二范式(2NF)必须先满足第一范式(1NF)
8.3 第三范式(3NF)属性不依赖于其它非主属性 [ 消除传递依赖 ]。满足第三范式(3NF)必须先满足第二范式(2NF)。第三范式(3NF)要求一个数据库表中不包含已在其它表中已包含的非主关键字信息。
- 数据库常见的命令
数据库:
创建数据库 create database database_name
相应的删除数据库 drop database database_name
对数据库的备份,注意需要一个存储备份的设备device,或者说空间use master
EXEC sp_addumpdevice 'disk' , 'testBack', 'c:\mssql7backup\MyNwind_1.dat'
有了备份空间使如下语句进行备份
backup database pubs to testback
修改数据库的名字 sp_renamedb 'old_name','new_name'
分离数据库 sp_detach_db 'c:\mssql7backup\MyNwind_1.dat'
附加数据库 sp_attach_db 'c:\mssql7backup\MyNwind_1.dat'
压缩数据库 dbcc shrinkdatabase(database_name)
表:
创建新表
create table table_name
(
stu_id char(10) not null primary key,
name char(10) not null,
)
删除表 drop table table_name
Redis
- Redis 有哪些数据类型
1.1 String Hash List Set zSet
- Redis 使用场景
2.1 缓存 计数器 排行榜 最新列表
- Redis 持久化机制
3.1 快照持久化通用的配置(Snapshotting)备份到其他服务器
3.2 AOP持久化配置(append-only-file)写入文件
- Redis 为什么是单线程的?
4.1 因为CPU不是Redis的瓶颈。Redis的瓶颈最有可能是机器内存或者网络带宽。
4.2 单线程可以处理高并发请求吗?当然可以了,Redis都实现了。
- 使用Redis有哪些好处?
5.1 速度快,因为数据存在内存中
5.2 支持丰富数据类型,支持string,list,set,sorted set,hash
5.3 支持事务,操作都是原子性,所谓的原子性就是对数据的更改要么全部执行,要么全部不执行
5.4 丰富的特性:可用于缓存,消息,按key设置过期时间,过期后将会自动删除
消息队列
- 消息队列的使用场景和好处
1.1 注册发邮件,发短信,
1.2 解耦 提速 广播 削峰
开源框架和容器
- Servlet的生命周期
1.1 Servlet 通过调用 init () 方法进行初始化
1.2 Servlet 调用 service() 方法来处理客户端的请求
1.3 Servlet 通过调用 destroy() 方法终止(结束)
1.4 Servlet 是由 JVM 的垃圾回收器进行垃圾回收
- 转发与重定向的区别
2.1 转发是服务器行为,重定向是客户端行为
- BeanFactory 和 ApplicationContext 有什么区别
3.1 ApplicationContext 是 BeanFactory接口的子接口
3.2 ApplicationContext是对BeanFactory的扩展,提供了更多的功能.国际化处理,事件传递,Bean自动装配,各种不同应用层的Context实现
- Spring IOC 如何实现
4.1 IOC(控制反转)的实现建立在工厂模式、java反射机制和jdk的操作XML的DOM解析方式
- Spring中Bean的作用域,默认的是哪一个
5.1 singleton 单例模式
网友评论