Java实习的经验总结分享

实习经验分享 这个视频的笔记

面试

总结一个属于自己的思维导图,里面包含了所以面试相关的知识点,分门别类整理,不要全部照搬网络上的八股文啊,或者是直接拿别人的八股文来背诵,例如:直接拿javaguide,牛客八股文打下来下背诵。要有自己的思考,自己进行归纳总结,印象才足够深刻

还有一点,在面试的时候,没必要去纠结,没必要一定要学完了springcloud 等微服务技术栈,才敢去面试

  • 有些时候,公司并不一定要会到微服务技术栈(绝大部分小公司)
  • 如果企业需要springcloud,都是入职企业后再进行学习,有这种压迫感,反而能学的更快且印象更深刻。很多技术栈是我在入职已经在学的,每家公司采用的技术栈都不同,没必要所有的技术栈都学完才有敢去面试。

Git(入职企业必备)

自己平时开发项目,都是直接在本地进行开发,很少经常去就自己的代码通过git命令,或IDEA里面界面按钮进行提交到远程操作,有也只是进行了很简单的push 和 pull命令,再有就是个人的项目都是一个人的情况下,很少产生合并代码冲突等问题。也没有解决过什么代码冲突。而企业项目一般都是多人进行开发,在每次推送代码前,一定要记得先拉取远程最新的代码,然后再进行push

git操作不熟练,操作失误,会造成代码合并出现问题,合错了分支之类的。其实也就那个几个命令,多看几篇文章就搞定了!

  • git命令基本操作

    • git checkout dev:切换分支
    • git add ./xx:将代码提交到暂存区
    • git commit -m“ 备注信息”:提代码时候的备注信息
    • git push origin dev:推送代码(每次push的时候,先要pull代码)
    • git pull origin dev:拉去代码
    • git reset --hard:回退代码(合并或者提交错了,撤回)
    • git merge dev:合并dev分支代码
    • git cherry-pick:拷贝另一个分支的某次提交代码到当前分支
    • git stash:暂存未提交的代码(不想提交代码但要切换分支时,先暂存一下,避免丢失)
    • git stash pop:恢复暂存未提交的代码
  • IDEA中git的的基本操作(同上)

    • merge into current:合并某个分支到当前分支
    • 入箭头:拉去代码
    • 出剪头:push代码
  • 工作中git的分支管理

    • master主分支(生产prod)

    • release 预发布(灰度grey,测试稳定后再发布)

    • dev 开发测试阶段(测试test)

    • yrp-login、zhangsan-service(具体需求模块的开发)

真实企业项目

  • Devops 云效(代码托管)

    • 项目环境
      • dev 本地开发的环境
      • test 测试(有专门的数据库)
      • grey 恢复环境(预发布阶段,与生产共用同一套数据库)
      • prod(生产环境)
  • 枚举类(替换常量)

    • 去掉魔法数字,可读性增强
    • 可维护性增强,易于管理
  • 线程池

    • 异步的执行某个任务(提升接口的性能)
  • 设计模式

    • 责任链模式(纵向扩展 加一条链路)。
      • List(value = 处理逻辑链路)
      • 用户登录逻辑
        • 登录参数校验
        • XXX(新加入功能)
        • 登录参数准备
        • 封禁校验
        • 身份认证(db)
        • 操作db
        • 操作redis
        • 操作es
    • 策略模式(横向扩展 多种登录方式)
      • Map(key value)
        • key = qq登录,value = qq登录处理逻辑
        • key = 微信登录,value = 微信登录处理逻辑
        • key = 手机号登录 value = 处理手机号登录的逻辑
  • redis 实现功能

    • pub sub 或者rabbit mq去实现,用于刷新本地缓存
    • 在设计中采用redis基本数据结构去实现功能,结合key的过期时间
      • set
      • string
      • zset
      • hash
      • list
  • 定时任务(xxl-job)

    • corn表达式,定期的去干某件事情
  • Caffine本地缓存(高性能)

    • 采用Caffine作为本地缓存,定期的去db加载数据,若db有变动,通过redis / mq的pub sub机制去reload本地缓存中的数据
    • 可以理解成一个特殊的map,带定时器的map,定期去db 加载数据
    • 补充:spring自带的定时任务,也能定期的去刷新缓存,也可以设置时间间隔,例如每5分钟执行一次
  • Elasticsearch

    • 一个索引(对应mysql中的一张表)
    • Kibana 可视化
    • query dsl(对应Java里用RestHighLevelClient)
    • 实现功能:附近的人
  • MySQL

    • 索引的创建,什么时候需要添加索引,又应该添加什么类型的索引

      • 普通索引
      • 唯一所谓
    • 联合索引(顺序性)ab添加联合索引,如果where后面只有b,则无法命中

    • union all 后order by 会失效(踩坑)

    • insert ignore 忽略插入失败报错,继续执行后续代码,不中断程序

    • insert ... on duplicate key update 只能用于加了唯一索引的字段

      • 先执行更新操作,如果更新失败,则执行插入操作
  • MyBatis XXXMapper.xml

    • 小于号可以用 <![CDATA[ ]]>替换
    • 动态sql
      • foreach用的比较多
      • where
      • if
  • Spring事务

    • 事务只有在一些安全性要求比较高(订单等,账户等)比较核心的业务的时候,才会给代码添加事务,不是任何情况下串行的操作DB都要去加事务(这样反而会影响性能)
  • Java新特性

    • Stream流
      • Optional
    • Lamdba表达式
  • Guava 工具包

    • 不可变集合
  • Apache Common工具包

    • 集合、对象、字符串判空
  • Java8日期处理

    • LocalDateTime
      • 获取当前的时间戳
      • 获取当前年、月、日、时、分、秒
    • System.currentTimeMillis(
    • LocalDateTime与时间戳转化

学习进度(实习期间)

带学习,可能现在用不到

  • Elasticsearch

    • Query DSL语句
    • kibana 可视化(写增删改查语句)
    • RestHeihtLevel
  • Rabbit mq

  • EasyExcel

  • stream和lamdba

  • spring cloud netflix/ alibaba 微服务

  • docker

  • xxl-job

  • Caffeine

  • Guva 工具包

  • Apache Common工具包

    • ImmutableMap(最多能添加5组 key,value对)
    • lmmutableSet
    • mmutableList
    • lmmutablePair
  • golang语言

    • golang基础语法
    • gin 框架 web项目
    • orm 框架
  • k8s

  • 对接第三方支付(支付宝 微信)

感想

  • 定要多问,自己没法解决,网上找不到相关解决方式的话ǐ那就直接 大胆 的 去问,或者是一些业务上的问题,可以直接去问
  • 继续保持学习(一边做项目开发,边学习企业项目中的自己没有掌握的技术栈和知识点)。
  • 定要学会总结,将问题的解决过程转化成文档,并且归纳分类。下次在遇到就能快速的解决
posted @ 2025-03-20 20:52  韩熙隐ario  阅读(80)  评论(0)    收藏  举报