面试题

it2025-04-28  9

Linux

面试题1: 请简述top和ps的区别: Top和ps都是linux用来查看进程的命令。ps是静态查看,top是动态查看进程。

ps一般用来查看是否启用哪个进程,top用来监控机子是否处于工作状态,ps有多少个显

示多少个进程


面试题2:请简述cat和tail -f 的区别 用来查看文件内容的,cat静态的。 Tail动态的,当数据发生变化立即回到控制台


面试题3: Linux下jdk的安装配置(CentOS) 1、如果要使用开源的open-jdk,请安装open-jdk 如果不使用open-jdk,请先卸载 2、如果安装Oracle公司的jdk,那么请先卸载jdk 如果使用的是.rpm包,则直接安装即可,什么配置都不需要 rpm -ivh jdk1.8xxxx.rpm

如果使用tar包安装(店家推荐) 1、解压tar 2、进行环境变量的配置(重要,必须掌握) 如果需要配置成用户级别的环境变量(不推荐) 在这里配置:vim ~/.bash_profile 一般建议配置成系统级别的: vim /etc/profile 在最后添加如下代码: export JAVA_HOME=java的主目录 export PATH=${PATH}:$JAVA_HOME/bin 保存退出 重启:source /etc/profile 3、测试是否成功 java -version javac -version

window下的jdk安装:下一步 下一步 配置问题: JAVA_HOME=java的主目录 path追加 path = path;%JAVA_HOME%/bin


面试题4: 请使用两种方式求单个字符’斌’的Unicode码 思路: char a = ‘斌’;

a + 1 - 1

答案: public class mianshiti { public static void main (String[] args) { char a = ‘斌’; //使用自动类型转换 int res = a + 1 - 1; System.out.println(res) ; int res2 = (int) a ; System.out.println(res2) ; } }

Java

面试题1: 在类的成员: 成员变量 成员方法 构造函数 构造代码块 静态代码块 (被static修饰的最早被加载,且按照顺序

走) 在类中,当初始化一个类的实例时,首先被加载的是 静态代码块(若是静态属性的话,按

照先后顺序走), 之后是属性,下来是构造代码块,最后是构造函数


面试题2: 请解释final finally finalize 三者的作用和区别 final 申明类的,

finalize(); //是object提供的方法,该方法在对象被垃圾机制回收前,最后

被触发 System.gc(); //手动调用垃圾回收机制

finally://一定执行的代码块 //不管是否存在异常,finally内的代码块一定会执行 //资源释放等工作在finally

面试题3: 在函数中,如果finally之前,遇到了return关键字,代码如何执行?会直接返

回还是执行完finally中的代码在返回?

答:try 中的 return 语句调用的函数先于 finally 中调用的函数执行,也就是说 try

中的 return 语句先执行,finally 语句后执行, 但try中的 return 并不是让函数马上返回结果,而是 return 语句执行后,将把返回结

果放置进函数栈中, 此时函数并不是马上返回,它要执行 finally 语句后才真正开始返回。但此时会出现两

种情况: ① 如果finally中也有return,则会直接返回finally中的return结果,并终止程序,函

数栈中的return不会被完成 ② 如果finally中没有return,则在执行完finally中的代码之后,会将函数栈中保存的

try return的内容返回并终止程序

注意:

1、不管有没有出现异常,finally块中代码都会执行 2、当try和catch中有return时,finally仍然会执行 3、finally是在try中return后面的表达式运算后执行的(此时并没有返回运算后的值,

而是先把要返回的值保存起来, 不管finally中的代码怎么样,返回的值都不会改变,仍然是之前保存的值),所以函数

返回值是在finally执行前确定的 4、finally中最好不要包含return,否则程序会提前退出,返回值不是try或catch中保存

的返回值


面试题4: 字符串存储的位置问题? 字符串存储在运行时常量池中

在jdk1.8之前 字符串存储在 方法区(method area),方法区一般是存储常量

的地方 在jdk1.8及其以后,字符串存储在 堆中


面试题5:(扩展题) 为什么在比较对象的时候我们需要重写hashcode和我们的equals方法? 1、hashCode作用主要在于增加数据在哈希家族中的查询速度。

2、如果hashCode相等,他们在哈希结构中存储位置相等,但是不是同一个对象!换句话说hashCode相等,调用equals不一定相等。

3、如果equals相等,那么他们的存储位置当然相等,所以hashCode一定也是相等的。

4、根据2、3两条,重写equals方法就一定要重写hashCode方法。


面试题6:如何高效计算8→2 int a = 8

a>>2 输出: 2 a<<2 输出:32

面试题7: 分析ArrayList和Vector的区别:

ArrayList和Vector都是数组实现的线性表,一般情况下用ArrayList,

因为效率原因。ArrayList的效率要远高于Vextor,ArratList是线程不安全的,Vector是

线程安全


面试题8:HashMap的put过程: 1.8之前,HashMap底层结构是一个数组+链表的实现 默认数组大小是16,负载因子是0.75 put第一步是: 对key进行hash算法,如果key为空,返回0, 若key不为空,首先获取key的hashCode值,再将该值有符号右移16位, 对两个值做异或运算,将结果返回 第二步: 判断是否需要扩容,如果需要则扩容 匹配对应的key,进入相应的桶,判断是否存在该key,若存在则覆盖;

否则 插入数据 再次判断需要则扩容

1.8及以后,HashMap底层实现数组+链表+红黑树的实现 (红黑树和链表只能存在一个) 当一个桶中插入的数据<=8时,1.8之前一模一样, 是 数组+链表 当一个桶中插入的数据>8时,1.8之前一模一样, 是 数组+红黑树

面试题9: HashMap和HashTable的区别? HashMap线程不安全的,HashTable是线程安全的 HashMap不允许null值,HashTable允许null值 HashMap继承Dictionary类,HashTable实现Map接口


面试题10: 线程的状态:五种状态

创建(new) 就绪(ready)------↓ 运行(running)--→这仨循环 锁定(block)------↑ 摧毁(destroy)

面试题11:ArrayList和LinkedList的区别: ArrayList 是连续数据 ArrayList查询速度快,增删改速度比较慢, LinkedList查询速度慢,增删改速度比较快 LinkedList是典型的双向链表


最新回复(0)