Java 面试系列(一)

210 阅读5分钟

Java的Comparable与Comparator接口

Comparable接口下只有一个方法 int compareTo(T o) 用于提供排序所需要的比较逻辑。 实现这个接口的类,其对象都可以通过调用Collections.sort()或者Arrays.sort()进行排序

Comparator是策略模式的一种实现,体现了将类和排序算法相分离的原则。

Java中TreeMap和HashMap区别

HashMap:

  • 它是一个基于哈希表的实现。 它扩展了AbstractMap类并实现了Map接口。 HashMap基于散列原理工作。遍历时,
  • 取得数据的顺序是完全随机的,
  • 最多只允许一条记录的键为Null;允许多条记录的值为 Null
  • 不支持线程的同步,如果需要同步,可以用 Collections的synchronizedMap方法使HashMap具有同步能力,或者使用ConcurrentHashMap

TreeMap:实现SortMap接口,它根据其键的自然顺序对其条目进行排序(升序),或者如果用户在构造时提供,则更好地使用比较器

REST中get与post区别

GET: 从服务器获取资源

  • GET请求标准上是幂等的(用户应该认为请求是安全的-资源不会被修改,这里所以说应该是服务器端并不保证资源不会被修改)
  • GET请求可以被浏览器缓存;响应也可以被缓存(根据缓存头信息来处理)
  • GET请求的数据都在URL中,可以方便都从浏览器中获取数据(因此不能携带诸如密码的明文数据)
  • GET请求的长度会有限制(比如IE的路径总长度需小于2048个字符)
  • GET请求的数据只能包含ASCII字符

POST: 发布新资源

  • POST请求标准上不是幂等的(用户应该认为请求是有副作用的-可能会导致资源修改)
  • POST请求URL可以被浏览器缓存,但是POST数据不会被缓存;响应可以被缓存(根据缓存头信息来处理)
  • POST请求没有长度限制,可以用来处理“请求数据”很大的场景(只要不超过服务器端的处理能力)
  • POST请求的数据不限于ASCII字符,可以包含二进制数据

spring与springMVC区别

Spring,一般指代的是Spring Framework,它是一个开源的应用程序框架,提供了一个简易的开发方式,通过这种开发方式,将避免那些可能致使代码变得繁杂混乱的大量的业务/工具对象,说的更通俗一点就是由框架来帮你管理这些对象,包括它的创建,销毁等,比如基于Spring的项目里经常能看到的Bean,它代表的就是由Spring管辖的对象。

Spring MVC是Spring的一部分,Spring 出来以后,大家觉得很好用,于是按照这种模式设计了一个 MVC框架(一些用Spring 解耦的组件),主要用于开发WEB应用和网络接口,它是Spring的一个模块,通过Dispatcher Servlet, ModelAndView 和 View Resolver,让应用开发变得很容易

HBASE rowkey设计

hbase 中的行是以 rowkey 的字典序排序的,这种设计优化了scan 操作,可以将相关的行以及会被一起读取的行存取在临近位置,便于 scan

rowkey是一个二进制码流,rowkey的长度被很多开发者建议说设计在10~100个字节,不过建议是越短越好,不要超过16个字节(64Kb)

rowkey 生成规则

  • 加盐: 在rowkey 的前面增加随机数。具体就是给 rowkey 分配一个随机前缀 以使得它和之前排序不同。分配的前缀种类数量应该和你想使数据分散到不同的 region 的数量一致。

  • 哈希 哈希会使同一行永远用同一个前缀加盐。哈希也可以使负载分散到整个集群,但是读却是可以预测的。使用确定的哈希可以让客户端重构完成的 rowkey,使用Get 操作获取正常的获取某一行数据。

  • 翻转时间戳 一个常见的数据库处理问题是快递获取数据的最近版本,使用翻转的时间戳作为rowkey的一部分对这个问题十分有用,可以将Long.MAX_VALUE - timestamp追加到key的末尾,例如:[key][reverse_timestamp]

Hbase 过滤器

CompareFilter: 是高层的抽象类

RowFilter,FamliyFilter,QualifierFilter,ValueFilter: 行,列组,列,值等的过滤

SingleColumnValueFilter: 单值过滤器是以特定“列”的“值”为过滤内容,值得是单列的值。而行值过滤器比较的是所有列的值。与其进行比较。

PrefixFilter: 前缀过滤器将会过滤掉不匹配的记录,过滤的对象是主键的值。

Java8 Stream

Java 8 中的 Stream 是对集合(Collection)对象功能的增强,它专注于对集合进行各种便利、高效的聚合操作(aggregate operation),或者大批量数据操作 (bulk data operation),Stream 不是一种数据结构,并不保存数据。

中间转换操作(节选)

  • map: 处理迭代过程中的每个元素,每个输入元素,都按照规则转换成为另外一个元素
  • flatMap: 与map的区别在于可以把多维集合压平成另一个Stream进行输出
  • filter: 如果返回 true ,元素被留下进行后续操作
  • distinct: 去重
  • peek: 与 map 的不同在于其没有返回值,可以处理每个元素,但是结果不会传递下去