一、JVM内存模型:
java虚拟机的内存结构分为堆和栈,堆里面存放是对象实例也就是new出来的对象。栈里面存放的是基本数据类型以及引用数据类型的地址。
对于所谓的常量是存储在方法区的常量池里面
二、内存泄漏和内存溢出
内存泄漏是指应用程序在申请内存后,无法释放已经申请的内存空间,一次内存泄漏危害可以忽略,但如果任其发展最终会导致内存溢出。
内存溢出是指应用程序在申请内存时,没有足够的内存空间供期使用。
三、单例
单例就是该类只能返回一个实例
单例所具备的特点:
(1)私有化的构造函数
(2)私有的静态全局变量
(3)公有的静态的方法
四、JavaSE JavaEE Java ME区别:
javaSE java standard Edition java标准版 主要用于桌面程序(Swing),控制台开发(mian程序)
java EE = java Enterprise Edition java企业版 用于企业级软件开发、网络开发、web开发
Java ME = java mobile Edition java移动版
五、报错的状态码
301 永久重定向 302 临时重定向 304 服务器端未改变 403 访问无权限 200 正常 404 路径错误
500内部错误
六JS
onready和onload的区别:
执行时间 window.onload必须等到页面内包括图片的所有元素加载完毕后才能执行。 $(document).ready()是DOM结构绘制完毕后就执行,不必等到加载完毕。
编写个数不同 window.onload不能同时编写多个,如果有多个window.onload方法,只会执行一个 $(document).ready()可以同时编写多个,并且都可以得到执行
简化写法 window.onload没有简化写法 $(document).ready(function(){})可以简写成$(function(){});
七、request跟session的区别
生命周期不同:request对应的是一次请求,session对应一次会话
request占用资源比较少,相对缺乏持续性,而session资源消耗比较大,所以通常使用request保存信息
八、请说明ArrayList是否会越界?
ArrayList是实现了基于动态数组的数据结构,而LinkedList是基于链表的数据结构
对于随机访问get和set,ArrayList要优于LinkedList,因为LinkedList要移动指针;
ArrayList并发add()可能出现数组越界的情况
九、如何保证线程安全?
通过合理的时间调度,避开共享资源的存取冲突
在并行任务设计上可以通过适当的策略,保证任务与任务之间不存在共享资源,设计规则来保证一个客户的计算工作和数据访问只会被一个线程或一台工作机完成,而不是把一个客户的计算工作分配给多个线程去完成
十、请你解释一下什么是线程池?
在面向对象编程中,创建和销魂对象是很浪费时间的,因为创建一个对象要获取内存资源或者其它更多资源
所以提高服务程序效率的一个手段就是尽可能减少创建销毁对象的次数,特别是一些很耗资源的对象创建和销魂。
线程池就是事先创建若干可执行的线程放入一个池中,需要的时候从池中获取线程不用自行创建,使用完毕不需要销毁线程而是放回池中,从而减少创建和销毁线程对象的开销。
十一、举例说明同步和异步
所谓同步就是阻塞式操作,而异步就是非阻塞式操作。
十二、请简述一下线程的sleep和yield方法有什么区别:
sleep()方法给其它线程运行机会时不会考虑线程的优先级,因此会给低优先级的线程以运行的机会,yield方法只会给相同或更高优先级的线程以运行的机会。
线程执行sleep()方法后转入阻塞状态,而yield方法后转入就绪状态
sleep方法声明抛出InterruptException。而yield方法没有声明任何异常
十三、suspend方法容易发生死锁。调用suspend的时候,目标线程会停下来,但却仍然持有在这之前获得的锁定。此时任何线程不能访问锁定的资源,除非被“挂起的线程”恢复运行。
join() 方法会使当前线程等待调用 join() 方法的线程结束后才能继续执行
共同学习,写下你的评论
评论加载中...
作者其他优质文章