java面试(十八)
1、执行查询时,若要查询的数据很多,假设要查询 1000 万条,用什么方法提升效率?
- 从数据库方面:建立索引、分区、尽量使用固定长度的字段、限制字段长度
- 从 数据库 IO 方面:增加缓冲区
- 在 sql 语句方面:优化 sql 语句,减少比较次数、限制返回的条目数
- 在 java 方面,如果是反复使用的查询,使用 preparedStatement
2、百度时,一输入“北京”,搜索框下面就会出现“北京爱情故事”,“北京公交”,“北 京语言大学”等,实现这类技术用的数据结构是什么?
trie 树,又称为单词查找树, 字典树,是一种树形结构,是一种哈希树的变种,是一种用于快速检索的多叉树结构。其核 心思想是:空间换时间。利用字符串的公共前缀来降低查询时间的开销以达到提高效率的目 的。
Trie 树的性质:
1)根节点不包含字符,除了根节点以外的每个节点包含一个字符
2)从 根节点到某一个节点,路径上经过的字符连接起来,为该节点对应的字符串
3)每个节点的 all 子节点包含的字符串不同。
3、面向对象和面向过程的区别?
(过程)优点:性能比面向对象高,因为类调用时需要实例化,开销比较大,比 较消耗源 ; 比如嵌入式开发、 Linux/Unix 等一般采用面向过程开发,性能是最重要的
因素。缺点:没有面向对象易维护、易复用、易扩展。
(对象)优点:易维护、易复用、易扩展,由于面向对象有封装、继承、多态性
的特性,可以设计出低耦合的系统。缺点:性能比面向过程低。
4、jdk 和 jre 区别?
jdk 的 bin 下有 javac , jre 的 bin 下没有 javac 。
5、基本数据类型 double 在判断相等时,为什么不可以用==?
存储精度问题,一般使用阈值,a-b 小于这个阈值,一般就认为相等。
6、linux 常用命令
1 ) cd 打开文件夹;
2 ) cd.. 后退 ;
3) mkdir 创建目录;
4 ) rm 删除文件;
5 ) head tail 显示文件头尾;
6 ) hostname 显示主机名;
7 ) ipconfig 查看网络情况;
8 ) ping 测 试网络连通;
9 ) netstat 显示网络状态信息;
10 ) clear 清屏。
7、Volatile 原理
观察加入 volatile 关键字和没有加入 volatile 时所产生的汇编代码,发现加入 volatile 时,会多出一个 lock 前缀指令,lock 前缀指令相当于内存屏障,内存屏障提供 三个功能:
1)它确保指令重排序时不会把其后面的指令排到内存屏障之前,也不会把前面 的放在内存屏障之后,即在执行到内存屏障这句指令时,在他前面的操作已经全部完成。
2 ) 它会强制将对缓存的修改操作立即写入主存。
3 )若是写操作,它会导致其他 cpu 中对应的 缓存行无效。
使用场景: 1 )对变量的写操作不依赖当前值。 2 )该变量没有包含在具有其他变量的不 变式中。比如:1 标记状态、 2 )双重检查。
8、redis、memcached区别
1)redis 中并不是 all 数据都一直存储在内存中,这是和 memcached 相比一 个最大的区别。
2 ) redis 不仅仅支持简单的 key-value 类型的数据,同时还支持字符串、 hash 表、链表、集合、有序集合。
3 ) redis 支持数据备份,即 master-slave 模式的备份。
4 ) redis 支持数据的持久化,可以将内存中的数据保存在磁盘上,重启的时候可以再次加载进内存使 用。Memcached 服务器关闭后,数据丢失。
5 ) memcached 挂掉后,数据不可以恢复, redis 数据丢失后可通过 AOF 恢复(灾难恢复)。
java面试 文章被收录于专栏
求职面试题&解析