曾经做的功能
边面边刷
Java 8
Stream流
-
中间操作
-
filter
-
map
-
distinct
-
sorted
-
limit
-
skip
-
flatMap
- 一对多
-
-
终结操作
-
foreach
-
count
-
min&max
-
collect
-
查找与匹配
- anyMatch、allMatch、findAny、findFirst
-
reduce
-
Optional
CompletableFuture
- 异步下发人员信息给设备
函数式接口
- 指仅仅只包含一个抽象方法,但是可以有多个非抽象方法(也就是上面提到的默认方法)的接口
方法引用
处理设备上传的记录
用redis的消息队列
- 缓存列表用rightPush
- 取列表用range命令
如何避免重复设备重复上传消费记录和保存消费记录
-
uniqueKey
- 卡号+卡流水+消费类型+消费机时间戳
-
redis会保存每一种记录的时间戳
可以重新上传,选择指定日期
信息屏下发图片
netty
- 直接下载文件流
- 分包断点续传
自己的诉求
系统功能描述
登录
-
pc用户名密码
- httpsession
-
app
Controller
- log
- 切面自定义鉴权
security
- 路径白名单(过滤器实现)
- xss(也是过滤器实现)
写app接口
数据迁移
DruidDataSource构建jdbcTemplate
定时清理数据
ThreadPoolTaskScheduler(底层ScheduledThreadPoolExecutor)
文档整理
数据库表结构整理
-
多表如何关联
-
一对多人员证件类型
-
@OneToMany(mappedBy = “persPerson”, cascade = CascadeType.ALL)
private List persCertificateList = new ArrayList<>();- 人员的配置
- 一端使用@OneToMany注释的mappedBy="persPerson"属性表明persPerson是关系被维护端
-
@ManyToOne
@JoinColumn(name = “PERSON_ID”)
private PersPerson persPerson;- 证件实体的配置
-
在JPA规范中,一对多的双向关系由多端来维护。
-
-
一对一关系
- 一种外键关联
- 一种关联表
-
多对多用户角色
-
@ManyToMany(targetEntity = AuthUser.class)
@JoinTable(name=“AUTH_USER_ROLE”,
joinColumns=@JoinColumn(name=“AUTH_ROLE_ID”,referencedColumnName=“ID”), inverseJoinColumns=@JoinColumn(name=“AUTH_USER_ID”,referencedColumnName=“ID”))
private Set users = new HashSet<>();- 角色实体的配置
-
@ManyToMany(targetEntity = AuthRole.class, fetch = FetchType.LAZY)
@JoinTable(name = “AUTH_USER_ROLE”, joinColumns = @JoinColumn(name = “AUTH_USER_ID”, referencedColumnName = “ID”),
inverseJoinColumns = @JoinColumn(name = “AUTH_ROLE_ID”, referencedColumnName = “ID”))
private Set roles = new HashSet();- 用户实体的配置
-
-
JPA中CascadeType级联关系
-
ALL
- 拥有以下五种权限。
-
PERSIST
- 级联新增(保存)操作:持久保存一个实体时,也会持久保存该实体的所有相关实体。
- 举个例子:当我要保存一个用户的时候,系统会将此用户拥有的角色也一起保存到数据库中 ,这便是级联保存,如果用户的角色已经存在数据库中,那么在执行级联保存的时候将会报错,这时就需要与级联合并(Cascade.MERGE)一起使用
-
MERGE
- 级联更新(合并)操作:持久保存一个实体时,会持久更新该实体的所有相关实体
-
REMOVE
- 级联删除操作:持久删除一个实体时,与它有映射关系的实体也会跟着被删除。当我们删除一个用户时,会将该用户拥有的所有角色全部删除,因此多对多时慎用级联删除操作
-
REFRESH
- 级联刷新操作:获取一个实体对象的同时也会重新获取最新的关联对象。
-
DETACH
- 级联游离(托管)操作:当删除一个实体时,若该实体有外键关联无法删除时,该权限将撤销所有的外键关联,将此实体删除
-
https://shangguanhong.github.io/2019/07/19/jpa%E4%B8%AD%E7%9A%84cascadetype-%E7%BA%A7%E8%81%94%E6%93%8D%E4%BD%9C-%E8%A7%A3%E6%9E%90/
-
-
数据库的外键级联关系(navicat)
-
CASCADE
- 表示主表在进行更新和删除时,更新和删除从表相对应的记录。
-
NO ACTION(不采取行动)
- 限制在从表有关联记录的情况下,主表不能单独进行删除和更新操作。保持数据的强一致性。
- 在 MySQL 中,no action 与 restrict 的功能相同。而在其他数据库中,no action 可能为不进行任何操作。
-
RESTRICT(禁止)
- 限制在从表有关联记录的情况下,主表不能单独进行删除和更新操作。保持数据的强一致性。
-
SET NULl(设空)
- 表示主表进行更新和删除的时候,从表的对应字段被设为 NULL。
-
-
为什么不推荐使用外键
-
培训文档整理
版本迭代
版本升级
- git获取版本信息版本比较执行对应的sql
bug修复
模块
消费
- 出纳机
- 消费机
- 补贴机
信息屏
整体项目架构
技术选型
-
环境
- jdk1.8
- maven
-
主框架
-
springboot
-
springmvc
-
子主题 3
-
前端
- html
- freemarker
- js
-
-
存储层
-
JPA
-
JDBCTemplate
-
Spring Cache
- 缓存adms一些信息
-
redis
- 保存spring session,通过@EnableRedisHttpSession将Session存放在Redis中进行共享1
- 缓存设备信息
- 缓存设备上传的记录
- 缓存下发的指令
-
-
其他工具
- Lombok
-
开发工具
- idea
- git
自己负责模块
心态调整
找自信
面试前做好最坏预期打算
大胆一点,不怕犯错
即使你把原来的项目搞得特熟,也不一定用得到,纯粹是面试
顶多算多一份收入而已,尽力去争取
面试官对你的项目不了解,随便说自己的技术栈
还年轻,不要怕失败
互相选择
不要指望所有问题都答上来
失败也没有关系
不可能完全匹配新公司的技术栈,应该展现学习能力
领导叫他去新公司也是废物一个
找工作就是找个交社保的地方
不要理所应当的觉得老板应该对你好,他需要的是你帮他挣钱,解决问题
别人懂得不一定有你多
没必要花大量时间去了解一些不太实用的东西
不要被一些知乎等网站影响自己的精力
别觉得低人一等就行
影像中最深刻的问题
精度丢失
事务失效问题?
遇到JVM问题,我无从下手,但后来我熟悉了,如何模拟?
很难重现问题?如何解决,如何重现?借助了哪些工具?用了什么命令?得到什么信息?
性能调优过程?
adb查看命令查看日志过程?wireshark
- 设备出现接收问题,或者没有正确下发
怎么定位到固件问题的
- 通过wireshark传上来的参数有问题,哪个参数有问题
- CHECK命令正常下发,返回指令ok,但是依旧没有上传,所以是固件问题
你的优缺点是什么
-
缺点
- 学习(学习有一些知识点无法在实际场景中落地,导致一些系统问题无法吸收,比如SpringCluoud)
- 工作(非自因素导致的焦虑,不知道委婉沟通,固件问题?)
- 生活(社恐?)
-
优点
- 找资源
- 计划
- 笔记