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数组容器里面元素
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); }
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配置中,存在这样两种情况:
- <bean id="testManager" class="com.sw.TestManagerImpl" scope="singleton" />
- <bean id="testManager" class="com.sw.TestManagerImpl" scope="prototype" />
当然,scope的值不止这两种,还包括了request,session 等。但用的最多的还是singleton单态,prototype多态。
6)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条Status=0的记录,然后将Status置为1,
② 然后根据这条记录中提供的资源信息进行处理,
③ 处理完了之后,修改数据库中的这条记录的Status为2,表示“处理完毕”;
④ 重复①到③步,直到在这张表中找不到Status=0的记录为止。
请问如何实现?给设计方案也行。
(另外,弱弱地问一句:我的这个情况可以用Java多线程么,在多个不同机器之间进行互斥访问数据库?)
处理者:专门做“ 根据这条记录中提供的资源信息进行处理”的工作。从资源管理者处取status为0的记录,处理之,处理完通知资源管理者。
资源管理者:管理一个消息队列,队列里是各个处理者发来的请求。一般分两种请求,取资源和完成某资源的处理。根据请求对数据表做相应操作,管理资源的状态。
这种情况下,因为只有资源管理者唯一接触数据库,不需要再考虑神马互斥访问的问题,数据库资源表也不需要加锁。处理者和资源管理者之间以消息通信。高效也易实现。(隔离可变性设计)