学习Gson序列化源码简单记录
简单按照源码实现下「 List to JsonStr」。直接实现也很简单,不过为了锻炼下阅读源码的能力,还是练习跟踪下源码,找出大体框架,不沉迷细节,把握整体。
Gson的使用环境约定这里使用的 Java 环境,使用 Maven 管理依赖
Oracle JDK8
Gson2.8.6
12345<dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.8.6</version></dependency>
使用123456789101112131415161718192021222324252627282930313233import com.google.gson.Gson;import java.util.ArrayList;/** * @author GreenHatHG * @since 2020-05-12 */public ...
自用书签(移至notion更新!)
UpdateTime: 2020/03/12
DockerDocker —— 从入门到实践 · GitBook (Legacy)
创建尽可能小的 Docker 容器 - yexiaoxiaobai - SegmentFault 思否
查看 docker 容器使用的资源 - sparkdev - 博客园
使用 docker 对容器资源进行限制 | Cizixs Write Here
[求助]docker build 速度非常慢 - V2EX
Hexohexo的next主题个性化教程:打造炫酷网站 | Moorez
手把手教你使用Hexo + Github Pages搭建个人独立博客 | 令狐葱@前端笔记
HEXO+NEXT主题个性化配置 | SORA
Hexo博客NexT主题从v5.x.x更新到v6.x.x的记录及总结 | 曹雪松de博客|CoderBoy’s Blog
如何在 hexo 中支持 Mathjax? - 简书
常用数学符号的 LaTeX 表示方法
超详细Hexo+Github博客搭建小白教程 | 韦阳的博客
MathJax使用LaTeX语法编写数学公式教程 - 作业部落 ...
自用工具(移至notion更新!)
UpdateTime: 2020/03/12
英语Check Spelling, Style, and Grammar with After the Deadline
英语句子成分分析 在线英语句子结构分析器 语法分析软件 句解霸
Grammar Check Online - It’s a Free tool by NOUNPLUS
资源timmy3131/design-resource: A list of design resources.
分享|440+ 个免费的编程 & 计算机科学的在线课程
金老师的计算机技术自学网站
猴头客 | 专注优质视频教程、网络资源的休闲小站
Windsys Project
WINOS | 前沿的精简系统下载
PDF下载计算机计算机书籍控
计算机电子书
免费的计算机编程类中文书籍
免费IT计算机电子书下载网站
IT熊猫-计算机书籍下载
综合PDF Drive - Search and download PDF files for free.
Jiumo Search 鸠摩搜索 - 文档搜索引擎
书享家-电子书下载导航
Library Gene ...
通俗理解数据库三大范式
1NF 2NF 3NF
1NF在任何一个关系数据库中,第一范式(1NF)是对关系模式的基本要求,不满足第一范式(1NF)的数据库就不是关系数据库。
第一范式是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即每一个属性都是原子的,不能再分,也可以理解为不能表中套表。
如下人员基本信息表:
这样的表是不能创建的,我们可以把这个表拆为基本信息表和地址表,通过人员编号来建立联系
或者是
2NF第二范式是在第一范式基础上面提出来的,也就是说满足第二范式意味同时满足了第一范式。
第二范式:一张表中每个属性都是原子的,并且不存在对主键的部分函数依赖。(部分函数依赖比较晦涩,看例子好懂)
下面是学生信息表,最后两项为课程号和该门课成绩
在这张表里面学号是主键吗?学号不是主键,学号能决定姓名,年龄,地址,但是凭学号这一项,是决定不了成绩这一项,所以这里学号不是主键。
所以这张表的主键是(学号,课程号)
凭(学号,课程号)可以决定成绩;但是凭学号就可以决定姓名,年龄和地址,不需要课程号。
所以在这里尽管主键是(学号,课程号),但是姓名,年龄和地址只要学号就可以决定的,也就 ...
水SpringBoot与SpringCloud
项目有感
微服务微服务的具体概念或者优缺点可以看这个:
微服务-解决复杂问题 | 千锋教育-李卫民
微服务架构,更好的进行分布式系统开发,拆分单体应用,将一个应用拆分成多个服务,每一个服务都是一个可以独立运行的项目。
微服务分布式开发会遇到这四个问题:
这么多服务,客户端如何访问
这么多服务,服务之间如何通信
这么多服务,如何治理
服务挂了,怎么办?
解决方案:
Spring Cloud,是一套生态,是为了解决微服务架构遇到的问题,想要使用Spring Cloud必须基于Spring Boot
后来去了解了下,现在Spring Cloud微服务方案有三套:
Spring Cloud Netflix 目前市场上主流的 第一套微服务架构解决方案:Spring Boot + Spring Cloud Netflix
Spring Cloud Netflix为了解决第一个问题,提出了API网关组件—->Zuul
为了解决服务之间如何通信问题,提出了Feign,它是基于HTTP通信的,同步并阻塞的
为了解决如何治理服务问题,提出了服务注册与发现组件—>Eureka
为了解决 ...
2019上海网络赛B题
上海站B题Light bulbs
上海站B题Light bulbs
题解签到题
排序
前缀和
差分
注意此题卡时间又卡空间,单纯普通类型一维数组长度不能超过1e6
前缀和定义前缀和是一种重要的预处理,能大大降低查询的时间复杂度。我们可以简单理解为“数列的前n项的和”
通式给定一个数组A[1..n],前缀和数组PrefixSum[1..n]定义为:PrefixSum[i] = A[0]+A[1]+…+A[i-1];举例A[5,6,7,8] —> PrefixSum[5,11,18,26]
PrefixSum[0] =A[0] ;PrefixSum[1] =A[0] + A[1] ;PrefixSum[2] =A[0] + A[1] + A[2] ;PrefixSum[3] =A[0] + A[1] + A[2] + A[3] ;
差分定义差分就是将数列中的每一项分别与前一项数做差,例如:一个序列1 2 5 4 7 3,差分后得到1 1 3 -1 3 -4 -3
注意:
得到的差分序列第一个数和原来的第一个数一样(相当于第一个数减0)
差分序列最后比原序列多一个数(相当于0 ...
Java设计模式-观察者模式
《Head First Design Patterns》—The Observer Pattern
引言报纸订阅可以从报纸或杂志的订阅方式去了解观察者模式是什么
报纸或杂志的订阅方式:
从上面的订阅方式可以这样认为观察者模式:
Publishers + Subscribers = Observer Pattern报纸出版商 + 订阅者 = 观察者模式
we call the publisher the SUBJECT and the subscribers the OBSERVERS.报纸出版商称为SUBJECT(目标),订阅者称为OBSERVERS(观察者)
继续解释开始时
状态改变时
观察者模式通过上面例子已经生动形象得展示了什么是观察者模式
定义The Observer Pattern defines a one-to-many dependency between objects so that when one object changes state, all of its dependents are notified and updated au ...
2019徐州网络赛补题
B-so easy
B-so easy参考:2019徐州网络赛 B so easy - binarycopycode - CSDN博客
题目
2000ms
262144K
大意有n个点,分别标号为1-n,两种操作:
1 X,表示去掉第X个点
2 X,表示查询[x,n]内第一个存在的点。
题解模拟并查集操作即可(当时并没有想到系列),具体看代码
注意,因为数据量大,所以得用unordered_map代替数组
(unorderd_map的存取查询操作都近似于O(1),map是带log的,而且1e6太大,map会T)
1234567891011121314151617181920212223242526272829303132333435/** * 2019-09-08 21:36 * 1089ms * 20096kB * c++11 */#include <iostream>#include <unordered_map>using namespace std;//Map[x]存x右边第一个在哪,初始的是Map[x]=x+1unordered_map< ...
SpringBoot+Shiro+Jwt填坑-3
整合SpringBoot
省去建表,数据库读取代码。
程序逻辑在SpringBoot中使用JWT来做接口权限认证,安全框架依旧使用Shiro
我们POST用户名与密码到/login进行登入,如果成功返回一个加密token,失败的话直接返回401错误。
之后用户访问每一个需要权限的网址请求必须在header中添加Authorization字段,例如Authorization: token,token为密钥。
后台会进行token的校验,如果不通过直接返回401。
Token加密说明
携带了 username 信息在 token 中。
设定了过期时间。
使用秘钥对 token 进行加密。
Token校验流程服务端接收到token 之后,会逆向构造过程,decode 出JWT 的三个部分,这一步可以得到sign的算法及 payload,结合服务端配置的 secretKey,可以再次进行 Signature 的生成得到新的 Signature,与原有的 Signature 比对以验证 token 是否有效,完成用户身份的认证。
Maven添加依赖
1234567891011< ...
SpringBoot+Shiro+Jwt填坑-1
shiro介绍
RBAC在了解Shiro之前,我们需要认知用户权限模型。
基于角色的权限访问控制(Role-Based Access Control)作为传统访问控制(自主访问,强制访问)的有前景的代替受到广泛的关注。在RBAC中,权限与角色相关联,用户通过成为适当角色的成员而得到这些角色的权限。这就极大地简化了权限的管理。
为实现一个较为灵活的用户权限数据模型,通常把用户信息单独用一个实体表示,用户权限信息用两个实体表示。
用户信息用LoginAccount表示,最简单的用户信息可能只包含用户名loginName及密码password两个属性。实际应用中可能会包含用户是否被禁用,用户信息是否过期等信息。
用户权限信息用Role与Permission表示,Role与Permission之间构成多对多关系。Permission可以理解为对一个资源的操作,Role可以简单理解为Permission的集合。
用户信息与Role之间构成多对多关系。表示同一个用户可以拥有多个Role,一个Role可以被多个用户所拥有。
(图源:RBAC模型:基于用户-角色-权限控制的一些思考 | 人人都 ...