首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
宝塔
V2EX  ›  程序员

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

  •  
  •   bbao · 2017-04-19 10:48:42 +08:00 · 3603 次点击
    这是一个创建于 943 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    44 回复  |  直到 2017-04-19 19:10:38 +08:00
        1
    ihuotui   2017-04-19 11:09:57 +08:00 via iPhone
    他问什么 你答什么就行了
        2
    bbao   2017-04-19 11:12:12 +08:00
    @ihuotui 当然是如果问到了指定技术,怎么理解,怎么用的,有什么优缺点,遇到什么坑当然是可以聊的;

    但是,就只是问你,对什么技术或者领域有深入的了解,任何技术领域都可以;如果没有特定的深入了解过一些技术,以及深入了解源码的话,我不知道如何答这些;
        3
    ihuotui   2017-04-19 11:42:48 +08:00 via iPhone
    @bbao 如果不能吹牛逼,那么没有内涵。例如问并发你能说出什么?例如问 mysql 你又能说几分钟?这就是内涵。一个不会吹牛逼的程序员不是好厨师。
        4
    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 的方方面面,原理,源码都有了解才叫深入;所以这种开放性范围提出之后,对于我这样理解这个问题时,就不知道如何答这个问题;
        5
    ihuotui   2017-04-19 13:40:03 +08:00 via iPhone
    @bbao 说得不错,看得还可以。再高一层就是分布式应用和集群的经验和设计,还有一些魔改框架。
        6
    ihuotui   2017-04-19 13:40:52 +08:00 via iPhone
    @bbao 我问你什么时候用多线程,什么时候不用。
        7
    GeekGao   2017-04-19 13:49:23 +08:00
    反问面试官:这个话题好突兀,您能限定个具体范围吗?
        8
    czheo   2017-04-19 13:53:59 +08:00
    真不会聊天,情商拙计。
        9
    woshixiaohao1982   2017-04-19 13:55:50 +08:00
    @bbao
    这个问题表面上看是问技术,我觉得更多是考察一个人 对技术的态度吧,

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

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

    维持高吞吐容器的话还是 hashmap 较好
    因为通常只会锁住一个 头接链表的头部,如果有可能的话 还可以加入更加细粒度的锁, hashmap 在没有有序性要求的场景下,较 红黑树 优
        10
    woshixiaohao1982   2017-04-19 14:00:25 +08:00
    另外数据底层原理 多线程容器竞争的问题 以及吞吐量的问题,
    本质上就是 资源竞争 跟算法与数据结构 选择的问题
    把基础性的书 读一遍,基本上能答个八九不离十
        11
    woshixiaohao1982   2017-04-19 14:04:25 +08:00
    @bbao 另外我觉得你刚才说的这些东西,能跟面试官扯一扯 能把细化一部分的原理跟细节 就已经很不错了
    这种开放性的问题,本身并不是考察 面试者有多牛逼,只是考察面试者 对待技术的态度,平常看书学习的态度
    当一个面试官问 JVM 的时候,你能把深入理解 Java 虚拟机上的东西 加上自己的理解 复述一遍,另外能带上 Java6 subString 内存泄漏的分析 就已经相当不错了
        12
    woshixiaohao1982   2017-04-19 14:07:06 +08:00
    http://hedengcheng.com/?p=771
    这里有一篇 mysql 事务加锁机制的文章,,面试的时候 扯一扯 能扯明白的 有几个?
        13
    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 来存放对象。
        14
    ihuotui   2017-04-19 14:09:35 +08:00 via iPhone
    既然可以回答那么多,我也会再问还有其他深入了解的技术,例如 rocketmq , dubbo , netty , zookeeper ,有没有看过源码,如果说看过,我会问它们的设计,然后为什么这样设计,然后让你来实现怎么做。这几个都比较典型,里面的思想挺好。
        15
    ihuotui   2017-04-19 14:10:22 +08:00 via iPhone
    @woshixiaohao1982 看过哈哈
        16
    bbao   2017-04-19 14:12:09 +08:00
    @ihuotui 没有共享状态,单个线程处理结果独立,不受其他线程状态影响的情况,数量级再单线程执行比较慢的时候用需多线程;


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

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

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

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

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

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

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

    上面那些,用到的也就是使用了;其他的没太多了解了,之前了解过的,也不怎么记得了 。
        19
    ihuotui   2017-04-19 14:24:13 +08:00 via iPhone
    @bbao 推荐看看 rocketmq 的实现,为什么他那么高效。
        20
    bbao   2017-04-19 14:31:05 +08:00
    @ihuotui 啊~ 你看的源码挺多啊。
        21
    ihuotui   2017-04-19 14:33:24 +08:00 via iPhone
    @bbao 我看了 netty 和 mq 剩下两个在计划中。
        22
    bbao   2017-04-19 14:36:14 +08:00
    @ihuotui 但是对于一个多年的后端开发来讲,觉得没有深度的东西积累,还是挺失败的;
        23
    woshixiaohao1982   2017-04-19 14:37:41 +08:00
    @bbao 你能聊到这么多就已经很不错了,我上次出了个题目,开放性的,,大致讲下 hashmap 的实现跟原理,
    在并发的情况下,如何为 hashmap 加入细粒度的锁 使其可以并发访问,人家看完面试题 发现不能百度 转身就走了..
        24
    ihuotui   2017-04-19 14:44:29 +08:00
    @bbao 看你追求吧,技术成长与环境相关,可以思考一下换个高级环境。
        25
    bbao   2017-04-19 14:46:16 +08:00
    @ihuotui 这不就是昨儿从低级环境向往高级环境面试时候,被问到之后,卡壳了,一句话憋不出来;就来这里求解惑了;
        26
    ihuotui   2017-04-19 14:51:31 +08:00
    @bbao 吞吐量大的,我会选择无阻塞链表 ConcurrentLinkedQueue , LinkedListBlockingQueue 还是把线程阻塞了,无阻塞才是王道。编写吞吐量大的应用很考验能力,对性能的理解。
        27
    ihuotui   2017-04-19 14:52:28 +08:00
    @bbao 多面试,多总结,然后就面试成功了。哈哈。
        28
    woshixiaohao1982   2017-04-19 15:01:21 +08:00
    @bbao 技术上 其实明白技术底层性的原理,够用就好了,深抠每一个细节,于精力 于时间 都是难以达到的,我毕业快两年了,还不是科班毕业,转行过来 3 个月 ,面试过的水货程序员 太多太多了,有的连 找到数组中 第 n 大的数 都不会写
        29
    ihuotui   2017-04-19 15:07:34 +08:00
    @woshixiaohao1982 他面试高级程序员,现在卡了,还是项目积累和深度。再参与多几个大型项目和架构设计,然后再魔改或者研究主流中间件。
        30
    ihuotui   2017-04-19 15:11:04 +08:00
    你工作 7 年了,这样水平确实对不起工作年龄。。。
    @bbao
        31
    bbao   2017-04-19 15:42:43 +08:00
    @ihuotui 近 2 年荒废了时间,白瞎了;
        32
    woshixiaohao1982   2017-04-19 15:50:32 +08:00
    @ihuotui
    @bbao
    我觉得主要还是多看书吧,就我个人来讲,非科班 野路子出身的,读过 csapp ,算法 第四版 等书

    其实发现很多技术原理上的东西,其实很多年没变过了,你把数据结构与算法的基础打好,
    像 redis 其实信手拈来,无非就是常见的 头接链表 hashmap 新版 redis 加入了 geo 等地理位置 线段树等算法

    因为每个人的出身,跟技术经历都不一样,并不是每个人都有机会经历一些大项目 架构设计
    个人能够努力做到的,且完全不依赖外部资源的途径 就只有自己多动手 多读书 多尝试了



    另外求楼上两位老铁 推荐点书 给我这个刚入门的小弟看看
        33
    bbao   2017-04-19 15:55:42 +08:00
    @woshixiaohao1982 我平时看书不多,最近一直关注 https ,可以看看 https 权威指南,黑色那本,针对加密算法、 openssl 性能测试以及 https 优化都有概括,而且比 http 权威指南看的容易,不那么枯燥,生涩;然后可以关注一下 http2 ;解决了 http1.1 的很多痛点;
        34
    ihuotui   2017-04-19 16:14:16 +08:00
    @woshixiaohao1982 我建议环境重要,书是提升内功,环境是实践,遇到越多的人,越多事情,互相交流,边实践边成长。
        35
    Chrisplus   2017-04-19 16:25:46 +08:00
    就特别讨厌乱问的面试官,就老老实实的写题得了,或者就简历中相关的,感兴趣的问一下,拿住一个点往深问,再慢慢扩展成一个面。

    上来就问类似这种特别宽的问题,说浅了面试官不一定满意,说深了面试官又不一定懂,多尴尬……
        36
    woshixiaohao1982   2017-04-19 16:27:26 +08:00
    @ihuotui #34 好的环境,可遇不可求,没有人脉 没有朋友内退 只能自己先修内功了,
        37
    bbao   2017-04-19 16:29:26 +08:00
    @woshixiaohao1982 哈哈,内推也需自身硬啊…内推不一定能进;不要浪费光阴,没事儿干,就趁早撤退,也不要看钱多如何如何;我就是前车之鉴
        38
    woshixiaohao1982   2017-04-19 16:32:47 +08:00
    @bbao #37 我现在更惨..不说了..码畜级别
        39
    woshixiaohao1982   2017-04-19 16:37:09 +08:00
    @bbao #37 谁要是能给我 推荐个靠谱点增删查改的后端工作 我就谢天谢地..
        40
    bbao   2017-04-19 16:45:16 +08:00
    @woshixiaohao1982 等我自身解决了 帮你推吧,哈哈。
        41
    woshixiaohao1982   2017-04-19 17:02:21 +08:00
    @bbao #40 祝你早日解决问题,踏入高层环境 😄
        42
    brand0n   2017-04-19 17:31:20 +08:00
    @ihuotui 最后进阿里没啊
        43
    Ouyangan   2017-04-19 17:41:10 +08:00
    @bbao 受教了
        44
    ihuotui   2017-04-19 19:10:38 +08:00 via iPhone
    @brand0n 暂时还没有,哈哈
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   4226 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 31ms · UTC 03:07 · PVG 11:07 · LAX 19:07 · JFK 22:07
    ♥ Do have faith in what you're doing.