互联网java常见面试题

1.唯一索引与主键索引的比较

唯一索引
唯一索引不允许两行具有相同的索引值。
如果现有数据中存在重复的键值,则大多数数据库都不允许将新创建的唯一索引与表一起保存。当新数据将使表中的键值重复时,数据库也拒绝接受此数据。例如,如果在 employee 表中的职员姓氏(lname) 列上创建了唯一索引,则所有职员不能同姓。

主键索引
主键索引是唯一索引的特殊类型。
数据库表通常有一列或列组合,其值用来唯一标识表中的每一行。该列称为表的主键。
在数据库关系图中为表定义一个主键将自动创建主键索引,主键索引是唯一索引的特殊类型。主键索引要求主键中的每个值是唯一的。当在查询中使用主键索引时,它还允许快速访问数据。

它们的一些比较:
(1)对于主健/unique constraint , oracle/sql server/mysql等都会自动建立唯一索引;
(2)主键不一定只包含一个字段,所以如果你在主键的其中一个字段建唯一索引还是必要的;
(3)主健可作外健,唯一索引不可;
(4)主健不可为空,唯一索引可;
(5)主健也可是多个字段的组合;
(6)主键与唯一索引不同的是:
a.有not null属性;
b.每个表只能有一个。

2.java

1)HashMap  HashTable的区别

2)map的遍历

3)HashMap如何实现

4)垃圾回收机制

5)Throwable上还有基类么 Object

6)List容器中有100个元素,一个个删除

循环删除List数组容器里面元素

嗯,大部分都会遇到这个问题,定义一个List<T>数组,然后需要循环一下,删除其中一个元素,但会遇到类似问题:
java.util.ConcurrentModificationException
怎么办,实用主义者会把List数组转换成Iterator进行迭代删除,一点问题都没有:
 public static void main(String[] args) {
  List<Student> students = pareStudents();
  
  System.out.println("size : " + students.size());
  System.out.println(students);
  
  System.out.println("delete Student with name xiaoi");
  
  Iterator<Student>stuIter = students.iterator();
  
  while(stuIter.hasNext()){
   Student stu = stuIter.next();
   if(stu.getName().equals("xiaoi")){
    stuIter.remove();
   }
  }
  
  System.out.println("size : " + students.size());
  System.out.println(students);
 }

Iterator进行循环操作,然后删除,是很安全的。可以解决一些问题。但不要再使用Iterator的时候使用students.remove(stu),一样会给出 java.util.ConcurrentModificationException 错误。


另一个方法就是重新构建一个List,把原先的students 数组作为参数传递进去即可,虽然生成了一个全新的数组,但都是Student对象的引用,多个引用的地址数组而已。


 public static void main(String[] args) {
  List<Student> students = pareStudents();
  
  System.out.println("size : " + students.size());
  System.out.println(students);
  
  System.out.println("delete Student with name xiaoi");
  for(Student s : new ArrayList<Student>(students)){
   if(s.getName().equals("xiaoi")){
    students.remove(s);
   }
  }
  
  System.out.println("size : " + students.size());
  System.out.println(students);
 }

7)说说jvm
8)j vm性能调优

3.多线程

1)线程间共享数据的方式有哪几种,各自的优缺点

2)ThreadLocal

3)线程池具体是通过哪个类和哪些方法实现的,怎么实现的

4)多线程之间是如何通信的

4.设计模式

1)单例模式

2)动态代理

5.Spring

1)Ioc和AOP的理解

2)源码

3)Spring MVC页面渲染的几种方式

4)AOP基于什么设计模式实现的?具体说下cglib代理和jdk代理的区别,他们是怎么实现动态代理的,核心类和核心方法是什么

5)spring bean的几种状态

在Spring的Bean配置中,存在这样两种情况:

  1. <bean id="testManager" class="com.sw.TestManagerImpl" scope="singleton" />  
  2.   
  3.  <bean id="testManager" class="com.sw.TestManagerImpl" scope="prototype" />  

 

当然,scope的值不止这两种,还包括了request,session 等。但用的最多的还是singleton单态,prototype多态。

6)spring的缓存优化是怎么做的?如何清缓存,缓存哪里用到了,用他做什么?
7)hibernate的二级缓存
8)spring如何接手Hibernate的事务
9)spring的缓存优化,tomcat在哪设置缓存
10)使用spring初始化需要加载的东西,bean.dispatcherServlet,加载Html,spring的配置文件

6.NIO


7.redis

1)持久化

2)如果redis缓存宕掉了怎么办

8.项目

1)用哪些技术解决哪些难题?

9.

1)数据库优化方面的经验

2)搜索引擎的区别

3)oracle,mysql的区别

10.linux

1)过滤日志中的ip,并统计其个数

2)shell前100ip

3)linux性能优化

4)两个服务器之间拷贝文件的命令 scp

5)查出张三所有日志文件,并将其归档,求总数和

11、如果数据存的过程中突然出错怎么办?

12.数据量多大,你们做的系统如何保证数据安全

13.sql:求学生的总分数

14.如果系统已经部署上了,此时若出现数据出错怎么办?

15.如果死锁怎么查看?有这么多对象,先过滤哪些对象

16.

多台不同的机器(每台机器上部署相同的Java执行程序),同时读写同一个数据库中的同一张表,如何避免冲突?

1个MySQL数据库,其中有一张资源表(假设有1000条记录,每条记录代表1个资源,在这张表中,有一个Status字段,Status=0表示“待处理”,Status=1表示“正在处理”,Status=2表示“处理完成”),现在有5台机器,每台机器上部署相同的执行程序,每台机器做的事情就是 :
① 到这个数据库中,获取1条Status=0的记录,然后将Status置为1,
② 然后根据这条记录中提供的资源信息进行处理,
③ 处理完了之后,修改数据库中的这条记录的Status为2,表示“处理完毕”;
④ 重复①到③步,直到在这张表中找不到Status=0的记录为止。
请问如何实现?给设计方案也行。
(另外,弱弱地问一句:我的这个情况可以用Java多线程么,在多个不同机器之间进行互斥访问数据库?)
解决:
可以把java应用拆分出两种角色,一种是处理者(N个),一种是资源管理者(1个)。

处理者:专门做“ 根据这条记录中提供的资源信息进行处理”的工作。从资源管理者处取status为0的记录,处理之,处理完通知资源管理者。
资源管理者:管理一个消息队列,队列里是各个处理者发来的请求。一般分两种请求,取资源和完成某资源的处理。根据请求对数据表做相应操作,管理资源的状态。

这种情况下,因为只有资源管理者唯一接触数据库,不需要再考虑神马互斥访问的问题,数据库资源表也不需要加锁。处理者和资源管理者之间以消息通信。高效也易实现。(隔离可变性设计)
17.分布式缓存
18注解写个table
19.什么是平衡二叉树,如何保持平衡的




  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值