https://blog.csdn.net/Roger_CoderLife/article/details/88311950
集合题
1.两个对象的 hashCode()相同,则 equals()也一定为 true,对吗?
不对。hashCode有可能冲突。
2.抽象类必须要有抽象方法吗?
不一定。
- Collection 和 Collections 有什么区别?
Collection是集合类的上级接口,继承与他有关的接口主要有List和Set
Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全等操作
4.如何决定使用 HashMap 还是 TreeMap?
TreeMap是有顺序的。
5.说一下 HashMap 的实现原理?
HashMap是有数组和链表组成的。
数组大小是2的n次方减1。根据key计算出它的hash,然后hash对数组大小取余,得到要放置的位置,然后放进去。然后数据该位置已经有值,就用头插法插进去。
6.说一下 HashSet 的实现原理?
就是将add的object,计算他的hash,放到指定的buck中,跟HashMap相比,只是没有value值。
7.ArrayList 和 LinkedList 的区别是什么?
ArrayList是动态数组,LinkedList是双向链表
8.如何实现数组和 List 之间的转换?
答:遍历数组,插入List。
错了!!
正确答案:
List转数组:toArray(arraylist.size()方法
数组转List:Arrays的asList(a)方法
9.ArrayList 和 Vector 的区别是什么?
答:是否加了同步控制
10.Array 和 ArrayList 有何区别?
答:Array数组长度是定的,ArrayList是动态数组。
11.在 Queue 中 poll()和 remove()有什么区别?
答:poll是同步阻塞的,remove是不阻塞的。
错错错!!!
poll()方法和remove()方法都是从队列中取出一个元素,但是poll()在获取失败的时候会返回空,remove()方法在获取数据失败的时候抛出异常
12.哪些集合类是线程安全的?
答:vector,hashtable,concurenceHashMap
13.迭代器 Iterator 是什么?
用来遍历的,包含hashnext,next等方法。
14.Iterator 怎么使用?有什么特点?
hashnext,next方法。特点。。。
15.Iterator 和 ListIterator 有什么区别?
ListIterator继承与Iterator,ListIterator只能用来编译list。
错一半:
总体来说ListIterator功能更强大,但是不通用。
16.怎么确保一个集合不能被修改?
加final关键字。
错!!!!
对集合使用Collections.unmodifiablexxx方法
多线程题
1.并行和并发有什么区别?
没有区别吧,都是多线程的意思。
大错特错!!
并发:在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程序在处理机上运行。
并行:在操作系统中,一组程序按独立异步的速度执行,无论从微观还是宏观,程序都是一起执行的。
2.线程和进程的区别?
进程内部可以多个线程,进程内部的线程数据同享。
3.守护线程是什么?
后台线程,用来监控另一个线程状态的。
4.创建线程有哪几种方式?
方式1:
Thread thread = new Thread(new Runnable());
thread.start();
方式2;
new Runnable().start
错了!!!没有方式2!!!
还有一种是写一个类继承与Thread,重写run方法
5.说一下 runnable 和 callable 有什么区别?
不清楚。
零分!!
callable可以获取子线程的返回信息!!
6.线程有哪些状态?
running,sleep,runable,waitting,stop
错了!!没有sleep状态
new ,runnable,running, block,dead 5种状态
7.sleep() 和 wait() 有什么区别?
sleep还持锁,wait就放弃锁。
8.notify()和 notifyAll()有什么区别?
notify是唤醒一个线程,可能导致死锁,notifyAll是唤醒所有线程。wait和nofity如何配合??
写个死锁的例子!!
https://blog.csdn.net/tayanxunhua/article/details/20998449
9.同步的英文怎么写?
synchronized
10.线程的 run()和 start()有什么区别?
run在主线程,start会新开一个线程
11.创建线程池有哪几种方式?
忘记API了。
零分!!!
有四种线程池:
singleThreadPool:单一现场的线程池
fixThreadPool :线程数量固定的线程池
cacheThreadPool:线程数量可动态变化的线程池
SchduleThreadPool:可以定时的线程池
12.线程池都有哪些状态?
空闲,开始,停止,满载
错了!!!!
Running、ShutDown、Stop、Tidying、Terminated
13.线程池中 submit()和 execute()方法有什么区别?
submit是提交认为,execute是启动线程池。
错了!!!!
submit有返回值
14.在 java 程序中怎么保证多线程的运行安全?
不知所云。
15.多线程锁的升级原理是什么?
偏向锁,轻量级锁,重量级锁,随着竞争的激烈会升级。
16.什么是死锁?
相互等锁,就是死锁。请手写一个死锁
17.怎么防止死锁?
不知所云
18.ThreadLocal 是什么?有哪些使用场景?
线程本地对象,每个线程都有一个备份,使用场景例如looper
19.说一下 synchronized 底层实现原理?
不知所云
20.synchronized 和 volatile 的区别是什么?
同步。volatile内存可见,防止指令重排序。
21.synchronized 和 Lock 有什么区别?
没什么区别。
零分!!!!
1.synchronized是内置关键字,lock是一个java类
2.Lock必需是lock和unlock同时。
3.Lock可以判断是否拿到锁,可以定时!!
22.synchronized 和 ReentrantLock 区别是什么?
可重入锁
23.说一下 atomic 的原理?
原子。说一下原理:主内存
android模拟面试:
https://blog.csdn.net/maiduoudo/article/details/79567242
2.android view绘制机制和加载过程,请详细说下整个流程
ViewRootImpl 执行performtraversal可以绘制,分别调用onLayout,OnMeasure,OnDraw进行绘制。
OnMeasure会返回父View给他的尺寸,和度量方法。
3.android四大组件的加载过程,请详细介绍下
Activity一般是用startActivity传入intent启动,Service可以使用bindService,StartService启动,Broadcast通过sendbroadcast启动,Provider在应用启动过程启动
6.Activity缓存方法
onSaveInstanceState保存数据,onRestoreInstanceState恢复数据
7.onDestory什么时候调用;Looper正在处理消息,在插入一条消息会怎样?
7.Service的生命周期,两种启动方法,有什么区别
oncreate,onStartCommand,onBind,onDestory
有两种启动方式,startService,bindService两种方式。
8.怎么保证service不被杀死
提供优先级;修改service为persist
9.静态的Broadcast 和动态的有什么区别
静态在AndroidManifest,动态在代码registBroadcast中注册
10.Intent可以传递哪些数据类型
基本数据类型和parcel数据类型都可以
11.Json有什么优劣势、解析的原理
完全不知道
12.一个语言的编译过程
语法解释,解释成字节码
13.动画有哪几类,各有什么特点
属性动画 补间动画等
【问题1】为什么连接的时候是三次握手,关闭的时候却是四次握手?
答:因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,"你发的FIN报文我收到了"。只有等到我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四步握手。
作者:青柚_
来源:CSDN
原文:https://blog.csdn.net/qq_38950316/article/details/81087809
版权声明:本文为博主原创文章,转载请附上博文链接!
【问题2】为什么TIME_WAIT状态需要经过2MSL(最大报文段生存时间)才能返回到CLOSE状态?
答:虽然按道理,四个报文都发送完毕,我们可以直接进入CLOSE状态了,但是我们必须假象网络是不可靠的,有可以最后一个ACK丢失。所以TIME_WAIT状态就是用来重发可能丢失的ACK报文。在Client发送出最后的ACK回复,但该ACK可能丢失。Server如果没有收到ACK,将不断重复发送FIN片段。所以Client不能立即关闭,它必须确认Server接收到了该ACK。Client会在发送出ACK之后进入到TIME_WAIT状态。Client会设置一个计时器,等待2MSL的时间。如果在该时间内再次收到FIN,那么Client会重发ACK并再次等待2MSL。所谓的2MSL是两倍的MSL(Maximum Segment Lifetime)。MSL指一个片段在网络中最大的存活时间,2MSL就是一个发送和一个回复所需的最大时间。如果直到2MSL,Client都没有再次收到FIN,那么Client推断ACK已经被成功接收,则结束TCP连接。
作者:青柚_
来源:CSDN
原文:https://blog.csdn.net/qq_38950316/article/details/81087809
版权声明:本文为博主原创文章,转载请附上博文链接!
【问题4】如果已经建立了连接,但是客户端突然出现故障了怎么办?
TCP还设有一个保活计时器,显然,客户端如果出现故障,服务器不能一直等下去,白白浪费资源。服务器每收到一次客户端的请求后都会重新复位这个计时器,时间通常是设置为2小时,若两小时还没有收到客户端的任何数据,服务器就会发送一个探测报文段,以后每隔75分钟发送一次。若一连发送10个探测报文仍然没反应,服务器就认为客户端出了故障,接着就关闭连接。
作者:青柚_
来源:CSDN
原文:https://blog.csdn.net/qq_38950316/article/details/81087809
版权声明:本文为博主原创文章,转载请附上博文链接!
10.Intent可以传递哪些数据类型
1.Serializable
2.charsequence: 主要用来传递String,char等
3.parcelable
4.Bundle
11.java int char long 各占多少字节
错!!char是两个字节!!!!
12.string stringbuffer和stringbuilder的区别
string追加字符串都会创建新的对象
stringbuffer是线程安全
stringbuild是线程不安全的
13.抽象类与接口的区别
1.修饰符,接口是public,抽象类是public或者protect
2.属性,接口的属性是public static final
3.方法,抽象类可以有具体的方法。接口的方法没有方法实现,是public abstract
参考:https://www.cnblogs.com/dolphin0520/p/3811437.html
14.泛型中? super T和? extends T的区别
extends T 代表T的子类,只能读不能写,因为可以按照T去读!!
super T代表T的父类,只能写,不能读,可以写T或者T的子类
参考:https://www.cnblogs.com/softidea/p/5280921.html
https://www.cnblogs.com/suxuan/p/4970467.html
15.lock()与lockInterruptibly()的区别
lockInteruptibly在等锁的过程中,然后被中断,就会进入中断异常。
https://gotowqj.iteye.com/blog/2103793
16.Activity-Window-View三者的差别
在Activity的attach方法中创建了phonewindow,在setcontentview的时候添加了decordview,WindowManagerGlobal中新建了一个ViewRootImpl,ViewRootImpl的setview方法会触发一次绘制。
17.fragment各种情况下的生命周期
18.java对象生命周期
创建阶段(Created)
应用阶段(In Use)
不可见阶段(Invisible)
不可达阶段(Unreachable)
收集阶段(Collected)
终结阶段(Finalized)
对象空间重分配阶段(De-allocated)
Android为什么引入Parcelable?
不需要反射,速度更快。
19.oom是否可以try catch
https://www.zhihu.com/question/54630917
20.一张Bitmap所占内存以及内存占用的计算
ARGB
长度*宽度*4
21.快速排序!!!!
思想:将数字分成大小对半!!!!
22.Service有onStop吗??
没有!!!!
23.HashMap的负载因子是什么??
用来判断扩容用的,如果hashmap数量大于容量*负载因子,就扩容!!!
14.Java 多线程文件读写操作怎么保证并发安全?
参考:https://www.jianshu.com/p/89cad15fff31
15.两个Activity之间跳转时必然会执行的是哪几个方法?
一般情况下比如说有两个activity,分别叫A,B。
当在A 里面激活B 组件的时候, A会调用onPause()方法,然后B调用onCreate() ,onStart(), onResume()。
这个时候B覆盖了A的窗体, A会调用onStop()方法。
如果B是个透明的窗口,或者是对话框的样式, 就不会调用A的onStop()方法。
如果B已经存在于Activity栈中,B就不会调用onCreate()方法。
作者:m_xiaoer
来源:CSDN
原文:https://blog.csdn.net/m_xiaoer/article/details/72881082
版权声明:本文为博主原创文章,转载请附上博文链接!
16.捕捉应用崩溃?
Thread.UncaughtExceptionHandler
17.java静态变量在哪个区?
1.程序计数器
2.java栈
3.本地方法栈
4.堆
5.方法区
18.模块化与组件化区别?
19.堆是什么?
完全二叉树,用数组表示。
20.Activity与fragment生命周期
21.https是什么
http与ssl协议的结合体。
服务器发送公钥给客户端,客户端生成一对密钥对,客户端用公钥对密钥对进行加密,传送到服务器。服务器用私钥解密出密钥对,然后进行通信!!
22.AQS是什么?
是一种排队的队列,对头获取到锁,处理完后,唤醒下一个节点处理。
23.git merge和git rebase区别
git merge如下图,会生成一笔新的提交,并且这个提交有两个parent。
24.git rebase是让分支回到从服务器拉取的点,然后将另一个分支的提交和本分支的本地提交打成一个个的patch,然后按时间顺序打回去。
25.c语言定义宏获取最大值?
define MAX(a,b) (a>b)?a:b
26.注解怎么用?
实际上是有一个类文件,通过反射获取到对象。
参考:
https://www.cnblogs.com/a591378955/p/8350499.html
思想篇:
https://blog.csdn.net/hsk256/article/details/51530667
27.sleep会放弃cpu资源吗?
会的。就是让cpu在多长时间内不分配时间片给她。
参考:http://blog.sina.com.cn/s/blog_91c0fdb50102v5yt.html
28.进程与线程的区别
1.进程是资源分配最小单位,线程是程序执行的最小单位。
2.进程独立地址空间
3.多进程更加健壮。
29.android的应用内多进程是怎样的?
就是产生了多个进程啊。
30.父进程和子进程如何通信
管道
31.多进程同时写一个文件会怎样?
用系统调用write方法没有问题。用fwrite,fwrite是用户空间,有缓存。
参考:https://blog.csdn.net/yangbodong22011/article/details/63064166/
32.进程调度算法有哪些?
先来先服务调度算法
短作业(进程)优先调度算法
高优先权优先调度算法
高响应比优先调度算法
时间片轮转法
多级反馈队列调度算法
33.frok与vfork区别
frok会复制数据与堆栈
vfork只会复制堆栈,且首先运行。
34.default与protected哪个更自由?
protected更自由,外包子类可以访问protected。
35.外部类可以用protected或者private修饰吗?
不能
36.外部类可以用static修饰吗?
不能。
37.嵌套接口怎么用?
嵌套的接口默认是public static
接口中的属性的默认是public static final 、方法是public abstract