Java学习索引

转载请注明出处,转载时请不要抹去原始链接,
我把我找到的资料,个人认为写得比较靠谱的贴出来,
基本上均为原文链接,如侵立删。

JAVA题目

常见的数据结构的特点、优缺点、实现原理,应用场景。

回答这类问题,一定要回归原点,回归该数据结构的底层实现,搞清它的构造方法,几个增删改查方法,无论谁和谁比,都很简单。

问题诸如:
1.xx的适用场景?/xx是否线程安全?/xx怎样保证线程安全?/ConcurrentHashMap和HashTable相比为什么更高效?
2.xx的扩容机制/xx的扩容阈值/hashMap的扩容在java 1.7 和1.8有什么不同?


java的基本数据类型,占几位?
http://www.cnblogs.com/doit8791/archive/2012/05/25/2517448.html

Java魔法堂:String.format详解
http://www.cnblogs.com/fsjohnhuang/p/4094777.html

Java byte 你必须要知道的相关问题
https://mp.weixin.qq.com/s/qZO3Z4aPBtJ21-WVCEgz3Q

Java 中 char 与 byte 相关知识点解析
https://mp.weixin.qq.com/s/PR7MkqCyEehmiwcul0ineg

数组array
http://cmsblogs.com/?p=92

http://cmsblogs.com/?p=94


Java 集合框架不再懵逼快速指南
https://mp.weixin.qq.com/s/dqEDvGNx6HYZwNyakEBMAw

列List

回答在何种场景选择何种list
http://cmsblogs.com/?p=1201

linkedList
http://wiki.jikexueyuan.com/project/java-collection/linkedlist.html

http://cmsblogs.com/?p=155

arrayList
http://wiki.jikexueyuan.com/project/java-collection/arraylist.html

http://cmsblogs.com/?p=108

vector
http://cmsblogs.com/?p=1180

stack
http://cmsblogs.com/?p=1190

我是一个“栈”
https://mp.weixin.qq.com/s/DWuIREoz4yrfxo1pbXSACg

copyOnWriteArrayList
http://www.cnblogs.com/skywang12345/p/3498483.html


表Map

map的小总结
http://cmsblogs.com/?p=1212)

*hashMap
搞懂 Java HashMap 源码

漫画:什么是HashMap?

漫画:高并发下的HashMap

图解HashMap(一)

图解HashMap(二)

*linkedHashMap
搞懂 Java LinkedHashMap 源码

concurrentHashMap
点击打开链接

漫画:什么是ConcurrentHashMap

图解ConcurrentHashMap

concurrentHashMap的扩容是个细节
concurrentHashMap的扩容,是
第一个执行的线程会首先设置sizeCtl属性为一个负值,然后执行transfer(tab,null),其他晚进来的线程会检查当前扩容是否已经完成,没完成则帮助其进行扩容,完成了则直接退出。

该ConcurrentHashMap的扩容操作可以允许多个线程并发进行,那么就要处理好任务的分配工作。每个线程获取一部分桶的迁移任务,如果当前线程的任务完成,查看是否还有未迁移的桶,若有则继续领取任务执行,若没有则退出。在退出时需要检查是否还有其他线程在参与迁移工作,如果有则自己什么也不做直接退出,如果没有了则执行最后的收尾工作。

几个策略

1。感知策略 sizeCtrl ,低16位存着 当前参与扩容的线程数+1,高16位存的是数组扩容前的容量信息。

有线程进来就 CAS ,sizeCtl+1,完成了就CAS -1

2.判断策略,有三个判断,判断是否需要加入线程来帮忙扩容。

  1. 处理策略,有点复杂,桶里的第一个元素为 forwardNode,,发现是这个元素就知道这里要做扩容。
    hashTable
    点击打开链接

treeMap
点击打开链接

sparseArray
https://www.jianshu.com/p/30a2bfb202b4


集Set

HashSet & LinkedHashSet
搞懂 HashSet & LinkedHashSet 源码以及集合常见面试题目

treeSet
点击打开链接


多线程,进程,高并发,java内存模型,jvm

这里单独写了一篇讲线程的
https://www.jianshu.com/p/fb07e8b77eb1


对象。

java的精髓就是对象,对象里可供展开的也不少。

1.面向对象编程有三大特性:封装、继承、多态
封装
http://cmsblogs.com/?p=41
继承
http://cmsblogs.com/?p=48
多态
http://cmsblogs.com/?p=52

类的加载
https://blog.csdn.net/briblue/article/details/54973413


2.Java 对象的生命周期
https://blog.csdn.net/sodino/article/details/38387049
讲到声明周期就一定会讲内存管理,就一定涉及到内存回收及内存泄露

什么是java的内存泄露?
https://www.ibm.com/developerworks/cn/java/l-JavaMemoryLeak/
其中举了两个例子,

obj2变成了无用不可达,没什么用处,且没有引用

当内存紧张的时候,就进行回收(这里可以拓展内存新生代,老年代,GC的知识,后续会讲)

而另一个例子


o指向的那个对象没有被回收

代码本意可能是 用完了对象o,就置空,等着回收,而实际上o是一个指针,指向了一个堆内存块new Object(),vector.add进去的就是这个堆内存块的指针,单独看这一段代码只能说明该内存块仍旧被vector引用,并没有出现泄露。

第二个例子引发的讨论
http://bbs.csdn.net/topics/330232357
其实代码贴全,后续代码会告诉我们,这个o就没有用到了,
v也不会用到它,所以应当回收o,但实际没有回收o,所以认为是泄露了
解决方案就是vector.remove(o)
怎么防止内存泄露?
http://blog.csdn.net/renfufei/article/details/14138099
说到的第1点就是上方例子,o没有被使用,但是依旧活着
1. 当心集合类,比如 HashMap,ArrayList等,因为这是最容易发生内存泄露的地方.当集合对象被声明为static时,他们的生命周期一般和整个应用程序一样长。
2. 注意事件监听和回调.当注册的监听器不再使用以后,如果没有被注销,那么很可能会发生内存泄露.
3. "当一个类自己管理其内存空间时,程序员应该注意内存泄露." 常常是一个对象的成员变量需要被置为null 时仍然指向其他对象,

讲白了泄露就是 对象处于无用可达的状态,无法被gc回收。
你写了一个单例,引用了某个activity的context,这个activity已经destroy了(无用),但是单例是static它的生命周期是application的生命周期没被回收,于是这个activity仍旧被单例引用(可达),最终gc无法回收context,gg,泄露。
这一篇是个大杂烩,讲了强弱软需引用,讲了内存老年代,先这样看着先。
http://blog.csdn.net/zhangerqing/article/details/8214365


3.对象之间的关系有哪些?
这里会涉及到 extends,implement,接口,抽象类,内部类,不可变类的概念及区别的问题。

回答这种题,正好复习UML图,结合UML图理解对象与对象之间的关系
https://blog.csdn.net/xiehuimx/article/details/53427452

接口和抽象类的区别/作用?
https://www.cnblogs.com/dolphin0520/p/3811437.html

各种内部类的概念/区别/作用?
https://blog.csdn.net/u010248330/article/details/52292214

Java内部类详解
https://www.jianshu.com/p/a20cac9e94ac

怎样获取Java匿名内部类持有的外部类对象
https://www.jianshu.com/p/9335c15c43cf

static关键字作用
http://cmsblogs.com/?p=61

从而进一步解释了enum为什么占内存
http://www.open-open.com/lib/view/open1462022872314.html
(static也是classLoader机制的一个重要组成,解释了为什么饿汉,enum线程安全)

不变类和可变类的概念
http://www.blogjava.net/hilor/articles/150610.html
讲了==和equals(还可以引申hashCode三者的区别)
final关键字的作用/意义http://cmsblogs.com/?p=80
其中最典型就是string为什么要设计成不可变类
http://cmsblogs.com/?p=863

以上链接有个题目,总结一下
String a = "fei";
String b = a + new String("ji");
可能创建几个string对象?
最多的情况,字符串常量池里啥都没有,所以新池里创建 fei,ji,feiji3个对象,然后加上堆内存new String("ji")共四个。
如果池里有fei,ji,feiji,则只有new String("ji")一个被创建,因为new一定要分配一个新的堆内存。
new String("ji")对象,里面的value指向了字符串常量池的ji
a和b实际上只是一个引用,并不是对象。
所以最少1个,最多4个

进一步会涉及到反射
把栈,堆,编译期,运行期了解一下
https://blog.csdn.net/wtxwd/article/details/52703640
反射的一些题目参考
https://www.jianshu.com/p/bc942e5c0399
再涉及到反射及反射的底层原理
http://blog.csdn.net/u012235132/article/details/45697307

序列化/反序列化的原理/意义/底层实现
http://blog.sina.com.cn/s/blog_4e345ce70100rt86.html
及其使用
http://www.cnblogs.com/chenfei0801/archive/2013/04/05/3001149.html
java对象的序列化与反序列化
https://mp.weixin.qq.com/s/QS9e_lVxr5vuphql5O3xhA

进一步设计到transient关键字
http://www.blogjava.net/fhtdy2004/archive/2009/06/20/286112.html

https://mp.weixin.qq.com/s/gRJarDyo8M9wZjHnAbQyDQ

注解
https://www.jianshu.com/p/948549b92e0a

https://blog.csdn.net/briblue/article/details/73824058

java内存管理/优化的学习是一个系列,参考
https://www.jianshu.com/p/5cbdb3d3d924


Android相关

整理了一份framework学习脑图
https://www.jianshu.com/p/1a333fa8e42d

view绘制
Android绘图技术详解,带你轻松绘出各种图形
http://blog.csdn.net/scott2017/article/details/51564308

自定义View
http://blog.csdn.net/huachao1001/article/details/51577291

http://blog.csdn.net/E_mKs/article/details/72951866
Android学习系列(40)--Android主题和样式之系统篇
http://www.cnblogs.com/qianxudetianxia/p/3996020.html

Android阴影颜色样式
https://www.aliyun.com/jiaocheng/3833.html

Android学好Shape不再依赖美工
http://blog.csdn.net/lovexjyong/article/details/22292753

ImageView的属性android:scaleType
http://www.cnblogs.com/yejiurui/archive/2013/02/25/2931767.html

animation动画--不过我建议用airBnb的开源库Lottie
http://www.360doc.com/content/13/0102/22/6541311_257754535.shtml

写给Android App开发人员看的Android底层知识http://www.cnblogs.com/Jax/p/6864103.html

dalvik虚拟机启动及运行原理的研究
https://mp.weixin.qq.com/s/v9goze52Z2XkrMxC7zL39w

Monkey测试简介
http://www.cnblogs.com/bixiaopeng/articles/2149904.html

android数据库的简单Demo(原生版+Google版)
https://www.jianshu.com/p/b5ff80941fab

android中的文件操作详解以及内部存储和外部存储
http://blog.csdn.net/androidwifi/article/details/17725989/

安卓基础之数据存储
http://blog.csdn.net/faith_boys/article/category/1416943

利用URLConnection来发送POST和GET请求
http://blog.csdn.net/iijse/article/details/6201101

IO 流涉及的设计模式相关面试题解析
https://mp.weixin.qq.com/s/-O0EyGzOZJU2vGz2Hxs-Ag


网络

单独整理到
《Android 网络学习索引》
https://www.jianshu.com/p/2100897f6670


数据库

ER图,数据库的基础题,常问的就是 学生选课系统的数据库,

结合看ER图 http://blog.csdn.net/shuxiao9058/article/details/7525447

第一范式第二范式第三范式是什么?https://www.zhihu.com/question/24696366

如何创建索引,优缺点http://www.aspku.com/database/mysql/179603.html


设计模式

23种设计模式,分4章,按顺序看吧http://blog.csdn.net/zhangerqing/article/details/8194653

设计模式选择的方式
http://www.lightskystreet.com/2016/11/23/design-summary/

MVP架构开发,一篇让你从看懂到会使用https://mp.weixin.qq.com/s/y4bYrYP59jTem9h2RYSS9g

你真的理解了MVC, MVP, MVVM吗?
https://mp.weixin.qq.com/s/apNpcWsB4ujiuqbIdsF-jg

Android MVC,MVP,MVVM模式入门——重构登陆注册功能http://www.cnblogs.com/Liang-Blog/p/5801414.html

算法相关

Android程序员面试会遇到的算法 part 1
https://mp.weixin.qq.com/s/msj314u5U2v5477cgkzojg

Android程序员面试会遇到的算法 part 2
https://mp.weixin.qq.com/s/d03jcMWY0zjxtw4KLmCxrw

排序算法有哪些?说说堆排序的实现原理,并推导他的时间复杂度。

二叉树相关,先序后序中序遍历。

点击打开链接

二叉树的广度遍历,深度遍历点击打开链接

伪代码实现点击打开链接

java图结构点击打开链接,图的广度优先、深度优先遍历点击打开链接

大根堆小根堆

一亿个数找最大一万个

消费者问题 点击打开链接

几个小算法题,可以练手点击打开链接

单链表反转点击打开链接,判断是否为对称链表点击打开链接

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,373评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,732评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 107,163评论 0 238
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,700评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,036评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,425评论 1 211
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,737评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,421评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,141评论 1 239
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,398评论 2 243
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,908评论 1 257
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,276评论 2 251
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,907评论 3 233
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,018评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,772评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,448评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,325评论 2 261

推荐阅读更多精彩内容