面试问题总结

来源:互联网 发布:android 内存管理源码 编辑:程序博客网 时间:2024/06/07 22:50

1.java7有什么新特性,使用过没?详解可参照:http://www.cnblogs.com/loveis/articles/2013311.html

  • 对集合类的语言支持
  • 自动资源管理
  • 改进的通用实例创建类型推断
  • 数字字面量下划线支持
  • switch中使用string
  • 二进制字面量
  • 简化可变参数方法调用

2.struct2最新的漏洞了解吗?

pache Struts2 作为世界上最流行的 Java Web 服务器框架之一,3 月 7 日带来了本年度第一个高危漏洞——CVE编号 CVE-2017-5638 。其原因是由于 Apache Struts2 的 Jakarta Multipart parser 插件存在远程代码执行漏洞,攻击者可以在使用该插件上传文件时,修改 HTTP 请求头中的 Content-Type 值来触发该漏洞,导致远程执行代码。

3.hashmap存储数据以后取出来的时候是按顺序取得吗?为什么?怎样才能按顺序取?

hashmap是散列映射,也就是它不会记录数据存储时的顺序,也就无法保证你取出时的顺序,为了解决这个问题,很简单采用LinkedHashMap或者是TreeMap即可,当然会造成一些额外开销,但并不影响什么。

4.了解treemap吗?可以讲一下它的特性吗?

TreeMap的实现是红黑树算法的实现,性能较好,插入删除容易,并且会记住插入顺序。
HashMap:适用于在Map中插入、删除和定位元素。
Treemap:适用于按自然顺序或自定义顺序遍历键(key)。

5.oracle如何实现分页查询?

伪列(pseudocolumn)ROWNUM 中包含有当前的行号。很多人在第一次试图返回表中中间某段记录子集时,都会发现下面这种方法行不通:

select * from all_objects where rownum between 30 and 49;

这种写法之所以行不通,是因为 ROWNUM 列只有在记录被取出或过滤时才会应用到记录上。第一行在被取出时会被抛出,因为它的 ROWNUM 是1。然后,下一行被取出;它也会被抛出,因为它是新的“1”,以此类推,直到所有的行都被使用。这个查询不会返回任何记录。解决方法是在看到30到50之间的记录时必须先取出1到30行的记录:

select * from all_objects where rownum <= 49;

然后,你可以将它作为一个子查询并过滤掉开始点之前的所有记录(注意我必须为“rownum”提供一个别名才能编译):

select * from (select rownumr,all_objects.* from all_objects where rownum <=
49) t
where t.r >= 30;

分页查询格式1
在查询的最外层控制分页的最小值和最大值。查询语句如下:

    SELECT * FROM       (      SELECT A.*, ROWNUM RN       FROM (SELECT * FROM TABLE_NAME) A       )      WHERE RN BETWEEN 21 AND 40  

分页查询格式2

    SELECT * FROM       (      SELECT A.*, ROWNUM RN       FROM (SELECT * FROM TABLE_NAME) A       WHERE ROWNUM <= 40      )      WHERE RN >= 21  

5.redis了解多少?

redis是一种key-value类型的数据库,即可作为普通数据库也可作为缓存数据库,Redis中可以使用expire命令设置一个键的生存时间,到时间后redis会自动删除它,过期时间可以设置为秒或者毫秒精度。可访问http://blog.csdn.net/u011204847/article/details/51302109了解
应用场景:

  • 限时的优惠活动信息
  • 网站数据缓存(对于一些需要定时更新的数据,例如:积分排行榜)
  • 手机验证码
  • 限制网站访客访问频率(例如:1分钟最多访问10次)

redis支持两种方式的持久化,可以单独使用或者结合起来使用。
第一种:RDB方式(redis默认的持久化方式)快照
第二种:AOF方式 日志

6.mamchche如何存储一个复杂的对象?

在Memcached中,我们经常将一些结构化的信息打包成hashmap,在客户端序列化后存储为一个字符串的值,比如用户的昵称、年龄、性别、积分等,这时候在需要修改其中某一项时,通常需要将所有值取出反序列化后,修改某一项的值,再序列化存储回去。这样不仅增大了开销,也不适用于一些可能并发操作的场合(比如两个并发的操作都需要修改积分)。而Redis的Hash结构可以使你像在数据库中Update一个属性一样只修改某一项属性值。

0 0