美文网首页IT面试
2019年互联网寒冬,带你走进真实的面试杀出重围

2019年互联网寒冬,带你走进真实的面试杀出重围

作者: java高并发 | 来源:发表于2019-03-22 17:03 被阅读25次

    坐标上海、

    博主最近找工作的真实经历。
    从01月5号-01月11号为期一周的面试安排以及遇到的问题,做一个总结,带你走进2019年这个互联网寒冬环境下找工作的真实经历,带大家做一个梳理,希望能帮到大家。

    这里不讲虚的,直接上来就是面试官抛出的问题,以及后来面试通过情况,回答问题情况,关注点在哪,整个做一个详细的说明,毕竟年底,HR想压薪资,并且好多一部分公司招人需求并不是很强烈,寒冬已至,只有不断的面喽…
    好了,下面开始总结。

    从01月02号周三开始投递简历,面试邀请往后排,安排了为期3天的面试,然后,后面边面试边投递。

    2019.01.04周五 小雨
    1
    Firstday AM10:00
    这天安排了3家,甲方和外包均有、
    周五上午10:00 甲方,上海市黄浦区,地铁9号线打浦桥站

    1、老流程,填表,笔试(非技术题),面试
    2、笔试不多说,直接进入面试
    面试官3人组,技术面试官(27/8年轻小伙子),hr(大姐姐),产品(大姐姐)

    1、自我介绍,博主傻帽的说了如下:

    “你好,我是打豆豆, 老家xxx,以前在北京一家外包,这家公司主要做金融以及电商的项目,最近做了个基于springCloud架构的综合品类电商的这么一个项目,我在项目中负责商品后台管理以及es实时搜索模块的开发,参与了…此处省略100字 ”。

    问题如下:
    说老家时候,hr大姐姐直接打断:“你说下你之前在哪家公司?”
    打豆豆:xxx 还没说完 hr又打断:“说下最近做的哪个项目,还有在项目组中担任什么样的角色?”
    打豆豆:比拉比拉…负责商品后台管理以及es实时搜索模块的开发

    2、支付

    技术面试官: 说下支付模块实现
    打豆豆内心 : 尼玛,老子开发的是后台商品管理,上下架,CURD,还有ES搜索模块,你问我支付模块…
    打豆豆不动声色 : 支付这个,前台…到order微服务生成唯一order号…调用微信支付宝银联接口,支付成功更改订单状态status …

    3、秒杀

    技术面试官: 说下商品秒杀实现
    打豆豆内心 : 尼玛,秒杀业务的线程并发,熔断,限流,以及单人秒杀权限只有一次,orderId 不重复支付(分布式事务)最终结果一致性。实在不行用TCC
    打豆豆不动声色 : 支付这个,虽然不是我开发的,也有参与,保证支付订单的幂等性呗
    PS: 当然现场答得不好,好多东西没讲出来,
    我可以用分布式锁来解决,
    也可以用身份标签来解决
    当然重要的是支付ok 生成的订单流水插入mysql ,重复请求支付同一orderId时候先查询流水,然后决定事务是否回滚、

    4、整个springCloud的架构了解么

    打豆豆:

    5、JWT鉴权

    技术面试官: 哎呦,还做了JWT鉴权,你说下JWT鉴权实现流程是怎样的?
    打豆豆内心: 尼玛,上脸了…麻烦瞅下简历,你这一问这个项目都是我做的好啦,我独立开发,我是全栈…
    打豆豆: 额,这个… 结合Zuul网关微服务做了一个JWT(java webService token)+rsa 相结合…
    请求进来…
    auth-center鉴权中心微服务,存放一个rsa.pri(私钥)…调用…微服务…
    在每一个微服务存放一个rsa.pub(公钥),用来解密token 、完成对用户的鉴权…
    PS: 当时答得一塌糊涂,以上均是做了优化,
    防止有小伙伴没有看清楚,照着我这博客背然后弄错了,面试吃瘪回来找我理论。
    所以这些回答均是优化过了,当时这个jwt 鉴权答得不怎么样、

    6、日常高并发从不缺席

    技术面试官: 你们并发量多少?秒杀时候高并发问题怎么处理的?
    打豆豆内心: 这个是我强项啊
    打豆豆: mysql 并发600左右,使用redis的master-salve 读写分离架构以及消息队列,外加mysql 主从,数据分发
    表结构优化,当然表结构优化这一点不能够过早的优化,在你并发量较低情况下,业务需求不需要做过早的分表,过早的分表会导致一些其他的问题凸显、
    PS: 当然不能够忘记 高可用,宕机仍会导致你整个应用的瘫痪,这一点上springCould较为注重AP
    技术面试官: 恩,hashmap用到过?hashmap的特点 ,实现原理是怎样的?
    打豆豆: …使用场景在… 底层数据结构是…
    技术面试官: hashmap的hash冲突 怎么解决?
    打豆豆内心: 啥?懵逼…
    打豆豆: 不太了解
    PS: 解决方式,1、再次hash 2、链表对 相同hashcode值的key 进行处理(hashmap底层默认的处理方式)

    当然,redis 单机模式读写数据qps在万级别,qps要达到 数十万级别的话,那就要用读写分离,集群了,redis集群可基于zookeeper 和redis cluster 搭建、
    具体可自行百度

    小结
    这家凉凉,下午还有两家

    Firstday PM13:00
    周五下午13:00 外包,浦东新区碧波路 ,2号线张江高科地铁站
    这家上去就是让做题
    1,N道逻辑判断
    2,定义单例Rectangle类 编码;判断2个矩形相交编码
    好多人在等,笔试没过

    Firstday PM16:30
    周五下午16:30 外包,徐汇区华宜大厦 ,9号线宜山路
    1、无笔试
    2、面试
    redis 。分布式。mysql存储过程(当时没答出来)。高并发
    3、薪资未达到期望

    2019.01.06周日 小雨 下午2:30
    1
    Second day PM 14:30
    甲方,上海市杨高中路,xx科技
    流程
    1、填表笔试,几个选择,编程题 :系统时间上一个月是哪一天?
    2、面试
    结果未通过

    技术面试官: ok ,自我介绍下
    打豆豆 : …负责某某某…
    技术面试官: ok ,thymeleaf 静态化怎么实现的
    打豆豆 : …xxx
    静态化的具体实现(回答的不好)、
    PS : 静态化,生成HTML,请求进来从nginx 拉取静态页面…但是有静态化同步问题,使用mq解决
    技术面试官: 静态化页面存在可变动的信息?类似于库存?
    打豆豆 : 当然了,有货没货显示就行了,status字段么
    技术面试官: es 搜索,秒杀
    打豆豆内心 : 秒杀你妹,这模块又不是我做的…
    打豆豆 : 怎么怎么 … 秒杀配置熔断限流
    技术面试官: nginx 服务器,使用场景,哪里用的?除了反向代理别的地方用在哪了?
    打豆豆 : 熔断限流具体设置(没答上来)。
    PS : 设置线程熔断时间 300ms ,为了单线程 能抗 3/s 个请求、
    技术面试官: 期望薪资
    技术面试官: 有什么想问的?
    打豆豆 : xxx上下班时间,你们主要做哪些方向?线上碰到过什么比较棘手的问题?支付幂等性怎么保证?
    技术面试官: 有没有其他要问的?
    打豆豆 : 没有

    2019.01.07周一 晴
    第三天排了3家
    1
    2
    Third day AM 10:00
    甲方,上海市长宁区通协路,地铁二号线淞虹路站
    流程:1、笔试
    2、面试
    笔试未通过,算法和编程以及表设计写了下,估计做完中午了,没写完直奔下一家

    题超多,sql 题20道,选择6页,算法(二分法),表设计1个
    数据库优化设计1道
    表拆分1道

    Third day PM 14:30
    甲方,2019年1月7日 14:30
    上海市黄浦区打浦路
    无笔试
    期望薪资未达到
    以下为了节省时间,直接磕重点了,不写那么细了

    技术面试官: 项目
    技术面试官: 秒杀实现、springcloud用了什么组件
    打豆豆 : Zuul 等等
    技术面试官: 数据库
    打豆豆 : 就一些优化问题,引擎优化具体怎么做讲一讲ok了,结合redis 处理并发
    技术面试官: 递归了解多少,jdk8新特性
    打豆豆 : 递归开始结束条件,新特性lambda
    技术面试官: 我们是一家…期望薪资多少… 什么问题?
    打豆豆 : 恩恩…比拉比啦…
    技术面试官: 引擎 …内存片段怎么怎么滴…微信厉害吧,我仿微信写了个一样的…
    打豆豆内心 : 牛批牛批…

    Third day PM 17:00
    甲方,2019年1月7日 17:00
    上海闵行区 ,甲方 中庚环球创意中心
    无笔试
    未通过

    技术面试官: 说下项目,负责那些模块
    技术面试官: springcloud都哪些组件
    技术面试官: hashmap hashtable 还有线程并发问题
    技术面试官: redis集群高可用怎么保证
    打豆豆: 比拉比啦…
    技术面试官: 有用过es,那你说下es的原理
    打豆豆内心: es不就读写,底层怎么读怎么写…到内存buffer …刷新…oscache…segmentFile合并…
    然后使用的话,创建index ,映射… 根据词条…
    技术面试官: IK分词器底层原理
    打豆豆内心: 栽了…
    打豆豆: 栽了…

    2019.01.08 周二 小雨
    1
    Fourth day AM 10:30
    甲方,上海市张江路,地铁2号线广兰路站 xxx金服
    流程
    1、无笔试
    2、面试
    结果未通过

    技术面试官: ok,负责了后台和搜索,那你说下购物车怎么实现的,就说下从购物车的表设计,到添加购物车,然后展示购物车,使用redis 的话,你是如何设计 key 和value 的…整个你来说,我来写?
    技术面试官: 我们就说说最常见的购物车模式,登录才能够添加展示购物车的这种,来,你讲一讲。
    打豆豆内心: 尼玛,这个
    打豆豆: 可以把数据存放在localStorage, 购物车若基于redis 设计的话,key 设计成userId ,value 设计成 map<skuid, 商品数据> ,就是一个双层map结构
    1、添加购物车
    数据添加到mysql同步到redis ,并存入localstorage 中
    2、展示购物车
    localstorage 中是否存在数据,
    存在 ,返回值渲染到页面、
    不存在,请求redis 把数据渲染到前端、
    技术面试官: 涉及到哪些表?
    打豆豆: 涉及到的表有:
    tb_user 、tb_spu、tb_spu_detail 、 tb_sku 、tb_spec_group 、tb_spec_param 、tb_category 、tb_brand
    技术面试官边记边问: 涉及到这么多张表,说下你封装了哪些数据?
    打豆豆内心已接近崩溃: 商品的通用规格参数、特有规格参数…比拉比拉…
    技术面试官边: ok ,目前这些问题均已解决,你说后台商品是可以修改的,我修改商品,你购物车如何同步?
    打豆豆内心: 终于正常些了,呼呼
    打豆豆: 使用rabbitMq 队列,在后台定义监听器,监听…比拉比啦,删除redis ,创建新的redis 数据
    技术面试官边内心: 好,重点来了,小伙子,嘿嘿
    技术面试官边: 方案可行,具体下,删除redis 你怎么找到被更新的数据的id ? 也就是说,redis 中这么多数据,你怎么找到哪个被更新了,哪个被修改了?
    打豆豆: 额,额,没答好
    技术面试官边: 其他问题开始问… 秒杀怎么实现的
    打豆豆: 比比比…
    技术面试官边: 你们版本控制工具用的什么,常用哪些命令?
    打豆豆: git svn 都用过,现在用git ,用了git 就停不下来…创建分支,合并分支…
    技术面试官边: 合并分支几种方式?
    打豆豆: 2种,…
    技术面试官边: 另一种呢?
    打豆豆: 我只用过这一种,打豆豆内心一脸黑线
    技术面试官边: 既然git 分布式的,为什么说分布式?
    打豆豆: 比拉比啦,还举了个提交代码的例子
    技术面试官边: mysql 数据库优化,你在开发中做了什么优化,具体细节
    技术面试官边: 数据库引擎优化你做了哪些?
    打豆豆: 没有做,但是可以这样优化…ok,就这样
    技术面试官边: 你提到MQ,你说下你用过几种?都有什么优缺点?
    打豆豆: activemq、rabbitmq、kafka、rocketMq 比拉比啦…高吞吐的话就kafka了,比拉比拉…
    技术面试官边: 技术广度是够了,期望薪资多少?有什么想要问的?
    打豆豆: 估计凉凉,随便问了点
    技术面试官边: 哦,今天先到这儿

    每一个购物车均是一个对象(如下),所以购物车列表是个 json数组

    {
    skuId:2131241,
    title:"大麦",
    image:"",
    price:190000,
    num:1,
    ownSpec:"{"机身颜色":"陶瓷黑尊享版","内存":"6GB","机身存储":"128GB"}"
    }
    1
    2
    3
    4
    5
    6
    7
    8
    外层map的key

        // 获取登录用户
        UserInfo user = LoginInterceptor.getLoginUser();
        // Redis的key
        String key = KEY_PREFIX + user.getId();
        // 获取hash操作对象
        BoundHashOperations<String, Object, Object> hashOps = this.redisTemplate.boundHashOps(key);
        // 查询是否存在
        Long skuId = cart.getSkuId();
        Integer num = cart.getNum();
        Boolean boo = hashOps.hasKey(skuId.toString());
        //判断 
    

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Fourth day PM 13:30
    外包某为,上海浦东新区锦绣东路 锦绣申江,地铁2号线广兰路站
    无笔试
    2、面试
    结果未通过,原因:缺乏移动性,至今不懂他说的移动性是什么、

    技术面试官: 说下项目,负责那些模块
    订单模块说说怎么开发的
    微服务配置
    参与的哪些模块都说下
    打豆豆内心: ok…
    打豆豆: 比拉比啦…
    技术面试官: redis相关
    集合数组,hashmap
    mq使用长连接短链接,使用场景
    设计模式了解多少?单例模式使用场景
    技术面试官: 怎么保证订单的一致性问题
    打豆豆: 好多方法啊,1、加锁,2、使用身份标识,3、可以使用mq 连接各个服务 …不推荐使用分布式锁 …
    并发性能收到影响…推荐使用ticket …
    技术面试官: zookeeper了解多少,谈下使用作用等
    打豆豆: 配置管理,故障转移…
    技术面试官: maven构建子工程
    打豆豆: 怎么滴怎么滴… 打包方式 pom …依赖传递…
    技术面试官: 有什么想问的?
    打豆豆内心: 没问期望薪资,ok ,问你几个问题,看你水平咋样,反正是凉凉了,露出了邪恶微笑
    打豆豆: 你们业务流 是怎样的,哦,做支付啊,ok,TCC有用过? 你们是怎么保证分布式订单不重复支付的呢?
    技术面试官: 啥?
    技术面试官: 加锁
    打豆豆: 是加同步锁 线程?
    技术面试官: 恩
    打豆豆: 锁级别跳不过jvm 啊,并且对性能上有影响,有考虑过么?其实使用zk锁也可以解决这样的问题
    技术面试官: 使用分布式锁
    打豆豆: 其实,分布式锁一样跳不过 jvm ,本质是一样的,那这个你们是怎么处理的呢?
    技术面试官内心骂娘: 额,我们都是前端做的,我们调接口就行了
    打豆豆: 不会吧,前后端一般情况下都会做校验呀,尤其后端数据库这块要保证数据的一致性、
    技术面试官: 不知道、你还有其它问题么
    打豆豆: 没有了
    PS: 其实这个问题给每一个请求一个门票,支付req来了校验门票,已支付,插入数据库流水,同步redis ,同时销毁门票,第二个请求来了,判断是否存在流水就行了,只要不是特别要求一般用不到TCC事务补偿,基本这些就能99.99保证不重复支付了

    Fourth day PM 17:00
    外包,外高桥富特北路237号,6号线航津路站;
    1、无笔试
    2、面试
    结果未通过,面试过程中就收到邮件说已停止招聘了,尼玛大坑

    技术面试官: 随意问了几个模块
    技术面试官: concurrentHashMap 什么特点?
    技术面试官: null 键,那你说为什么支持null 键?
    打豆豆内心: 好吧,我认栽…

    先点开源码过一下,然后写个demo 跟进去瞅瞅

    //key为null的话 hash值为 0
    static final int hash(Object key) {
    int h;
    return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);
    }
    // 源码如下:
    public V get(Object key) {
    Node<K,V> e;
    return (e = getNode(hash(key), key)) == null ? null : e.value;
    }
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    6.1 、开启debug

    /**

    • @auther SyntacticSugar
    • @data 2019/1/11 0011下午 10:05
      */
      public class YZTest {
      @Test
      public void test(){
      HashMap<Object, Object> map = new HashMap<>();
      map.put(null, "null值");
      System.out.println(map.get(null));
      }
      }
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12

    6.2、跟进去

    // 底层是这样处理的
    public V put(K key, V value) {
    return putVal(hash(key), key, value, false, true);
    }
    1
    2
    3
    4
    再往下会调用hash(key) 方法对key 进行hash值计算,把计算出结果传参,调用putVal( ) 方法、

    //key为null的话 hash值为 0
    static final int hash(Object key) {
    int h;
    return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);
    }
    1
    2
    3
    4
    5
    final V putVal(int hash, K key, V value, boolean onlyIfAbsent,
    boolean evict) {
    //声明变量
    Node<K,V>[] tab; Node<K,V> p; int n, i;
    // 1、直接到这里判断
    if ((tab = table) == null || (n = tab.length) == 0)
    //2、满足条件就调用 resize()方法返回一个Node<K,V>[] 对象
    // 给 tab赋值
    //n=16
    n = (tab = resize()).length;
    if ((p = tab[i = (n - 1) & hash]) == null)
    //3、 i=0
    //调用构造创建 Node对象
    //直接到 ++modCount;
    tab[i] = newNode(hash, key, value, null);
    else {
    Node<K,V> e; K k;
    if (p.hash == hash &&
    ((k = p.key) == key || (key != null && key.equals(k))))
    e = p;
    else if (p instanceof TreeNode)
    e = ((TreeNode<K,V>)p).putTreeVal(this, tab, hash, key, value);
    else {
    for (int binCount = 0; ; ++binCount) {
    if ((e = p.next) == null) {
    p.next = newNode(hash, key, value, null);
    if (binCount >= TREEIFY_THRESHOLD - 1) // -1 for 1st
    treeifyBin(tab, hash);
    break;
    }
    if (e.hash == hash &&
    ((k = e.key) == key || (key != null && key.equals(k))))
    break;
    p = e;
    }
    }
    if (e != null) { // existing mapping for key
    V oldValue = e.value;
    if (!onlyIfAbsent || oldValue == null)
    e.value = value;
    afterNodeAccess(e);
    return oldValue;
    }
    }
    //4、 ++modCount值为0
    ++modCount;
    //5、 ++size值0 ,threshold值是12
    // 所以走afterNodeInsertion(evict);
    if (++size > threshold)
    resize();
    //6、 evict值为true
    //然后执行 return null 就返回 null
    afterNodeInsertion(evict);
    return null;
    }
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    返回值为null ,所以key 为 null

    至此,hashmap 底层对null 键的处理就完毕了、

    2019.01.09 周三 小雨
    安排了4家,面了3家
    1
    2
    Fifth day AM 10:00
    外包,上海黄浦区广东路,南京东路地铁站 ,世界贸易大厦
    流程
    1、笔试
    2、面试
    结果未通过

    技术面试官: ok,负责了后台和搜索,那你说下后台商品那几张表?
    技术面试官: 你做的这么快就忘了?
    打豆豆内心: 尼玛,逆向生成又不是我设计的表

    Fifth day PM 13:00
    甲方,上海市杨浦区,地跌8号线黄兴路
    无笔试
    2、面试
    结果通过

    项目
    静态化实现同步
    redis分布式
    hashtable和hashmap和concurrenthashmap
    开源项目参与
    部署
    dubbo和cloud的接口区别
    如何保证分布式商品id唯一
    如何保证订单不重复(幂等性)
    spring了解多少
    mvc框架了解多少(手写过mvc框架,估计是个加分项)

    bean加载的整个过程(答的不好)
    只回答了工厂,反射

    mq的了解,项目为什么选rabbit

    搜索模块
    遇到什么问题,怎么解决的
    单例模式有用到?什么场景?还有哪些场景
    设计模式了解多少

    Fifth day PM 15:30
    甲方外派,上海徐汇区钦州路,地铁1号线人民广场
    无笔试
    2、面试
    结果一面通过

    如何保证分布式id唯一,
    如何保证
    线程阻塞和同步?

    打豆豆: 同步/异步关注的是消息通知的机制,而阻塞/非阻塞关注的是程序(线程)等待消息通知时的状态。
    打豆豆:
    阻塞状态(Blocked):一个正在运行的线程因某些原因不能继续运行时,就进入阻塞 状态。这些原因包括:

    等待阻塞:当线程执行了某个对象的wait()方法时,线程会被置入该对象的等待集中,直到执行了该对象的notify()方法wait()/notify()方法的执行要求线程首先获得该对象的锁。
    同步阻塞:当多个线程试图进入某个同步区域(同步锁)时,没能进入该同步区域(同步锁)的线程会被置入锁定集(锁池)中,直到获得该同步区域的锁,进入就绪状态。
    其他阻塞:运行的线程执行sleep()或join()方法,或者发出了I/O请求时,JVM会把该线程置为阻塞状态。当sleep()状态超时、join()等待线程终止或者超时、或者I/O处理完毕时,线程重新转入就绪状态。
    treemap和hashmap
    docker部署(不知道)

    mysql语句执行顺序(没答上)
    insert into(没答上)
    select insert into

    递归

    项目越来越慢怎么处理
    死锁问题,遇到过?什么是死锁问题?
    什么场景遇到?

    安全问题考虑过?你开发遇到过?
    文件注入,sql注入,命令注入?前端注入?怎么解决

    前端框架怎样?vue门户是你写?
    说下所有的你熟悉的前端框架

    能写前端?

    打豆豆: 写能写,丑一点而已
    一般都是前端写

    学习通过什么方式

    2019.01.10 周四 小雨
    安排了2家,面了一家
    1
    2
    Sixth day AM 10:00
    外包,凯旋路369号 龙之梦雅仕大厦, 地铁二号线中山公园站
    流程
    1、笔试
    2、面试
    结果未面试,做完笔试11:00 等待20分钟仍不见面试官,直接走了
    一个外包公司而已,不懂得尊重人

    Sixth day PM 14:00
    甲方,上海市松江区, 地铁松江大学城站
    流程
    1、笔试
    2、面试
    结果薪资未达到期望

    轮询底层
    网关配置
    熔断限流配置
    redis超高并发
    jwt鉴权如何传递信息,如何解析出userInfo中信息到其他微服务

    userid保存到哪里?rsa非对称加密载荷中
    如何判断2个token是不同的token
    (当时回答每个用户携带标记,)
    (面试官说解析出来token判断id ,也可行,
    判断signatrue )
    后来想想是 signatrue标识着每一个token都不同

    (宝贵时间问了问)咨询了业务流程

    2019.01.11 周五 小雨
    安排了2家,某国企复试二面,宝钢一面
    1
    2
    Seventh day AM 9:30
    某国企二面,浦东新区沈家弄路, 地铁二号线
    无笔试
    2、面试
    结果未通过,乌龙了,招前端的,我一个后端,嘎嘎

    Seventh day AM 9:30
    外包宝钢,宝山区漠河路600号 东鼎国际大厦,3号线友谊路站
    无笔试
    2、面试
    结果未通过,做物流项目,卖钢铁,对面试官水平保持怀疑

    技术面试官: 我们是卖钢铁的,你们做商城的,差不多
    技术面试官: 我们这边主要做物流,其他人做其他的…
    打豆豆内心: 哎呀,我去,啥都没问
    技术面试官: 对加班什么看法
    打豆豆: 钱到位一切ok
    技术面试官笑笑: 你期望的这个就能让你拼命干了么?
    打豆豆内心: 这家伙不是来招人的…
    打豆豆: 开什么玩笑,这点薪水是正常上下班的钱…
    技术面试官: 有什么想问的么
    打豆豆一分钟都不想待: 没有

    That's all .

    欢迎工作一到五年的Java工程师朋友们加入Java高并发: 957734884,群内提供免费的Java架构学习资料(里面有高可用、高并发、高性能及分布式、Jvm性能调优、Spring源码,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多个知识点的架构资料)合理利用自己每一分每一秒的时间来学习提升自己,不要再用"没有时间“来掩饰自己思想上的懒惰!趁年轻,使劲拼,给未来的自己一个交代!

    相关文章

      网友评论

        本文标题:2019年互联网寒冬,带你走进真实的面试杀出重围

        本文链接:https://www.haomeiwen.com/subject/dhprvqtx.html