这个是最近看到的面试题,很多俺还没有学到先码住,万一有大佬帮忙回答了
1、学了哪些课程?选一个你最熟悉的,给我们介绍一下
2、数据库隔离级别
4个 读已提交,读未提交,可重复读,串行化。
但是肯定不是这么简单,然后想到和多事物并发有关
介绍了多事物并发的问题
(1)脏读:事务1更新了记录,但没有提交,事务2读取了更新后的行,然后事务T1回滚,现在事物T2读取无效。
(2)不可重复读:事务1读取记录时,事务2更新了记录并提交,事务1再次读取时可以看到事务2修改后的记录;
(3)幻读:事务1读取记录时事务2增加了记录并提交,事务1再次读取时可以看到事务2新增的记录;
读未提交会产生脏读,不可重复读,幻读
事例:老板要给员工发工资,员工工资是3.6万/月。但是发工资时老板不小心按错了数字,按成3.9万/月,该钱已经打到员工的户口,但是事务还没有提交,就在这时,员工去查看自己这个月的工资,发现比往常多了3千元,以为涨工资了非常高兴。但是老板及时发现了不对,马上回滚差点就提交了的事务,将数字改成3.6万再提交。
分析:实际员工这个月的工资还是3.6万,但是他看到的是3.9万。他看到的是老板还没提交事务时的数据。这就是脏读。因此,在这种隔离级别下,查询是不会加锁的,也由于查询的不加锁,所以这种隔离级别的一致性是最差的,可能会产生“脏读”、“不可重复读”、“幻读”。如无特殊情况,基本是不会使用这种隔离级别的。
那怎么解决脏读呢?已读提交,能解决脏读问题
读已提交会有不可重复读,幻读
可重复读会产生幻读
3、介绍一下你的项目,包括功能、怎么实现的、有哪些问题
这个问题,就可以扯一些高大上的内容
4、AOP
spring里面的,提高代码可重用,更简单,高效,便捷
5、重写和重载
重写,是子类重写父类的方法
重载,定义相同的方法名,参数不一样
6、static,静态能调用非静态吗?如果硬要调用呢?
不能,new
7、事务的注解
8、SQL优化
9、索引用什么实现的
10、介绍三次握手,为什么两次不行
11、HTTP和HTTPS有什么不同
12、你是怎么理解并发和多线程的,整体介绍一下
13、前端技术有点落后,要了解一些最新的技术、框架
14.web系统包含了哪些功能
15.学生项目用的JSP、SSM技术比较老旧了,项目中遇到了哪些困难怎么解决的
16、排序
冒泡:
比较相邻的元素。如果第一个比第二个大,就交换他们两个。
对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数
针对所有的元素重复以上的步骤,除了最后一个。
持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
```//假设数组为 a 实际我们只需要执行 a.length - 1 次排序
for(int i=0;i<a.length-1;i++){
for(int j=0;j<a.length-1;j++){
//相邻数进行比较,符合条件进行替换
if(a[j]>a[j+1]){
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
快速排序
``` 定义数组,主元假设arr[l]
sp=i+1;right=右边。
在左边《右边,如果当前sp对应值小于主元,sp++;
否则,交换sp和right对应值,然后right--;
public int pv(int[]arr,int l,int r){
int p=arr[l];//左边是主元
int sp=l+1;//左边位置
int right=r;
while(sp<=right){
if(arr[sp]<=p){
sp++;
}else{
swap(arr,sp,right);
right--;
}
}swap(arr,l,right);
return right;
}
/**
* 递归调用单向扫描方法
*/
public void quickSort(int[] arr, int l, int r) {
if (l < r) {
int q = pv(arr, l, r);
quickSort(arr, l, q - 1);
quickSort(arr, q + 1, r);
}
}
/**
* 输出数组内容
*/
public void showArray(int[] a){
for (int a1 : a) {
System.out.print(a1+" ");
}
}
}
/*
也可以递归调用双向扫描
/**
//核心代码
public int pv(int[]arr,int l,int r){
int p=arr[l];
int left=l+1;
int right=r;
while (left <= right) {
// left向右走,直到遇见大于主元的元素
if(arr[left]<=p){
left++;
}
// right向左走,直到遇见小于或等于主元的元素
if(arr[right]>p){
right--;
}
if(left<right){
swap(arr, left, right);
}
}
swap(arr, l, right);
return right;
}
* 递归调用双指针扫描方法
*/
public void quickSort(int[] arr, int l, int r) {
if (l < r) {
int q = pv(arr, l, r);
quickSort(arr, l, q - 1);
quickSort(arr, q + 1, r);
}
}
*/
17.问了算法