comparable&Comparator的区别
对于需要排序的集合或者数组不是单纯数字型时,通常可以使用comparator或者comparble,以简单的方式实现对象排序或者自定义排序。
Comparator强行对某个对象collection进行整体排序的比较函数,可以将comparator传递给collections.sort。一个类实现了Comparatable接口则表明这个类的对象之间是可以相互比较的,这个类对象组成的结合就可以直接使用sort方法排序。
Java 6中使用的是mergeSort,而在java 7中,内部实现换成TimSort,而对对象间比较的实现要求更加严格。
Timsort属于稳定的排序算法,最大的特点是充分利用数组中已经存在的顺序。
foreach依赖Ienumerable ,for依靠下标定位。在固定长度或者长度不需要计算的时候for效率高;在不确定长度或计算有性能损耗的时候用foreach; 使用foreach会锁定集合中的对象,期间不能修改。
采用BigDecimal(String val)
都实现了map接口,主要区别线程安全性、同步(synchoronization)、速度。现在多线程可以采用ConcurrentHashMap,其采用锁分段技术
HashMap的迭代器为Iterator,HashTable的迭代器是Enumerator不是fail-fast,当有其他线程改变hashMap的结构(增加或者移除元素)会抛出ConcurrentModificationException
Map.Entry\Bucket
hashing的概念
HashMap中解决碰撞的方法,hashCode返回相同出现碰撞,尽量使用String、int不可变类
equals和hashCode的应用及其重要性
不可变对象的好处
HashMap多线程的条件竞争
重新调整HashMap的大小
参考文章www.importnew.com/7099.html
netty\mina
1. 种类及其区别
2. 使用场景
3. 实现原理和线程调度过程
4. 如何优化、调优
5. 最大线程数目根据什么调整
mutex 互斥
悲观锁、乐观锁
ThreadLocal线程变量副本,在Spring中管理Request作用域中的Bean、事务管理、任务调度、AOP等模块都有出现。
1. controller是单例还是多例?如何保证并发的安全。
配置、熔断、路由等
一致性:相互独立的节点之间如何达成一项决议的问题。常见的一致性问题:数据库事务提交、leader选举、序列号生成等
一致性需要满足的条件:agreement全认同;validity 值合法;termination 可结束;asynchronous 消息传递异步无序;fail-stop 节点宕机;fail-recover 节点宕机恢复;network-partition 网络分化,网络出现问题,将N个节点隔离成多个部分;byzntine failure 拜占庭将军问题,不按套路出牌抛出干扰决议的信息。
election选举是分布式系统实践中常见的问题,通过打破节点之间的对等关系,选的leader(Master\cordinator)有助于实现事务的原子性、提升决议效率。
多数派quorum是在网络分化的情况下达成决议一致性,在leader选举的场景下帮助我们选出唯一的leader。
租约(lease)在一定期限内给予节点特定权利,也可以实现leader选举,保证在一个时刻最多只有一个leader。为了避免在选举的时候只使用心跳机制会由于网络拥塞或者瞬断出现双主的问题。lease最初提出用于解决分布式缓存一致性问题,后在分布式锁等多方面都有引用
选举bully算法
consistency 数据一致性 ;所有的读都读取到最新的数据,又称为原子性atomic 、线性一致性 linearizable。
availability 服务可用性 ; 所有读写请求在一定时间内得到响应,可终止、不会一直等待
partition-tolerance分区容错性;在网络分区的情况下,被分隔的节点仍能正常对外服务
paxos、raft、ZAB
Raft 将问题分解和具体化,leader统一处理变更操作请求,一致性协议的作用具化为保证节点操作日志副本(log replication)一致,以term作为逻辑时钟保证时序,节点运行相同状态机得到一致结果。
ZAB zookerper的内部用到的一致性协议,保证强一致性。
paxos协议在节点宕机、消息无序或丢失、网络分化的场景下保证决议的一致性协议。
将节点分为两类,proposer 申请人、提案人,参与决议的为acceptor。learner、leader
1. 适用场景
2. 都有哪些MQ,区别是什么
3. 如何保证数据不丢失
4. MQ的连接是线程安全的吗?
memcached ehcached redis
分布式协调技术。
1. 数据模型Znode
2. 适用场景
分布式锁服务、配置维护、组服务、分布式消息队列、分布式通知/协调
3. 原理
4. watch机制
1. 数据库的分库分表策略
2. 如何解决全表查询问题
1. 并发竞争如何解决?
2. Redis事务的CAS
3. 缓存穿透的解决办法
myISAM 索引方式为非聚集
innoDB
区别:
MyISAM的索引文件和数据文件是分离的,索引文件保存数据记录的地址。InnoDB中标数据文件本身就是按照B+tree组织的索引结构,在叶节点data保存了完整的数据记录,索引的key就是主键。所以MyISAM可以无主键innoDB必须有主键。
与MYISAM索引不同的是INNODB辅助索引data域存储相应记录主键的值而不是地址,所以检索需要两遍索引。因为所有辅助索引都引用主索引,过长的主索引令辅助索引变得过大。另外使用非单调的主键会造成插入新纪录的数据文件为了维持B+tree的特性而频繁的分裂调整。
索引是帮助MYSQL高效获取数据的数据结构。索引的数据结构,常用的B+tree,每个叶子节点不但存放了索引键的相关信息还添加了相邻叶子节点的指针。
B-tree/B+tree
主存存取原理(通过随机读写RAM,通过地址总线与数据总线读写,不存在机械操作)
磁盘存取原理(磁盘IO存在机械运动损耗)
局部性原理与预读(或读取一页或多页【4k】的数据到主存)
详见:http://blog.jobbole.com/24006
myISAM与innoDB都采用B+tree的索引数据结构,但是实现不相同。
MYSql的优化分为结构优化和查询优化。必须做好4项工作:数据库设计、sql语句优化、数据库参数配置、恰当的硬件资源和操作系统。
结构优化中高性能索引策略
explain 查看时cardinality 索引基数
select_type simple不包括union或子查询;primary 一个需要union或者包含子查询的select。
type查询使用的类型,type=const表示通过索引一次就找到了;type=all表示为全表索引;type=rel 认为多个匹配行,联合索引。顺序:
system>const>eq_ref>ref>fulltext>ref_or_null>index_merge>unique_subquery>index_subquery>range>index>ALL一般来说至少range最好是ref
possible_keys 使用哪个索引找到的行 如果为空,则没有相关的索引
key 显示使用的键,如果没有索引为nul.key=primary表示使用了主键;key=null 表示没有用到索引
key_len 显示使用键的长度
rows 遍历了多少行找到的,但是innodb不准确
extra only index 意味只用到索引树。whereused 使用上了where限制。impossible where 标识用不着where,一般就是没有查询出什么来。
1. 最左前缀原理
配置my.ini
long_query_time=1
log-show-queries=路径