java

java8:

https://lingcoder.github.io/OnJava8/#/sidebar

 

集合框架/并发/算法和数据结构

面试准备:https://blog.csdn.net/qq_35190492/article/details/103795708

 

开源框架:
spring 
dubbo  rpc IO/NIO
数据库db hibernate
redis
MQ
ZK
 

面试准备:https://www.jianshu.com/p/11578fd6e272

 

排序:

https://blog.csdn.net/liang_gu/article/details/80627548

https://blog.csdn.net/weixin_40596016/article/details/79711682

 

https://www.cnblogs.com/java1024/p/7685400.html

https://www.cnblogs.com/ysocean/p/6555373.html

http://www.cnblogs.com/mengfanrong/p/5079533.html

1.泛型

泛型就是类型化参数,包含泛型类,泛型接口,泛型方法。

静态方法不能使用泛型类中的变量,使用泛型方法。

object   T  ?对比,

object 和T都是参数化类型,?通配符是实参类型,object代表任意类型,T代表具体的一种类型,也可以代表object。

  1. Object范围非常广,而T从一开始就会限定这个类型(包括它可以限定类型为Object)。
  2. Object由于它是所有类的父类,所以会强制类型转换,而T从一开始在编码时(注意是在写代码时)就限定了某种具体类型,所以它不用强制类型转换。(之所以要强调在写代码时是因为泛型在虚拟机中会被JVM擦除掉它的具体类型信息,这点可参考泛型,在这里不做引申)。

https://www.cnblogs.com/coprince/p/8603492.html

https://www.cnblogs.com/c-c-c-c/p/9176464.html

 

2.三次握手,四次握手

https://blog.csdn.net/csdnnews/article/details/86570658

 

 

3.java集合类图

集合类图:http://www.cnblogs.com/mengfanrong/p/5079533.html

底层实现:https://blog.csdn.net/qq_25868207/article/details/55259978

框架详解:https://www.cnblogs.com/CarpenterLee/category/828184.html

hashmap和linkedhashmap比较:https://www.cnblogs.com/jijijiefang/articles/7189837.html

 

hashmap和hashset使用哈希表提高查询效率,针对hash表的hash算法和冲突后的处理

https://www.cnblogs.com/guweiwei/p/6945700.html

 

 

tree数据结构:

https://blog.csdn.net/AllenWells/article/details/77855045

http://blog.jobbole.com/111680/

对树的理解:

二叉树,本质上,是对链表和数组的一个折中。。
比如,我有一个任务,需要输入 
10万个数据(32位整数),然后有两个操作:
1.添加(删除)一个整数。
2.询问第x大的数据。

比如,我给你 1, 8, 13, 10(等等一堆数据).......
然后我询问第3大的数据,
然后我插入 18
然后我询问第4大的数据
我再插入 9
我再询问第2大的数据

不停的重复1,2
重复10万次。。

应该如何实现。
你会发现,用有序链表,不行,查找(包括1需要找到对应位置,以及2查找)成本大O(N),但具体这个插入操作成本小O(1)。
用有序数组,查找(2的查找)成本小O(1)。但1的插入操作成本很大O(N)。

所以,我们折中使用排序二叉树(二叉树仅仅作为排序二叉树的基础),查找(包括1需要找到对应位置,以及2查找)成本挺小O(logN)。具体这个插入操作成本也挺小O(logN)。

具体的应用就是由排序二叉树(由于普通排序二叉树可能会有不平衡的情况)引申出来的红黑树(linux中ext3文件系统管理),avl树“windows对进程地址空间的管理”。

 


建立在如下推论上:假定把数组看成N叉树,那么链表就是1叉树,由于数组只有1层,二叉树有logN层,而链表有N层,"logN对1" 以及 "N对logN" 都是 无限大的关系。。。相当于我们在1 ~ N之间找了一个logN作为两者的折中。。。。。。
进一步的脑洞是,如果我们是a叉树,那么结果就是log(a)N = \frac{log(2)N}{log(2)a}层,但
考虑分母部分。

  • a = 1时,log(2)1 = 0
  • a = 2时,log(2)2 = 1
  • a = N时,log(2)N = N

恰好构成了 0, 1, N的三个经典数字。。。。
查找和插入一共所需的次数可以简化为:每层数量+总层数 = a + \frac{log(2)N}{log(2)a} 当a是大于等于1的整数时,a取2是最划算的。。。所以综合以上推断,个人得出,"二叉树,本质上,是对链表和数组的一个折中"。 这对于查找和插入是类似1:1(同一数量级)的需求,用二叉树(排序二叉树等)是很划算的。如果不是同一数量级可以考虑,增大a或者减少a,具体问题具体分析,这是个工程问题。得考虑编码难度,算法常数,可维护性等多方面需求。不再一一分析

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值