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 恢复(灾难恢复)。