0%

一直觉得西里尔字母难背,直到遇见希腊字母。就凭暴力替换就能认识好多单词了。去查资料发现西里尔字母果然和希腊字母有渊源的。

  1. А а A 阿

  2. Б б B 百

  3. В в V 外

  4. Г г G 该
    Γ γ:伽玛 Gamma

  5. Д д D 呆
    Δ δ:德尔塔 Delte

  6. Е е E 耶

  7. Ё ё Yo 腰

  8. Ж ж Zh 日

  9. З з Z 兹
    Ζ ζ :捷塔 Zeta

  10. И и I 伊

  11. Й й 短伊

  12. К к K 克

  13. Л д L 埃尔
    ∧ λ:拉姆达 Lambda

  14. М м M 埃母

  15. Н н N 埃恩

  16. О о O 奥

  17. П п P 拍
    ∏ π:派 Pi

  18. Р р R 埃尔
    Ρ ρ:柔 Rho

  19. С с S 埃斯

  20. Т т T 太

  21. У у U 乌
    Υ υ:宇普西龙 Upsilon

  22. Ф ф F 埃弗
    Φ φ:fai Phi

  23. Х х Kh 哈
    Χ χ: 凯 Chi

  24. Ц ц Ts 茨

  25. Ч ч Ch 切

  26. Ш ш Sh 什

  27. Щ щ Sch 什切

  28. Ъ ъ 特沃尔基兹纳克

  29. Ы ы Y 乌伊

  30. Ь ь 米亚基兹纳克

  31. Э э E 埃

  32. Ю ю Yu 尤

  33. Я я Ya 亚

Россия 替换成 Rossiya
Маркет 替换成 market
Грама 替换成 grama
Кафе 替换成 cafe
метро 替换成 metro
мисс 替换成 miss
миссис 替换成 missis
такси 替换成 taksi
Фото 替换成 photo
дракон 替换成 drakon
мадам 替换成 madam
мобил 替换成 mobil

替换完看,随便也能猜出来意思了,此法可以用于俄语入门培养兴趣以及出门旅游没学过俄语的随便学学用。

在方法上打上@PreAuthorize就是创建了这个Controller的动态代理
会Call AbstractSecurityInterceptor的beforeInvocation方法
call AccessDecisionManager
void decide(Authentication authentication, Object object,
Collection configAttributes) throws AccessDeniedException,
InsufficientAuthenticationException;

AffirmativeBased 肯定:一票通过制
只要有投通过(ACCESS_GRANTED)票,则直接判为通过。
如果没有投通过票且反对(ACCESS_DENIED)票在两个及其以上的,则直接判为不通过。
ConsensusBased 共识决策法

UnanimousBased 一致同意
一票否决
hasScope这里是AffirmativeBased

EL

AffirmativeBased.decide
循环所有voter
看结果是ACCESS_ABSTAIN避免(弃权) ACCESS_GRANTED ACCESS_DENIED
PreInvocationAuthorizationAdviceVoter是去看PreAuthorize和PreFilter的,两个都没有就弃权,否则就去Evaluate这个 expression,这个expression是刚起来的时候拿到的annotation的attribute,就去了expression包
RoleVoter一定是ROLE_开头的
AuthenticatedVoter

ExpressionUtils.evaluateAsBoolean (Expression expr, EvaluationContext ctx)
#oauth2.throwOnError(#oauth2.hasScope('Compliance.Configuration.View'))
Call SpelExpression.getValue(EvaluationContext context, @Nullable Class expectedResultType)

一条记录有n个物理版本

  • 读:读最新version
  • 写:创建新version
  • 支持time-travel query,即回溯版本

一定要看的论文

single-version scheme

  • DB2
  • Sybase

Concurrency Control Protocol

Timestamping Ordering(MV-TO)

Optimistic Concurrency Control(MV-OCC)

Two-Phase Locking(MV-2PL)

Version Storage

Append-Only Storage

  - 只有主表

Time-Travel Storage

  - 主表+time-travel table(全量)

Delta Storage

  - 主表+Delta Storage Segment(只有Delta部分)

GC

Tuple-level

Transaction-level

Index

MVCC应用

  • Oracle
  • Postgres
  • MySQL’s InnoDB
  • Microsoft Hekaton
  • SAP HANA
  • MemSQL
  • NuoDB
  • HYRISE
  • HyPer

mysql.png

1
2
3
4
5
SHOW ENGINES\G;
CREATE TABLE mytest Engine=MyISAM -> AS SELECT * FROM salaries;
mysql -h192.168.0.101 -u david -p
SHOW VARIABLES LIKE 'socket'
SHOW INDEX FROM t

Index

  • Hash
  • linear index(memory or disk)就是一串key/pointer,key是顺序排列的,pointer指向具体记录
    linear-index
  • tree

B tree

多路搜索树,比如2-3 tree 2-3-4 tree=红黑树
CRUD都在那边讲过了,这里贴个图方便对比
b-tree

为了做index的性质

  • balanced:所有叶子都是一层的
  • 一般一个node的大小就是一个page/disk block,最好填满
  • full:m-order B树就是除了根(有>2个孩子)和叶子,每个node有m/2到m个孩子(几路B树就是几个孩子)

B+ tree

在B tree的基础上:

  • 所有真正的数据都在叶子层
  • m路B+树叶子节点可以存>m条
  • 至少半满
  • 所有叶子再连成doubly-linked list
    b+tree.png

CRUD

C:叶子没满不用说,满了就split

D:保证至少半满,最小化split开销,localize

B* tree

在B+ tree的基础上:

  • overflow的时候塞给兄弟,underflow的时候合并兄弟
  • 普通node上也加linked list
    bstar-tree.png

2-3-4 Tree也叫2-4 Tree

其实是B tree的一个特例,也就是个多路搜索树

CRUD

R read

find 47
24tree-read

C insert

insert 30
24tree-insert
overflow: split,32提上去,两个兄弟分家
24tree-split

D delete

delete 24,27提上去补位
24tree-delete

Red Black Tree

就是2-4 Tree的Binary Search Tree(BST)表达方法,中间的key提上来做黑色parent,同一个node的其他两个key做红孩子,就变成BST了

24tree-rbtree

性质4条,前3条就是24树自然推导的,最后一条man made

  • 所以根肯定黑的
  • 所有叶子的黑色深度是一样的,因为24树本来就平衡的
  • 红node的孩子是黑的,其实就是偏门key的孩子
  • 叶子是黑的:强行加个null叶子

CRUD

动画:https://www.cs.usfca.edu/~galles/visualization/RedBlack.html
怎么rotate见Splay和AVL Tree

C

  1. 正常BST插入,涂成红色(也就是默认是偏门的key)
  2. 递归解决双红冲突:
    • parent是个黑的:搞定,(对应没有overflow,直接插个偏门key)
    • parent是个红的:
      • 叔叔是个黑的:RR LL LR RL rotation
        rbtree-insert-ubpr.png
      • 叔叔是个红的:直接把上一代人涂黑,两个兄弟自立门户,祖父涂成红色,提上去做上一代的偏门key,(对应overflow,split)
        rbtree-insert-urpr.png

D

  1. 正常BST删除
  2. 递归解决冲突
    • 原来(被删的)是个红的,或者,替上来的是个红的,涂成黑色搞定,对应把偏门key提上来做中间key
      rbtree-delete-1red.png
    • 原来和替上来的全是黑的(双黑)
      • 兄弟是黑的,有至少一个个红侄子:rotate
        rbtree-delete-doubleb-1red-nephew.png
      • 兄弟是黑的,有一双黑侄子:重新上色:兄弟变成红的,parent变成黑的,自立门户,吸收兄弟做偏门key
      • 兄弟是红的:single rotation,重新涂色
        rbtree-delete-doubleb-1red-sibling-then-2black-nephew.png

HashMap红黑树源码

Splay Tree

一套规则,用于提高BST的读效率,当node s 被读到,就进行splay,也就是说读得多的靠近根

  • single rotation
    single-rotation
  • double rotation
    • zigzag
      zigzag
    • zigzig
      zigzig

AVL Tree(Adelson-Velskii-Landis):平衡树

  • balance factor BF(node) = 左孩子高度-右孩子高度=-1,0,1
  • rotation:就是看长出来的树是右孩子的右孩子就是RR,依次类推,
    • RR rotation
      RR
    • LL rotation
      LL
    • LR rotation
      LR
    • RL rotation
      RL