实习经验分享 这个视频的笔记
面试
总结一个属于自己的思维导图,里面包含了所以面试相关的知识点,分门别类整理,不要全部照搬网络上的八股文啊,或者是直接拿别人的八股文来背诵,例如:直接拿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 = 处理手机号登录的逻辑
- Map(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表达式
- Stream流
-
Guava 工具包
- 不可变集合
-
Apache Common工具包
- 集合、对象、字符串判空
-
Java8日期处理
- LocalDateTime
- 获取当前的时间戳
- 获取当前年、月、日、时、分、秒
- System.currentTimeMillis(
- LocalDateTime与时间戳转化
- 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
-
对接第三方支付(支付宝 微信)
感想
- 定要多问,自己没法解决,网上找不到相关解决方式的话ǐ那就直接 大胆 的 去问,或者是一些业务上的问题,可以直接去问
- 继续保持学习(一边做项目开发,边学习企业项目中的自己没有掌握的技术栈和知识点)。
- 定要学会总结,将问题的解决过程转化成文档,并且归纳分类。下次在遇到就能快速的解决