金山办公 武汉- 面试挂 9/25
一面 - 9/25
1、自我介绍
- 计算机网络+操作系统
2、IO 多路复用
2、socket模型(具体步骤:应该分为客户端和服务端进行回答,没答好)
2、半连接队列的位置在哪(意识到不在socket、在协议栈中,操作系统内核维护。。 没答上来)
(问我怎么学的,我不可能真看Linux吧,看书、看面经呗 — 估计开始怀疑我的成分了,呜呜)
- Java:
3、JDK1.7 和 1.8 的 hashmap区别,在那个包下(java.util.*)
redist相关:
4、redis 的zset 底层数据结构,什么情况下使用压缩列表(128个,64byte)
5、如何学习的redis(看书、官方文档),redis 官网地址(redis.io)、set命令 的 参数列表,redis 命令复杂度为o(n)
SET key value [NX | XX] [GET] [EX seconds | PX milliseconds | EXAT unix-time-seconds | PXAT unix-time-milliseconds | KEEPTTL] (我。。。。他应该是觉得我在吹牛了,><)
5、项目中哪些地方用到了redis
5、十万、百万数据量如何进行实时排序,
6、Docker 常见命令,DockerFile 放置路径、主要有哪些参数
- 纯干货!Docker Dockerfile指令大全 - 知乎 (zhihu.com)
6、SQL 优化,大表和小表的join 如何优化
当处理大表和小表的JOIN操作时,以下是一个示例的解决方案:
- 小表驱动大表:
sqlcopy codeSELECT * FROM small_table JOIN big_table ON small_table.id = big_table.id WHERE small_table.column = 'value'
在这个示例中,将小表作为驱动表,大表作为被驱动表。通过将小表放在前面,可以减少大表的扫描和匹配操作,提高查询效率。
- 使用索引:
sqlcopy codeSELECT * FROM big_table JOIN small_table ON big_table.id = small_table.id WHERE big_table.column = 'value' AND big_table.indexed_column = 'indexed_value'
在这个示例中,为参与JOIN操作的列创建了索引,通过索引加快数据的查找和匹配速度。可以根据实际情况选择合适的列创建索引。
- 使用临时表:
sqlcopy codeCREATE TEMPORARY TABLE temp_table AS ( SELECT * FROM big_table WHERE big_table.column = 'value' ); SELECT * FROM temp_table JOIN small_table ON temp_table.id = small_table.id;
在这个示例中,先将大表根据条件筛选出需要的数据存储在临时表中,然后再与小表进行JOIN操作。通过减少JOIN操作的数据量,提高查询效率。
- 分批处理:
sqlcopy codeSELECT * FROM big_table JOIN small_table ON big_table.id = small_table.id WHERE big_table.column = 'value' AND big_table.id BETWEEN 1 AND 1000; UNION ALL SELECT * FROM big_table JOIN small_table ON big_table.id = small_table.id WHERE big_table.column = 'value' AND big_table.id BETWEEN 1001 AND 2000;
在这个示例中,将大表和小表分成多个批次进行JOIN操作,每次处理一部分数据。通过分批处理,可以减少内存的占用和查询的时间,提高整体的性能。
需要根据具体的业务需求和数据库系统来选择和实施适合的优化策略。以上示例仅供参考,具体的解决方案需要根据实际情况进行调整和优化。
如果你有特定的业务场景或更具体的需求,可以提供更多的信息,以便提供更具体的解决方案示例。
6、介绍一下实习主要是做什么的,实现的那几个需求
反问:主语言是go (准备面试题)
40min