JAVA面试基础知识收集
有时候面试官会问得非常细,非常的基础,以至于是一些你都没有注意过的小常识,这里收集了一点JAVA的小知识,便于查阅。
面试的知识主要分为以下几类:这里只是少量内容,后续会不断补充。
1.Java基础知识,包括jvm,spring,等知识。
2.常用框架相关,包括SSM,springboot等。
3.Linux常识。
4.数据库常识。
5.设计模式以及架构设计知识。
------------------正文开始------------------------
1.Java基础知识
1>.web项目中的web.xml中有些什么配置?
指定欢迎页面,指定错误页面(可以通过错误码或异常类型来指定错误处理页面),命名并定制URL,设置监听器,设置过滤器。
详细参考:
2>.说一下常见的JSP内置对象有哪些?
九大内置对象:
- 内置对象名 类型
- request HttpServletRequest
- response HttpServletResponse
- config ServletConfig
- application ServletContext
- session HttpSession
- exception Throwable
- page Object(this)
- out JspWriter
- pageContext PageContext
四大域对象:
- ServletContext context域
- HttpServletRequet request域
- HttpSession session域 --前三种在学习Servlet时就能接触到
- PageContext page域 --jsp学习的
详细参考:
3>.http常见状态码:
200 成功返回,301 重定向,304 not modified,400 请求错误,403 服务端拒绝请求,404 请求失败,资源未在服务器上发现,5或6开头的都是服务器错误。
详细参考:https://baike.baidu.com/item/HTTP%E7%8A%B6%E6%80%81%E7%A0%81/5053660?fr=aladdin
4>.ftp端口,MySQL端口,ssh端口分别是多少?
ftp:20和21端口,20是用来连接的,21是用来传输数据的。MySQL端口是3306,ssh端口是22
5>.写一个代码让抛出jvm堆栈异常:
public class TestDemo {
private int index = 1;
public void method() {
index++;
method();
}
@Test
public void testStackOverflowError() {
try {
method();
} catch (StackOverflowError e) {
System.out.println("程序所需要的栈大小 > 允许最大的栈大小,执行深度: " + index);
e.printStackTrace();
}
}
}
6>.写一个完整的单例模式:
//静态内部类方式
public class Singleton{
private static class SingletonHolder{
public static Singleton instance = new Singleton();
}
private Singleton(){
}
public static Singleton newSingleton(){
return SingletonHolder.instance;
}
}
详细参考:
2.常用框架相关
1>.当前springboot版本是多少?
目前使用最新的springboot,版本为:2.0.0
2>.spring的bean是如何加载的?spring的bean的作用域是什么?
Spring中bean的加载过程:
1.获取配置文件资源
2.对获取的xml资源进行一定的处理检验
3.处理包装资源
4.解析处理包装过后的资源
5.加载提取bean并注册(添加到beanDefinitionMap中)
Spring支持五种作用域:
- singleton:单例模式,在整个Spring IoC容器中,使用singleton定义的Bean将只有一个实例
- prototype:原型模式,每次通过容器的getBean方法获取prototype定义的Bean时,都将产生一个新的Bean实例
- request:对于每次HTTP请求,使用request定义的Bean都将产生一个新实例,即每次HTTP请求将会产生不同的Bean实例。只有在Web应用中使用Spring时,该作用域才有效
- session:对于每次HTTP Session,使用session定义的Bean豆浆产生一个新实例。同样只有在Web应用中使用Spring时,该作用域才有效
- globalsession:每个全局的HTTP Session,使用session定义的Bean都将产生一个新实例。典型情况下,仅在使用portlet context的时候有效。同样只有在Web应用中使用Spring时,该作用域才有效
默认情况下是"单例模式".
详细参考:
3>.当数据库字段和实体字段不一致时,mybatis中如何配置?
使用映射文件,配置映射字段,在*Mapper.xml中写法如下:
<!-- 配置映射字段 -->
<resultMap type="Department" id="tab_department">
<id property="ids" column="ids"/>
<result property="deName" column="de_name"/>
<result property="pIds" column="p_ids"/>
<result property="deChargePerson" column="de_charge_person"/>
<result property="createTime" column="create_time"/>
</resultMap>
4>.springboot项目访问端口在哪里配置?
根目录有一个文件:application.properties中的server.port:80修改下即可。
3.Linux常识
1>.常见的Linux命令?
top:查看性能,rm -rf 删除,cat:查看文件,tar 打包等
详细参考:http://www.runoob.com/linux/linux-command-manual.html
4.数据库常识
1>.mysql存储引擎有哪些?
常见的两种:InnoDB,MyISAM
InnoDB是事务型数据库的首选引擎,支持事务安全表(ACID),支持行锁定和外键,上图也看到了,InnoDB是默认的MySQL引擎。
MyISAM基于ISAM存储引擎,并对其进行扩展。它是在Web、数据仓储和其他应用环境下最常使用的存储引擎之一。MyISAM拥有较高的插入、查询速度,但不支持事物。
2>.在什么情况下需要建立索引?索引的优缺点?
对于经常查询的字段可以加上索引。
实际上,索引也是一张表,该表保存了主键与索引字段,并指向实体表的记录。
索引的优点:索引可以大大提高MySQL的检索速度。
索引的缺点:
1.降低更新表的速度,如对表进行INSERT、UPDATE和DELETE。因为更新表时,MySQL不仅要保存数据,还要保存一下索引文件。
2.建立索引会占用磁盘空间的索引文件。
3>.mysql执行大量insert操作导致死锁,如何解除?
1.查询是否锁表
show OPEN TABLES where In_use > 0;
2.查询进程(如果您有SUPER权限,您可以看到所有线程。否则,您只能看到您自己的线程)
show processlist
3.杀死进程id(就是上面命令的id列)
kill id
4>.员工信息表employer,字段如下:id,name,age,subject,现在想要按照年龄对员工进行统计,请写出SQL?
select name as 姓名,age as 年龄,COUNT(age) as 人数 from employerGROUP BY age;
结果:
知识点比较碎,记录贵在积累。