个人技术栈(java和大数据部分)

工作四五年了,做了不少项目,学了不少技术框架,了解不不少设计思想,自身的技术积累也有不少了,今天用头脑风暴的方式梳理一下,可能不全,后面会不断完善。

技术栈
    1.java:集合、多线程、JVM原理
    1)  Collection
        List
        ArrayList
        LinkedList (Deque的实现)
        Vector (Stack的父类)
        推荐用 Deque替换 Stack
        Set:
            HashSet
            TreeSet
        Map:
            HashMap (对比HashTable,安全问题有哪些(2个) )
            TreeMap
            ConcurrentHashMap(1.7和1.8的区别)
            集合类的扩容原理?
    2) 多线程:
        创建线程的方式:
            a)继承 Thread类
            b)实现 Runnable 接口
            c)实现 Callable 接口(有返回值,使用 Future)
            线程的状态有哪些?在哪能看这些状态?
            sleep, wait, yield
            notify, notifyAll
            join
        线程池:
            Fixed
            Singleton
            Cashed
            Schedule
            线程池的参数有哪些?工作
            流程?内部实现原理?
            CountDownLatch,
            CyclicBarrier的功能和区别?
            Semophere fIfe?
            AQS 原理?
            JUC包中的各种工具?
    3)锁:
        synchronized、Lock 区别?
        偏向锁、轻量级锁、重锁
        可重入锁、排他锁
        乐观锁、悲观锁
        读锁、写锁
        CAS 存在的问和解决方式?
        锁粗化
    4) JVM
        jvm内存结构?
        堆内存分区
        垃圾回收算法?
        垃圾回收器?7+1(7个老的收集器+ZGC)
        minor gc和fullgc发生位置?触发条件?带来的问题?
        内存泄漏?
        常用命令 (jmap、jstack、jstat等)
    5)其他:
        java类加截过程?双亲委派机制,破坏双亲委派机制
        反射机制
        注解
2.Spring (SpringBoot)
    1) spring 核心思想:IOC、AOP(虽然写起来不难,但切片相关概念比较难记)
    2) bean的生命周期
    3) spring 事务的传递方式 (7种)
    4) springMVC 原理
    5) Mybatis 原理
    6) 拦截器、过滤器
3.微服务
    1 SpringCloud:
        注册中心:Eureka、concul. zookeeper
        配置中心:SpringCloudConfig
        网关:zuul
        负责均衡:Ribbon
        服务器容错:hystrix
        声明式 Http客户端:Feign
        通信方式:http restful
    2) SpringCloudAlibaba:
        注册中心:nacos
        配置中心:nacos
        负载均衡:Ribbon
        声明式 Http客户端:OpenFeign
        服务器容错:Sentinel(限流、熔断、降级)
        网关:SpringCloud Gateway(webflux编程模式)
        调用链路监控:Sleuth
        分布式事务:Seata(两段提交)
        通信方式:httprestful
    3 dubbo
        注册中心:zookeeper
        通信方式:RPC
        RPC和http的区别?
        dubbo 替换 openFeign的实践
4.大数据
    1) 数据计算
        flink, spark, mapreduce, hive
    2)数据存储
        oltp: mysql, postgreSql
        ElasticSearch
        olap: hdfs, hbase, clickhouse, kylin
        其他:redis
    3)数据传输
        消息队列:kafka、
        数据同步:canal、flink
        cdc, flume
    4) 资源调度
        yarn、 k8s
    5) 相关概念和问题:
        数据倾斜
        高可用性
        数据一致性
        幂等性
        高并发
        并行度
        作业编排
        
    flink:
        调度过程?
        提交过程
        作业执行过程
        streamGraph到jobGraph到ExecutionGraph到执行 task转化过程
        slot的概念
        井行度和slot数的关系
        幂等性保证
        checkpoint原理,增量checkpoint
        savepoint 和checkpoint同点
        barrier的作用
        barrier对齐和对齐的优化
        状态后媏有哪些
        作业调度楧式有哪些?
        yarn的三种调度方式
        批流一体
        动态表
        水印
        
    mapreduce:
        shuffle 原理以及和spark中shuffle的区别

    spark :
        划分 stage的依据
        shuffle 原理
        rdd
        
    mysql:
        索引
        锁(参考java 的锁外加gaP锁,next锁等)
        事务 (acid)原理
        死锁
        sql优化
        执行计划
        慢查询
        分库分表(相关第三方组件)
        分区
        (innodb)
        回表
    postgresql:
        参考mysql

    hbase:
        读写流程
        wal
        hlog
        memStore
        blockCash
        storefile
        regionServer
        region
        region 切分和合并
        布隆过滤器
        LSM树(内存+磁盘)
        跳表
        
    Hdfs:
        读写流程
        小文件合并
        
    ElasticSearch:
        倒排索引
        正排索引
        query 和filter区别
        shard
        选主流程
        lucene
        slor
        建索引
        读索引
        深度查询
        排序算法
        打分策略
        分词器
        分词算法
        查询优化
        segment
        FST(Finite StateTransducers有穷状态转化器)
        前缀树
        tf-idf
        bm25

    kafka
        工作流程
        架构
        高可用性
        选主流稈
        partition
        一致性
        幂等性保证

    yarn, k8s:
        工作原理
        提交流程
        调度策略
        
    docker:
        镜像、容器的关系(类比类和对象,镜像是类,容器是对象)

写在最后:

        本人其实一直都有转算法岗的想法,只是读书期间没有在这方面投入足够的精力,工作之后继续学习相关的内容。对于算法岗的要求和本人的实际情况也做了分析,算法研究可能不太适合,至少目前不适合,算法工程类的岗位对我来说还是可以胜任的,从取数据,到计算模型,到预测输出这个流程目前已有成熟的框架,这个和大数据常规的数据处理流程有些类似,所以对我来说更多的是要在具体业务场景中加深对这一过程的理解。当然基本的机器学习算法、深度学习也是要掌握的。

        除了对算法岗一直以来的向往,另一个岗位——架构师,也算是我之前的努力方向,最终能不能当架构师对我来说不重要,重要的是要具备架构师的能力,目前来看,架构师级别的技术已经有一定的积累,但仍然在路上。个人觉得架构师更多的是需要在实际工作中不断地实践,不断的提升自己的软硬实力,才能配的上这个职位,不然纸上谈兵,我也可以的,哈哈。

        关于语言,从最初在学校学习的c/c++,到后来学习的java,再到做全栈时前端的javaScript,没有在工作中用过的python、scala都有不同程度的了解。多种语言学习也是未来的一项工作,从阅读源码的需求来看,这个是必要的。

        最后,我很热爱技术,虽然没有在某一项技术上达到精通,但是用过学过的技术都会主动了解其内部原理,做到知其然和知其所以然。源码看的不多,但是从最初对shiro,spring,xxl-job,flink-cdc,canal源码的粗略浏览和对flink源码的仔细探索,深刻感受到项目的复杂度和源码的阅读难度成正相关,搞不清基本原理,不建议阅读源码。

        以上就是我对自己前五年技术积累的总结。

你可能感兴趣的:(笔记,java,spring,elasticsearch,大数据,flink)