(面试真题总结)帝都,Java,面试日活跃用户过百万app的一家app公司
Java中byte,short,char,int,float各占几个字节
Java8种基本数据类型(经常被问,要记牢)
整数类型:byte(1字节) short(2字节) int(4字节) long(8字节)
浮点类型:float(4字节) double(8字节)
字符类型:char(2字节)可以存储一个汉字
布尔类型:boolean
(JVM规范指出boolean当做int处理,也就是4字节,boolean数组当做byte数组处理,这样我们可以得出boolean类型占了单独使用是4个字节,在数组中是确定的1个字节)
如何将内容为整数的字符串解析为整数
Long.valueof()
关键字volatile的作用
不能保证原子性,只能保证可见性,有序性,我公号上对volatile的作用写的很清楚,绝对值得一看
String能否被继承,原因
不能,String类被final修饰
public final class String implements java.io.Serializable, Comparable<String>, CharSequence {
总结一下final关键字的作用
- final修饰类时,表明这个类不能被继承
- final修饰方法,表明方法不能被重写
- final修饰变量,如果是基本数据类型的变量,则其数值一旦在初始化之后便不能更改,如果是引用类型的变量,则在对其初始化之后便不能再让其指向另一个对象
ArrayLIst如何扩容
数组大小变为原来的1.5倍,将原来的内容复制到新数组,上源码
一个servlet被请求10次,会创建几个事例
只会创建一个实例
一般Servlet只初始化一次(只有一个实例)。对于更多的客户端请求,Server创建新的请求和响应对象,仍然**此Servlet的service()方法,将这两个对象作为参数传递给该方法。如此重复以上的循环,但无需再调用init()方法。
异常处理
最后输出9,很简单的一道题
列举Spring MVC常用注解和含义(常用)
@Controller
@RequestMapping
@Autowired
@ResponseBody
Mybatis中$和#的区别,哪个能防止SQL注入
$底层用的是Statement ,字符串拼接SQL,可能会有SQL注入
#底层用的是PreparedStatement,使用预编译语句,会防止SQL注入
Java线程生命周期图?
这个很重要,一定要多看看
列举你了解的JDK命令工具和JVM启动参数,并说明其用法
-Xmx4550m 最大可用内存为4550m
-Xmx4550m 启动时分配的内存为4550m
-Xss 每个线程分配的内存大小
varchar char的区别
char(10) ,当输入的是“abc”这三个字符时,占用的空间一样是10个字符,包括7个空字符
varchar(10),当输入的是“abc”这三个字符时,占用的空间是3个字符,额外1个或2个字符用来记录字符的长度
varchar省空间,char效率高
char还有的优点如下:
一,存储很短的信息,比如门牌号码101,201……这样很短的信息应该用char,因为varchar还要占个byte用于存储信息长度,本来打算节约存储的现在得不偿失。
二,固定长度的。比如使用uuid作为主键,那用char应该更合适。因为他固定长度,varchar动态根据长度的特性就消失了,而且还要占个长度信息。
三,十分频繁改变的column。因为varchar每次存储都要有额外的计算,得到长度等工作,如果一个非常频繁改变的,那就要有很多的精力用于计算,而这些对于char来说是不需要的。
主键和索引的区别
主键一定是唯一性索引,唯一性索引不一定就是主键
一个表中可以有多个索引,但只能有一个主键
主键列不允许为空值,索引列可以为空值
索引可以提高查询的速度
MySQL行锁和表锁的含义,并说明他们之间的区别
表锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突概率高,并发度最低
行锁:开销大,加锁慢,会出现死锁;锁定粒度小,发生冲突概率低,并发度高
页锁:开销和加锁速度介于表锁和行锁之间;会出现死锁;锁定粒度介于表锁和行锁之间,并发度一般
MySQL服务占用CPU 100%,如何排查问题
查询慢SQL日志,找到执行慢的SQL语句,排查错误
事务隔离级别有哪些?
未提交读
提交读
重复读
序列化
LeetCode原题,不太难,直接上代码
也是leetcode原题
将每个字符串排序一下,key=排序后的字符, value=原始的字符,放在map中即可
挺简单的一个SQL题,就不写了