【面试感悟】java程序员职业规划 面试衡量的3方面(项目经验,基本技术,个人潜力)面试心态,工作心态

引子

从过完年回苏州,就开始找工作,差不多1个半星期的时间,最后和一家公司谈好。

我个人情况比较特殊,30多岁,毕业前面5-6年做软件,后来就自己创业做线上粉丝运营,最近一年,把现在公司主流用的的技术栈,中间件多熟悉了一下,也通过几个项目练习了一遍。同时自己对大数据分析比较刚兴趣,趁着自己自由时间比较多,所以又把hadoop整个离线分析框架(hdfs,yarm,hive,hbase,flume),以及storm在线流式分析框架都学习了一遍。

学是一方面,在找工作的过程中,还是要对面试中经常遇到的问题有一个整体的了解,也包括自己的职业规划,这个关系到你想向那些公司投简历。

今年的第一个面试就需要先去做题目,发现自己技术基础掌握的不是很好,也可能是时间长了,很多java基础的东西区分的不是很仔细,所以自己在牛客网上刷题,遇到一些不是很明白的,再去发散性的学习提升,后面有机会再去把我的这些错题总结出来。

还有很多想跟大家分享的,不过感觉自己的文笔没有我参考的这个博主【五月的仓颉】好,所以用他的大纲,我总结了一个思维导图,分享给大家。.
参考 面试感悟----一名3年工作经验的程序员应该具备的技能

面试感悟

java

易学难精

语言是职业生涯的一个赛道

职业规划

前3年积累工作经验

  • 比较纯粹的Coder的阶段
  • 团队协作
  • 如何使用项目管理工具
  • 代码如何测试
  • 如何在线上运行

5-10年 技术上独当一面

  • 从一个Coder逐步走向系统分析师或是架构师,成为项目组中不可或缺的人物
  • 研究各种技术实现细节
  • 看了N多好书
  • 写一些博客
  • 在Github上分享技术

10年之后 担任关键职务

  • 对行业有着深入认识
  • 对技术有着深入认识
  • 能从零开始对一个产品进行分析的程序员
  • 担任的都是CTO、技术专家、首席架构师等最关键的职位

面试衡量的3方面

项目经验

  • 虽然大部分情况都是做产品的一个功能或一个模块,但是你有没有把整个系统架构或产品搞清楚,并能介绍清楚

    • 为什么做这个系统?
    • 这个系统的价值是什么?
    • 这个系统有哪些功能?
    • 优缺点有哪些?
    • 如果让你重新设计这个系统你会如何设计?
  • 总结

    • 明确你的项目到底是做什么的,有哪些功能
    • 明确你的项目的整体架构,清楚地指出从哪里调用到哪里、使用什么方式调用
    • 明确你的模块在整个项目中所处的位置及作用
    • 明确你的模块用到了哪些技术
    • 更好一些的可以再了解一下整个项目用到了哪些技术
  • 绕不开的问题

    • 谈一下你在项目中解决过的比较复杂的问题
    • 问题不是你解决的而是别人解决的,但是你把这个问题弄懂、搞透了,依然是你的经验

基本技术

  • 3-5年工作经验

    • 1 基本语法

      • static、final、transient等关键字的作用

      • volatile关键字的底层实现原理

      • foreach循环的原理

      • 对你技术的考量

        • 深度优先、广度次之为标准
    • 2 集合

      • List、Map、Set

        • 各种实现类的底层实现原理,实现类的优缺点
      • ArrayList、LinkedList、Hashtable、HashMap、ConcurrentHashMap、HashSet的实现原理

      • 掌握CopyOnWrite容器

      • Queue

      • ConcurrentHashMap的问题

        • 1 它的锁分段技术
        • 2 它的读是否要加锁,为什么
        • 3 它的迭代器是强一致性的迭代器还是弱一致性的迭代器
    • 3 设计模式

      • 重点研究常用的十来种

        • 1 你的项目中用到了哪些设计模式,如何使用
        • 2 知道常用设计模式的优缺点
        • 3 能画出常用设计模式的UML图
    • 4 多线程

      • 基本上不会再问你怎么实现多线程了

      • Thread和Runnable的区别和联系

      • 多次start一个线程会怎么样

      • 线程有哪些状态

      • 问题

        • 假如有Thread1、Thread2、Thread3、Thread4四条线程分别统计C、D、E、F四个盘的大小,所有线程都统计完毕交给Thread5线程去做汇总,应当如何实现?

          • 分析:先多线程同步执行,需要有一个线程等待汇总
          • 可以通过发令枪,循环栅栏,阻塞队列,CompletableFuture异步回调
      • 线程池

        • 用的线程池有几种?
        • 这几种线程池之间有什么区别和联系?
        • 线程池的实现原理是怎么样的?
        • 实际一点的,会给你一些具体的场景,让你回答这种场景该使用什么样的线程池比较合适
      • 多线程同步、锁

        • synchronized和ReentrantLock的区别
        • synchronized锁普通方法和锁静态方法
        • 死锁的原理及排查方法等等
    • 5 IO

      • File IO

      • Socket IO

        • 阻塞/非阻塞的区别

        • 同步/异步的区别

        • 四种IO模型

          • 阻塞IO
          • 非阻塞IO
          • 多路复用IO
          • 异步IO
        • Socket IO如何和这四种模型相关联。

      • NIO的原理、NIO属于哪种IO模型、NIO的三大组成

        • NIO并不是严格意义上的非阻塞IO而应该属于多路复用IO
        • 知道NIO会阻塞在Selector的select方法上
      • Netty

        • 当前最好的NIO框架
    • 6 JDK源码

      • 看你平时是不是爱钻研了

      • String的hashCode()方法是怎么实现的

      • 1 List、Map、Set实现类的源代码

      • 2 ReentrantLock、AbstractQueuedSynchronizer(AQS)的源代码

      • AQS详解

        • 抽象的队列式的同步器

          • 同步类实现都依赖于它

            • 如常用的ReentrantLock/Semaphore/CountDownLatch
        • 维护了2个属性

          • 一个volatile int state(代表共享资源)

            • 访问方式

              • getState()

              • setState()

              • compareAndSetState()

                • CAS
          • 一个FIFO线程等待队列(多线程争用资源被阻塞时会进入此队列)

        • 对共享资源state,有两种资源共享方式

          • 独占方式 Exclusive

            • 如 ReentrantLock

            • tryAcquire 尝试获取资源

              • 成功则返回true
              • 失败则返回false
          • 共享方式 Share

            • 如 Semaphore/CountDownLatch

            • tryAcquireShared(int) 尝试获取资源

              • 负数表示失败;
              • 0表示成功,但没有剩余可用资源;
              • 正数表示成功,且有剩余资源
          • AQS也支持自定义同步器同时实现独占和共享两种方式

            • 如ReentrantReadWriteLock
      • 3 AtomicInteger的实现原理

        • 主要能说清楚CAS机制并且AtomicInteger是如何利用CAS机制实现的
      • 4 线程池的实现原理

      • 5 Object类中的方法以及每个方法的作用

    • 7 框架

      • 问你一下你们项目中使用的框架

      • 给你一些场景问你用框架怎么做

        • 举例

          • 在Spring初始化bean的时候做一些事情该怎么做
          • 想要在bean销毁的时候做一些事情该怎么做
          • MyBatis中$和#的区别
      • 问一些框架的实现原理

        • Spring AOP的实现原理
        • 难的:画一下Spring的Bean工厂实现的UML图
    • 8 数据库

      • union和union all的区别
      • left join
      • 几种索引及其区别
      • 数据库性能的优化
    • 9 数据结构和算法分析

      • 会比不会好而且在工作中绝对能派上用场

      • 数组、链表是基础

      • 栈和队列深入一些但也不难,树挺重要的

      • 比较重要的树AVL树、红黑树

      • 要知道什么是二叉查找树、什么是平衡树,AVL树和红黑树的区别

      • 你知道索引使用的是哪种数据结构实现吗?

      • 算法分析

        • 排序,查找

        • 分治法

        • 动态规划

        • Collections.sort方法使用的是哪种排序方法

          • TimSort的排序,增强型的归并排序法
    • 10 Java虚拟机

      • Java虚拟机的内存布局
      • GC算法及几种垃圾收集器
      • 类加载机制,也就是双亲委派模型
      • Java内存模型
      • happens-before规则
      • volatile关键字使用规则
      • 走向大牛的路上,不可不会
    • 11 Web方面的一些问题

      • 谈谈分布式Session的几种实现方式

      • Session和Cookie的区别和联系以及Session的实现原理

      • web.xml里面的内容是重点

        • Filter、Servlet、Listener 知根知底
      • get/post的区别

      • forward/重定向的区别

      • HTTPS的实现原理

      • SOA和RPC,面向服务体系

        • 大型分布式架构必备

个人潜力

  • HR面试

    • 1 简历中写的过去工作经历的离职原因
    • 2 当前公司薪资待遇
    • 3 期望能到怎样的一家公司
    • 4 个人未来的发展方向
  • 面试心态

    • 1 不紧不慢,平心静气

    • 2 条理清晰

    • 不要把面试当作面试,当做一次技术交流

      • 把面试的心态从我要找到一份工作转变为我要通过面试去发现不足、提升自己
    • 如果自己热衷于研究技术的朋友,真的要有自信

为什么java易学难精

  • 易学

    • Java语言的设计者帮助Java程序员做了这么多事情
  • 难精

    • 假如在应用运行过程中遇到了语法层面和应用层面之外的错误,应当如何处理?
    • 比如线上环境出现内存溢出怎么办?
    • GC时间过长怎么办?
    • IO长时间没反应怎么办?
    • 方法抛出莫名其妙的异常怎么办?
    • 这些问题需要大量的经历、大量的实践、大量对Java底层实现细节的研究

工作的心态

  • 建议看看这本书【软技能-代码之外的生存之道】

  • 把自己与公司的雇佣关系

    • 变为自己也是一个企业与公司是一种合作关系

      • 公司是自己的一个重要客户(贡献大部分收入)
      • 自己作为企业,那企业发展需要考虑哪些方面

30岁之后工作不好找,或者30岁之后就要转行?

  • 这个就像一个老中医一样,老中医一眼就看出这个人有什么问题,而新人需要查这个查那个,还不一定能准确定位

  • 对于一个新的容器

    • 老手一看就知道 这是不是新壶装老酒

      • 还是在技术上加入了哪些新的特性,解决了原来哪方面的问题
    • 新手

      • 新手去学,要一段时间,再去用,有没多少实际经验,不知道怎么配置调优

XMind - Trial Version

你可能感兴趣的:(一图流思维导图,java,面试,职业规划)