Data Center笔试

来源:互联网 发布:淘宝买二手苹果靠谱吗 编辑:程序博客网 时间:2024/05/16 01:20

1个小时笔试

1. JSPServlet的区别

JSP的优点是擅长于网页制作,生成动态页面,比较直观。JSP的缺点是不容易跟踪与 排错。 

Servlet是纯Java语言,擅长于处理流程和业务逻辑。Servlet的缺点是生成动态网页不 直观。 

2. JQuery +HTML+JS, 实现点击按钮,显示图片

3. 使用过的数据库,MySQL, Oracle, 比较应用场景和好处

4. 解释Hibernate中悲观锁和乐观锁。做过的项目中如何处理并发, 批处理?

Hibernate中乐观锁和悲观锁的实现:

悲观锁:依靠数据库提供的锁机制。

乐观锁:基于数据版本(Version)记录机制实现。何谓数据版本?即为数据增加一个版本标识,在基于数据库表的版本解决方案中,一般是通过为数 据库表增加一个“version”字段来实现。读取出数据时,将此版本号一同读出,之后更新时,对此版本号加一。此时,将提交数据的版本数据与数据库表对 应记录的当前版本信息进行比对,如果提交的数据版本号大于数据库表当前版本号,则予以更新,否则认为是过期数据。 

Hibernate的加锁模式有: 
LockMode.NONE : 无锁机制。 
LockMode.WRITE HibernateInsertUpdate记录的时候会自动 
获取。 
LockMode.READ : Hibernate在读取记录的时候会自动获取。 
以上这三种锁机制一般由Hibernate内部使用,如Hibernate为了保证Update 
过程中对象不会被外界修改,会在save方法实现中自动为目标对象加上WRITE锁。 
LockMode.UPGRADE :利用数据库的for update子句加锁。 
LockMode. UPGRADE_NOWAIT Oracle的特定实现,利用Oraclefor update nowait子句实现加锁。

Hibernate的悲观锁,也是基于数据库的锁机制实现。 下面的代码实现了对查询记录的加锁: 

1String hqlStr = "from TUser as user where user.name=’Erica’"; 
2Query query = session.createQuery(hqlStr); 
3query.setLockMode("user",LockMode.UPGRADE); //加锁 
4 List userList = query.list();//执行查询,

获取数据 query.setLockMode 对查询语句中特定别名所对应的记录进行加锁(我们为 TUser类指定了一个别名“user”),这里也就是对返回的所有user记录进行加锁。 观察运行期Hibernate生成的SQL语句: 

1select tuser0_.id as id, tuser0_.name as name, tuser0_.group_id as group_id, tuser0_.user_type as user_type, tuser0_.sex as sex from t_user tuser0_ where (tuser0_.name=’Erica’ ) for update

 这里Hibernate通过使用数据库的for update子句实现了悲观锁机制。

上面这两种锁机制是我们在应用层较为常用的,加锁一般通过以下方法实现: 
Criteria.setLockMode 
Query.setLockMode 
Session.lock 
注意,只有在查询开始之前(也就是Hiberate 生成SQL 之前)设定加锁,才会 真正通过数据库的锁机制进行加锁处理,否则,数据已经通过不包含for update 子句的Select SQL加载进来,所谓数据库加锁也就无从谈起。

Hibernate使用乐观锁的步骤:

1. 定义首先为TUserclass描述符添加optimistic-lock属性: 

2. 添加一个Version属性描述符。version 节点必须出现在ID 节点之后。

代码内容

1Criteria criteria = session.createCriteria(TUser.class);  
2criteria.add(Expression.eq("name","Erica"));  
3List userList = criteria.list();  
4TUser user =(TUser)userList.get(0);  
5Transaction tx = session.beginTransaction();  
6user.setUserType(1); //更新UserType字段  
7 tx.commit();   

每次对TUser进行更新的时候,我们可以发现,数据库中的version都在递增。

参考:http://www.blogjava.net/baoyaer/articles/203445.html 

5. 解释MemcacheRedis的不同,使用过两种缓存系统吗,还了解其他缓存系统吗。针对一个项目,如何选择缓存系统?

6. 解释Python中的深拷贝和浅拷贝,在JavaC中有没有类似的实现?

7. 写一条简单的SQL语句,查询出按总分降序排序的学号、姓名和总分。

8. 32位机子,union{ int i; char a[2]}A ; 如果A.a[1] = 18 a[0]=1, A.i = 

9. X = 1; y =2; k =3;  k*=x+y; k最终为多少?

10. 在Linux系统中查询cpu状态、内存占用情况的命令?

11. Linux中用shell写查询本机ip的方法?或者将 当前文件夹下 文件大小 小于1k的文件全部移动到指定的文件夹。

12. 介绍一下项目使用过的设计模式,并画出类图。解释应用场景和好处。

a) 装饰器模式

b) 简单工厂

c) 抽象工厂

d) 监听模式

e) 原型模式

f) 单例模式

13. 用Python, PHP或者Java等实现单例模式。

14. 实现将字符串倒置,不另外分配空间。使用了C和指针实现。

15. 在C++中引入C编译后的代码,为什么加入extern C的符号。为了正确识别编译格式。

16. C语言函数中对指针赋值,申请变量是不正确的,main在函数调用接受内存内容被释放。

17. 解释 对象存储,文件存储,块存储的区别?

18. TCP/IP连接建立的过程

19. 解释MVC模式,介绍一种MVC模式的实现。

0 0
原创粉丝点击