面试题总结(总结中)

文章目录

1.String 的常见方法及用法:

equals():
toString():
valueOf();
splits():
replace():
toUpperCase():
toLowerCase():
length():
compareTo():
charAt():
isEmpty():
concat():
endsWith():
startWith():
indexOf():
getBytes():
format():
join():
subString():
trim():
hashCode():

2.java的九大内置对象

Request
Response
Session
Page
Out
Pagecontext
Exception
Config
Application

3.子父类代码加载顺序

先执行父类静态代码块->执行子类静态代码块->执行父类构造代码块->执行父类构造函数->执行子类构造代码块->执行子类构造函数

4.String、StringBuilder、StringBuffer的区别?

5.Equals相等hashCode相等吗?

equals():
hashCode():

6.Break、continue、return对循环中断的操作区别?

break:可以只跳出当前的循环体,也可以跳转到指定的标签处
continue:跳出本次的循环,继续执行下一次循环
return:直接结束循环并结束方法。

7.创建线程的方式?

1>. 实现Runnable接口,
2> 继承thread类,重写run方法

8.Wait和sleep的区别?

1>wait是object对象的方法,sleep是thread的方法
2>wait会释放对象锁,sleep不会释放对象锁

9.java权限修饰符有几个?各自的范围?

Public:公共访问权限,即都可以访问
Protected:当前包可访问,不同包的子类可以访问
Default:当前包可访问,相同包的子类可以访问
Private:仅当前类可以访问

10.Set集合

11.Map

12.List集合

13.为什么hashcode方法要用质数31做优质乘子?

31的乘法运算可以转换为移位运算((i*31)=(i<<5)-i) )

14.微服务的优缺点

1.微服务是松藕合的,无论是在开发阶段或部署阶段都是独立的。
2.能够快速响应, 局部修改容易, 一个服务出现问题不会影响整个应用。
3.易于和第三方应用系统集成, 支持使用不同的语言开发, 允许你利用融合最新技术。
4.每个微服务都很小,足够内聚,足够小,代码容易理解。团队能够更关注自己的工作成果, 聚焦指定的业务功能或业务需求。
5.开发简单、开发效率提高,一个服务可能就是专一的只干一件事, 能够被小团队单独开发,这个小团队可以是 2 到 5 人的开发人员组成。
同样的, 也存在如下缺点:
6.微服务架构带来过多的运维操作, 可能需要团队具备一定的 DevOps 技巧.
7.分布式系统可能复杂难以管理。因为分布部署跟踪问题难。当服务数量增加,管理复杂性增加

15. Switch的取值

Byte
char
short
int
enum(jdk5开始支持)
String(jdk7开始支持)

16.面相对象的概念及特性

概念:把相关的数据和方法组织为一个整体来看待,从更高的层次来进行系统建模,更贴近事物的自然运行模式。
特性:继承、封装、多态

17.Js的数据类型

基本:Undefined、Null、Boolean、Number和String
复杂:Object
特殊:String
引用:Object、Array和Function

18.Nginx支持的传输协议

http、https、SMTP

19.HashMap与HashTable的区别

1、继承的父类不同:Hashtable继承自Dictionary类,而HashMap继承自AbstractMap类。但二者都实现了Map接口
2、线程安全性不同:HashMap是线程不安全的,而HashTable是线程安全的。
3、是否提供contains方法:HashMap把Hashtable的contains方法去掉了,改成containsValue和containsKey,因为contains方法容易让人引起误解。 Hashtable则保留了contains,containsValue和containsKey三个方法,其中contains和containsValue功能相同
4、key和value是否允许null值:其中key和value都是对象,并且不能包含重复key,但可以包含重复的value。通过上面的ContainsKey方法和ContainsValue的源码我们可以很明显的看出:Hashtable中,key和value都不允许出现null值。但是如果在Hashtable中有类似put(null,null)的操作,编译同样可以通过,因为key和value都是Object类型,但运行时会抛出NullPointerException异常,这是JDK的规范规定的。
HashMap中,null可以作为键,这样的键只有一个;可以有一个或多个键所对应的值为null。当get()方法返回null值时,可能是 HashMap中没有该键,也可能使该键所对应的值为null。因此,在HashMap中不能由get()方法来判断HashMap中是否存在某个键, 而应该用containsKey()方法来判断。

5、hash值不同:哈希值的使用不同,HashTable直接使用对象的hashCode。而HashMap重新计算hash值
6、内部实现使用的数组初始化和扩容方式不同

20.Spring bean对象的注入方式

1.set方法注入 2.构造器注入 3.静态工厂方法注入

21.Java虚拟机采用的字符编码方式?

Java虚拟机采用utf-16的编码格式来编码一个字符
java内部使用unicode编码

22.final 、finally、finalize的区别及用途?

final:用于修饰类、方法或变量,对于一个final变量,如果是基本数据类型的变量,则其数值一旦在初始化之后便不能更改;如果是引用类型的变量,则在对其初始化之后便不能再让其指向另一个对象,其修饰的方法不能被重写。当用final修饰一个类时,表明这个类不能被继承。但是要注意final类中的所有成员方法都会被隐式地指定为final方法。
finally:用于异常处理
无论异常是否被捕获,finally的代码一定会被执行。
finally里适合存放释放资源、后续处理的代码

finalize:
finalize()是Object中的方法,当垃圾回收器将要回收对象所占内存之前被调用,即当一个对象被虚拟机宣告死亡时会先调用它finalize()方法,让此对象处理它生前的最后事情(这个对象可以趁这个时机挣脱死亡的命运

23.Integer的常量池的范围?

-128到127会存在常量池中,不会新建对象

24.Lock和synchronized的区别?

25.12个球,有一个坏的(重量不一样)通过三次比较找到坏球?

编号1-12
1-4与5-8比较出现两种情况
第一种:
平衡的:说明坏球在剩下四个里面,使用两个好球和剩下四个球中的两个比较,有两种情况
情况1:平衡的:那么剩下两球必有坏球,通过和好球比较可以得出坏球
情况2:不平衡:那么这两个小球必有坏球,通过和好球比较得出坏球
第二种:
不平衡:剩下四个球一定是好球,那么必有一边有坏球,将123换下,将567放到123的位置,再将好球放到567的位置,现在出现三种情况、
第一种:天平偏向没变,那么坏球一定是在4和8这两个没变位置的球中,通过和好球比较得到坏球
第二种:天平偏向变了,那么坏球一定在567中,而且我们知道了坏球是重了还是轻了,然后将567两个拿来比较,得到坏球
第三种:天平平衡,那么坏球在123,而且我们知道坏球是重了还是轻了,两个比较得到坏球。

26.N瓶药片,有一瓶坏的,里面没一片药比标准的低了0.1g,如何通过一次称量得到坏的药片?

思路:
首先编号:1 2 3 。。。。。N
从每瓶中取出编号粒药片,
称出总重量sum
理论上全是真药的重量-实际重量得到缺少的重量
缺少的重量除以标准重量与坏药重量的差值
得到坏药片的数量
即得到第几号瓶是坏的。

27.抽象类和接口的区别?

1.抽象类可以有构造方法,接口中不能有构造方法
2.抽象类中可以有普通成员变量,接口中没有普通成员变量
3.抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的,不能有非抽象的普通方法。
4.抽象类中的抽象方法的访问类型可以是public,protected和(默认类型,虽然eclipse下不报错,但应该也不行),但接口中的抽象方法只能是public类型的,并且默认即为public abstract类型。
5.抽象类中可以包含静态方法,接口中不能包含静态方法
6. 抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是public static final类型,并且默认即为public static final类型。
7. 一个类可以实现多个接口,但只能继承一个抽象类。接口可以继承多个接口

28.接口中可以定义变量吗?

不能定义变量
对修改关闭,对扩展(不同的实现 implements)开放,接口是对开闭原则的一种体现。

29.子类可以继承父类的私有变量和方法吗?

子类不能从父类继承私有成员,但是子类的对象是包括子类所不能从父类中继承的私有成员的

30.一个类构造器可以调用这个类其他构造器吗?

可以,可以在一个构造器中通过this()来调用其他的构造器

31.为何不能通过方法返回值类型来区分重载?

因为存在两个方法只有返回值类型不一样时,在调用方法时无法确定调用的是哪一种返回值的方法

32.Serverlet的生命周期?

Servlet 通过调用 init () 方法进行初始化。
Servlet 调用 service() 方法来处理客户端的请求。
Servlet 通过调用 destroy() 方法终止(结束)。
最后,Servlet 是由 JVM 的垃圾回收器进行垃圾回收的。

33.Serverlet在何时被实例化?

如果没有设置loadOnStartup,则第一次请求的时候实例化

分三种情况:
loadOnStartup < 0
即负数的情况下,web容器启动的时候不做实例化处理,servlet首次被调用时做实例化
这种情况和没有设置loadOnStartup是一样的。
loadOnStartup > 0
web容器启动的时候做实例化处理,顺序是由小到大,正整数小的先被实例化
loadOnStartup = 0
web容器启动的时候做实例化处理,相当于是最大整数,因此web容器启动时,最后被实例化

34.解释IOC和AOP?

35.SpringMvc五大组件?

1.DispatcherServlet  请求入口

2.HandlerMapping   请求派发,负责请求和控制器建立一一对应的关系

3.Controller      处理器

4.ModelAndView    封装模型信息和视图信息

5.ViewResolver    视图处理器,定位页面

36.Spring 请求顺序

37.Spring常用的设计模式

38. 快速求出10万内的素数

39.数组倒排

40.get和post的区别

Get和Post在面试中一般都会问到,一般的区别:
(1)post更安全(不会作为url的一部分,不会被缓存、保存在服务器日志、以及浏览器浏览记录中)
(2)post发送的数据更大(get有url长度限制)
(3)post能发送更多的数据类型(get只能发送ASCII字符)
(4)post比get慢
(5)post用于修改和写入数据,get一般用于搜索排序和筛选之类的操作
参考

41.sql调优

1.要尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引
2. 索引不宜过多,提高查询效率时,同时也降低了 insert 及 update 的效率,因为 insert 或 update 时有可能会重建索引
3.同时在in和exists中通常情况下使用EXISTS,因为in不走索引
效率低:
4.调整Where字句中的连接顺序,DBMS一般采用自下而上的顺序解析where字句,根据这个原理表连接最好写在其他where条件之前
5.能够压缩到一句SQL执行的语句就不要用多条来执行。
6.避免使用HAVING字句,因为HAVING只会在检索出所有记录之后才对结果集进行过滤,而where则是在聚合前
刷选记录
7.当在SQL语句中连接多个表时,请使用表的别名并把别名前缀于每个列名上。这样就可以减少解析的时间并减少哪些友列名歧义引起的语法错误
8.Begin tran使用的原则是,在保证数据一致性的前提下,begin tran 套住的SQL语句越少越好!有些情况下可以采用触发器同步数据,不一定要用begin tran。
9.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描
10.任何地方都不要使用 select * from t ,用具体的字段列表代替“*”,不要返回用不到的任何字段
11.只修改一两个字段时不要更新全部的字段
13. 尽量避免使用or 使用or会放弃索引使用全表查询
14. 尽量避免在where条件中等号的左侧进行表达式、函数操作,会导致数据库引擎放弃索引进行全表扫描。
15. 当数据量大时,避免使用where 1=1的条件。通常为了方便拼装查询条件,我们会默认使用该条件,数据库引擎会放弃索引进行全表扫描
16. order by 条件要与where中条件一致,否则order by不会利用索引进行排序
17.多表关联查询时,小表在前,大表在后(oracle相反)第一张表全表扫描

41 mysql 与oracle的区别

1.oracle是大型数据库,mysql 是中小型数据库
2.oracle是收费的,而mysql 是开源的
3. 安装空间不一样,mysql小oracle大
4. 主键自增,mysql使用主键自增,而oracle使用序列
5. mysql使双引号包裹字符串,oracle只能使用单引号包裹
6. mysql 的分页比较简单,使用limit;来确定页数和每页的数量
而oracle比较繁琐,需要使用rownum来确定范围
7.空字符的处理,mysql 的非空字段也可以有空值

42 mybatis 和hebanate

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值