admin 管理员组文章数量: 1184232
2024年3月13日发(作者:数据库中的记录是什么意思)
JAVA相关基础知识
y,final,finalize
Finally: 释放资源(内存之外的,打开的文件、连接、屏幕上的图形,,)
①总会执行
②非后台线程结束,后台线程被强关,不会执行finally
③当try和catch中有return时,finally在return之后执行,但是返回值不
会改变(finally中不会改变已保存的返回结果)
④finally中最好不要包含return,否则程序会从finally中退出,返回值不是
try或catch中保存的返回值。
final:
基本数据类型:不可更改
类:不可继承
对象:引用不可变,对象内容可变
finalze:回收前调用,不适合用来清理或释放资源。对象免死最后机会!保证
会被调用,但不保证会执行完(在低优先级线程中执行)
2. 数据在各个网络层之间是怎么传输的?
数据在各层之间的单位都是不一样的,
在物理层数据的单位称为比特(bit);在数据链路层,数据的单位称为(frame);
在网络层,数据的单位称为数据包(packet);传输层,数据的单位称为数据
段(segment)。
3. Hashtable、HashMap
Hashtable 与 HashMap类似,但是主要有6点不同。
ble的方法是同步的,HashMap未经同步,如Vector和ArrayList一样。
ble不允许null,key和value都不可以,HashMap允许null值,key和value
都可以。HashMap允许 key值只能由一个null
ble有一个contains(Object value)功能和containsValue(Object value)功
能一样。
4.遍历的时候,HashTable使用Enumeration,HashMap使用Iterator。
ble中hash数组默认大小是11,增加的方式是 old*2+1。HashMap中hash
数组的默认大小是16,而且一定是2的指数。
6.哈希值的使用不同,HashTable直接使用对象的hashCode。
Hashtable继承自Dictionary类,实现了Map接口。而HashMap是继承自
AbstractMap,实现了Map接口。
4. GET,POST区别?
答: 基础知识:Http的请求格式如下。
问的资源(如),3、Http版本(http/1.1)
[
区别:
1、Get是从服务器端获取数据,Post则是向服务器端发送数据。
2、在客户端,Get方式通过URL提交数据,在URL地址栏可以看到请求消息,该消息被
编码过;Post数据则是放在Html header内提交。
3、对于Get方式,服务器端用tring获取变量的值;对用Post方式,服
务器端用获取提交的数据值。
4、Get方式提交的数据最多1024字节,而Post则没有限制。
5、Get方式提交的参数及参数值会在地址栏显示,不安全,而Post不会,比较安全。
5. 网游服务器用TCP还是UDP
UDP:多用,一个socket,加自己的可靠协议,延迟要求高
TCP:承载链接数多,500以上有压力,魔兽世界用TCP,1000延迟照样玩
HTTP/HTTPS:由客户端间歇性的发起无状态的查询,并且偶尔发生延迟是可以容忍
6. 关于JAVA内存模型,一个对象(两个属性,四个方法)实例化100次,现
在内存中的存储状态,几个对象,几个属性,几个方法。
答: 由于JAVA中new出来的对象都是放在堆中,所以如果要实例化100次,将在堆中
产生100个对象,一般对象与其中的属性、方法都属于一个整体,但如果属性和方法是静
态的,就是用static关键字声明的,那么属于类的属性和方法永远只在内存中存在一份。
7. 红黑树的好处、AVL 树
红黑树性质:
根节点是黑色的;非黑即红;叶节点(空节点)是黑色的;父节
点是红色的,则其孩子节点必须是黑色的;从某一个节点到叶节
点的所有路径,其黑色节点数目相同。
红黑树好处:
红黑树是许多“平衡的”查找树中的一种,它能保证在最坏情况 下,基本的动态集
合操作时间为 O(lgn)。
红黑树并不追求完全平衡,它只要求部分的达到平衡要求,降低 了对旋转的要求,
从而提高了性能。由于它的设计,任何不平衡
都会在三次旋转之内解决。
红黑树的算法时间复杂度和 AVL相同, 但统计性能比 AVL 树更高。
AVL 树明显比红黑树逻辑简单的多,但应用得少,应该是增删性能 差一点,增删时
需要旋转的次数可能比较多。
8. 数组和链表,遍历效率哪个高,为什么(cpu缓存与内存)
数组的效率高,因为数组是连续存储的,即内存地址是连续的,
所以在读取数组时,会将连续的内存地址的数据放入缓存中,所
以读取数组时相当于是从缓存读取。而链表遍历都是从内存读取,
缓存的读取速度要比内存块 100 倍左右。
9. 进程间通信, 怎么共享内存
i. 匿名管道:单向,只能用于具有亲缘关系的进程间通信,如父 子进程、兄弟进程等,
缓冲区大小有限制。
ii. 命名管道:单向,可以用在任意的两个不同的进程间通信。
iii. 信号量:主要用于同步。
iv. 共享内存:最快的 IPC 机制,一般和信号量一起使用。一个进程创建,其他进程
通过映射的形式,将共享内存加入到自己的
内存空间中。数据结构:shmid_ds,函数 shmget:可以创建或 打开一块共享内存。
v. 消息队列:是消息的链接表,有足够权限的进程可以向队列中 添加消息,被赋予读
权限的进程则可以读走队列中的消息。消
息队列克服了管道只能承载无格式字节流以及缓冲区大小受 限等缺点。
vi. Socket:更为一般的进程间通信机制,可用于不同机器之间的进程间通信。
10. Fork 进程时,继承那些:
继承:进程的资格、堆栈、环境、内存、打开文件的描述符、
执行时关闭标志、信号控制设定、nice 值、进程调度类别、进程 组号、
当前工作目录、根目录、资源限制、控制终端。
独有:进程号、不同的父进程号、自己的文件描述符和目 录流的拷贝、
子进程不继承父进程的进程,正文,数据和其他锁定内存、
在 tms 结构中的系统时间、资源使用设定为 0、阻塞信号集初始化为空集、
不继承由 timer_create 函数创建的计时器、不继承异步输入和输出。
11. 1000 个超大的文件,可能每一个都超过内存,怎么对他们进 行排序和消除
冲项,1 个超大怎么排序和消除重项。
读文件,计算hash(%10000),分成更小的文件,重复项肯定在一个文件里,
归并的时候去重
12. 2 个数组,一个超大数组(10w 记录),一个小一点,几千条, 问怎么找
交集。两个数组元素无重复
bitmap:bit数组,已bit代表一个数,1表示有,遍历大数组构造bit数组;遍历
小数组,看对应位置是否为1
13. StackOverFlow和OutOfMemory分别在什么情况下出现
StackOverFlow:一般情况下stack的默认值为128k~256k,
-Xss1024m
1.请求栈深度大于允许最大深度,如:深度循环递归
OutOfMemory:
1.
多线程环境下,能够创建的线程最大内存=物理内存-最大堆内存-最大方法区内存,
java虚拟机栈就会因为内存太小无法创建线程而产生OutOfMemoryError
2. 大的对象或数组,堆地方不够用
3. 运行时常量池(方法区)因无法再添加常量而产生OutOfMemoryError
4. 直接内存用光,堆与直接内存>物理内存
5. 虚拟机栈动态扩展时无法获得足够内存
14. java虚拟机模型
虚拟机栈:方法内存模型,一个方法一个栈帧,包括:局部变量表,操作数栈,动态链接,方法
出口,请求栈深度大于允许报StackOverFlow,动态扩展无法申请足够内存,包OOM。-xss设栈
容量默认256k?
局部变量表:所属对象引用,方法参数,局部变量(基本类型,引用)
版权声明:本文标题:java初级面试题 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/p/1710261436a564951.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论