每日小结
Java 答辩结束了, Yeah
今天开始刷题
Hash Map, Hash Set vs Tree Map, Tree Set
c++中的map
, set
默认是treemap和treeset, 底层基于红黑树, 元素始终保持有序
而unordered_map
, unordered_set
底层基于哈希表
#对比
查询/插入/删除
数据结构 | 底层 | find/get/contain | set | delete |
---|---|---|---|---|
map | tree | O(1) | O(1) | O(1) |
unordered_map | hash | O(1) | O(1) | O(1) |
数据结构 | 底层 | find/contain | insert | delete |
---|---|---|---|---|
set | tree | O(1) | O(1) | O(1) |
unordered_set | hash | O(1) | O(1) | O(1) |
遍历
map
和set
都支持按序遍历, 而unordered_map
, unordered_set
天生就不适合按序遍历(底层不是按序存储), 但是可以无序遍历
Java 项目总结
#前端
#后端
#Java Web项目的基本结构
Controller层: 前端实际调用的接口, 包括用户鉴权, 页面跳转等等, 接口内部调用Service层来实现功能.
Service层: 实际的业务逻辑, 一般按照功能分包, 尽量做到与Controller层脱钩, 一般都是些无状态函数(对环境不做任何假设)
DAO层: 与数据库相关的代码, 也被称为持久层
#Spring框架
Spring框架的核心:
通过依赖注入来降低代码之间的耦合(IoC控制反转)
例如:
@Autowired
,@Bean
,@Resource
对AOP的支持
这个没怎么用到
对各种工具的集成和支持
例如: Spring Data JPA, Spring Security等等
#Spring Boot框架
Spring Boot能够自动识别项目中开启的功能(通过扫描安装的依赖包or配置文件?)
项目配置全部写在application.[properties|yml]
中, 框架会自动识别
也可以自己定义一些key, 在代码中通过@Value("xxx.yyy")
注入
#JWT鉴权
JWT的三部分: Header.Payload.Signature
1 | Header = {"alg":"HS256","typ":"JWT"} |