当被问到对哪些技术有深入了解

2017-04-19 10:48:42 +08:00
 bbao

如题,当被问题对哪些技术有深入了解时,任何技术,任何领域,都可以,该怎么沟通?

貌似好多东西都理解,也知道原理,也能实现,但是深入不知道会是什么程度,每每问到的时候,不知道如何回答;

4572 次点击
所在节点    程序员
44 条回复
ihuotui
2017-04-19 11:09:57 +08:00
他问什么 你答什么就行了
bbao
2017-04-19 11:12:12 +08:00
@ihuotui 当然是如果问到了指定技术,怎么理解,怎么用的,有什么优缺点,遇到什么坑当然是可以聊的;

但是,就只是问你,对什么技术或者领域有深入的了解,任何技术领域都可以;如果没有特定的深入了解过一些技术,以及深入了解源码的话,我不知道如何答这些;
ihuotui
2017-04-19 11:42:48 +08:00
@bbao 如果不能吹牛逼,那么没有内涵。例如问并发你能说出什么?例如问 mysql 你又能说几分钟?这就是内涵。一个不会吹牛逼的程序员不是好厨师。
bbao
2017-04-19 11:56:38 +08:00
你问的这些还都挺简单的,只要给出一个指定的问题,都好答;
拿 mysql 来说, 了解索引实现机制,为什么使用 btree , b+tree 和 b-tree 的特点,如何合理创建索引,聚簇索引,耳机索引的区别(索引和数据是如何映射);联合索引有什么注意事项;数据量大如何处理;
对于单表大数据之后,如何处理,了解是否做过 表分区,分库,分表; mysql 的表分区的特点是什么;如何分库,如何分表;现在的分库规则是什么?分库之后如何针对数据做检索的,是自己后端逻辑处理还是使用开源的框架,这样就把问题扩展到另一个问题;
btree 可以引申到数据结构的问题;例如平衡树,红黑树,红黑树是否适合存储海量数据,如果不适合,为什么。
如果做 java 的,可以简单的带一句, treemap 的实现机制,对于工作 4 年内的人,然后可以横向对比一下 hashmap 的实现原理,为什么支持并发,如果并发会产生什么问题;使用 hashmap 有什么注意事项.如果产生 hash 冲突之后,怎么处理的.

但是对于我问的问题,这种深度的问题的话;我个人理解,还是对,比如深入了解 redis ,要对 redis 的方方面面,原理,源码都有了解才叫深入;所以这种开放性范围提出之后,对于我这样理解这个问题时,就不知道如何答这个问题;
ihuotui
2017-04-19 13:40:03 +08:00
@bbao 说得不错,看得还可以。再高一层就是分布式应用和集群的经验和设计,还有一些魔改框架。
ihuotui
2017-04-19 13:40:52 +08:00
@bbao 我问你什么时候用多线程,什么时候不用。
GeekGao
2017-04-19 13:49:23 +08:00
反问面试官:这个话题好突兀,您能限定个具体范围吗?
czheo
2017-04-19 13:53:59 +08:00
真不会聊天,情商拙计。
woshixiaohao1982
2017-04-19 13:55:50 +08:00
@bbao
这个问题表面上看是问技术,我觉得更多是考察一个人 对技术的态度吧,

很多人做了很多年 java 对容器的特点一窍不通的也有,也有对技术了解的非常少的人,
例如 jvm gcroots 是基于有向图可达性分析来 归代回收,本质上来讲这就是个图论算法
图的算法 最经典就是 dfs bfs 某 D 开头几乎很难拼对名字的算法

拿楼主说的红黑树是否适合存储海量数据来讲, 除非业务对数据有十分强的有序性要求,
否则不推荐海量数据使用红黑树,因为红黑树的 插入 查找,
在并发的情况下 其吞吐量并不是很好,通常在有线程插入数据 加锁后,红黑树 需要 要锁定一个较大的分支
(具体的红黑树 插入 查找的操作 已经忘了,,不过我当时学习这个算法时候 分析过加锁的原因 ),
而这些操作正是维持容器内数据有序性的必要操作

维持高吞吐容器的话还是 hashmap 较好
因为通常只会锁住一个 头接链表的头部,如果有可能的话 还可以加入更加细粒度的锁, hashmap 在没有有序性要求的场景下,较 红黑树 优
woshixiaohao1982
2017-04-19 14:00:25 +08:00
另外数据底层原理 多线程容器竞争的问题 以及吞吐量的问题,
本质上就是 资源竞争 跟算法与数据结构 选择的问题
把基础性的书 读一遍,基本上能答个八九不离十
woshixiaohao1982
2017-04-19 14:04:25 +08:00
@bbao 另外我觉得你刚才说的这些东西,能跟面试官扯一扯 能把细化一部分的原理跟细节 就已经很不错了
这种开放性的问题,本身并不是考察 面试者有多牛逼,只是考察面试者 对待技术的态度,平常看书学习的态度
当一个面试官问 JVM 的时候,你能把深入理解 Java 虚拟机上的东西 加上自己的理解 复述一遍,另外能带上 Java6 subString 内存泄漏的分析 就已经相当不错了
woshixiaohao1982
2017-04-19 14:07:06 +08:00
http://hedengcheng.com/?p=771
这里有一篇 mysql 事务加锁机制的文章,,面试的时候 扯一扯 能扯明白的 有几个?
bbao
2017-04-19 14:08:20 +08:00
@woshixiaohao1982 红黑树是可以坐缓存的,但是量级不能特别特别的大,因为深度决定了检索效率; openresty 的 shared.dict 缓存,实现原理就是红黑树;

jvm gcroots 冷不丁不知道是啥,拆开看才明白;就一个对象合适才能 gc ,找不到 root 就 gc 嘛;

hashmap 不适合高并发,也不能用在并发场景,并发场景使用 ConcurrentHashMap ,因为并发时, put 的时候,如果产生了 rehash 扩大 map 容量,那么就会有问题;貌似是 next 的指针指的不对,具体实现忘记了;

如果是吞吐量的话,是不是用 LinkedListBlockingQueue 来存放对象。
ihuotui
2017-04-19 14:09:35 +08:00
既然可以回答那么多,我也会再问还有其他深入了解的技术,例如 rocketmq , dubbo , netty , zookeeper ,有没有看过源码,如果说看过,我会问它们的设计,然后为什么这样设计,然后让你来实现怎么做。这几个都比较典型,里面的思想挺好。
ihuotui
2017-04-19 14:10:22 +08:00
@woshixiaohao1982 看过哈哈
bbao
2017-04-19 14:12:09 +08:00
@ihuotui 没有共享状态,单个线程处理结果独立,不受其他线程状态影响的情况,数量级再单线程执行比较慢的时候用需多线程;


@GeekGao 他问的就是,你对你所熟悉的领域,任何一个你觉得,你了解的比较深入的技术,都可以聊;所以就看你自己的平时对技术的深度了解; 还有 @woshixiaohao1982 说的学习态度问题;

我学习态度不端正,面壁.
bbao
2017-04-19 14:17:25 +08:00
@woshixiaohao1982 锁的问题,我个人觉得,了解如何合理的创建数据表,以及创建索引的规则,知道现在不是一个 sql 只能执行一个索引,可以索引合并,符合索引(a,b,c) a,ab,abc 都可以走索引,也就可以不针对 a 进行单独设置索引;或者什么时候创建(a,b),什么时候单独的创建 a , b 索引;

像你刚发文章链接,如果清晰的知道 mysql 的事物机制的话,可以问一下 mvcc ,以及如何“可重复读”是如何避免幻读的(间隙锁);

这些,我觉得一个开发,了解到这,在深入的实现之类的,或者其他问题,我可能就不会了;
bbao
2017-04-19 14:21:20 +08:00
@ihuotui dubbox 仅限于使用; zookeeper 如果公司使用的多的话,能很好的了解;我之前阅读过 zookeeper 的原理和实现,刚看完特别清晰;但是,现在已经忘干净了,因为我们现在用 zk ,因为用 dubbo ,因为 dubbo 推荐使用 zk 。

我们的 activemq ,我觉得也是 demo 的基础上调整一下,做个主从;

netty ,方便了解 nio ,之前也很透彻,现在也完蛋。

了解 netty 的时候,还可以了解到 select epoll 等一些问题;当时看的时候,针对这些顺着看的,可是现在,也没什么太多印象了;

上面那些,用到的也就是使用了;其他的没太多了解了,之前了解过的,也不怎么记得了 。
ihuotui
2017-04-19 14:24:13 +08:00
@bbao 推荐看看 rocketmq 的实现,为什么他那么高效。
bbao
2017-04-19 14:31:05 +08:00
@ihuotui 啊~ 你看的源码挺多啊。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/355818

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX