ruan4261

Public Snippets 15

english note

# Words
**Reference**
> 欧路词典, 沪江小D辞典, 谷歌翻译, 剑桥辞典, 百度翻译等

**Template**
> | 英文(缩写) | 中文 | 词性 | 美音 | 英音 |
> | -- | -- | -- | -- | -- |

## 2021
### May
#### Day12
| 英文(缩写) | 中文 | 词性 | 美音 | 英音 |
| -- | -- | -- | -- | -- |
| evaluation | 评估; | n. | | |

#### Day13
| 英文(缩写) | 中文 | 词性 | 美音 | 英音 |
| -- | -- | -- | -- | -- |
| literal | 字面意义的; 缺乏想象力的; | adj. |||
| scene | 场景; 事件; (尤指不愉快事件发生的)地点; | n. | /siːn/ | /siːn/ |
| sense | 感觉; 感官; 意识; | n. | /sens/ | /sens/ |
| sense | 感觉到; 意识到; | v. |/sens/ | /se

Dynamic Hierarchical Classloader

# Dynamic Hierarchical Classloader(动态分级加载器)
## 技术攻坚点
1. 加载器动态委派, 分级
2. 命名空间适配(目前想法是重写ProxyGenerator生成继承同命名空间类, 问题在于final类无法通过加载器校验)

## Features
- 上传class文件, 存放文件夹并加载
- 上传java文件编译, 自动存放文件夹(最后再考虑)

ecology函数checkCustomize防覆盖

jQuery(document).ready(function () {
  window._check_customize_ = []
  window._check_customize_.push(window.checkCustomize)
  window._check_customize_.push(function () {
    // custom
  })

  window.checkCustomize = function () {
    var res = true
    window._check_customize_.forEach(function (checkCustomize) {
      if (res === false) return res

      if (typeof checkCustomize === 'function') {
        if (checkCustomize() === false) {
          res = false
        }
      }
    })
    return

Oracle数据表回档查询

SELECT columns FROM table AS OF TIMESTAMP TO_TIMESTAMP('rollback time','YYYY-MM-DD HH24:MI:SS')

ORACLE两表结构对比

select v1.table_name,v2.table_name, v1.column_name,v2.column_name,
v1.data_type,v2.data_type,v1.data_length,v2.data_length ,v1.data_precision,v2.data_precision,v1.data_scale,v2.data_scale
from
(select * from user_tab_columns where table_name='table_A') v1 left join
(select * from user_tab_columns where table_name='table_B') v2 on v1.column_name=v2.column_name

-- Pay attention to the case of the table name

排列组合公式

// Arrangement or Permutation
int P(int n, int m) {
  int res = 1;
  int limit = n - m;
  while (n > limit) {
    res *= n--;
  }
  return res;
}

// Combination
int C(int n, int m) {
  m = Math.min(m, n - m);
  int res = P(n, m);
  while (m > 0) {
    res /= m--;
  }
  return res;
}

模板_反转整数

public int rev(int x) {
  int res = 0;
  while (x > 0) {
    int mod = x % 10;
    x /= 10;
    res = res * 10 + mod;
  }
  return res;
}

dynamic import javascript

window.dynamic_import_javascript = function(url, text, type, frameWindow){
  frameWindow = frameWindow || window
  var doc = frameWindow.document
  var container = frameWindow.document.head || frameWindow.document.body
  var newEle = doc.createElement('script')
  if (url)
    newEle.src = url
  if (text)
    newEle.appendChild(document.createTextNode(text))
  newEle.type = type || 'text/javascript'
  container.append(newEle)
}

linux mean

## 常用
- ls: list
- cd: change directory
- su: switch user
- pwd: print work directory
- ps: process status
- lsof: list open file
- df: disk free
- du: disk usage
- rm: remove
- cat: concatenate
- ln: link
- man: manual
- touch: touch (用于修改文件时间属性)
- uname: unix name
- mv: move
- cp: copy
- nohup: no hang up
- fg: foreground (将后台命令放到前台执行)
- bg: background (将前台命令放到后台执行)
- chown: change owner
- chgrp: change group
- chmod: change mode

## 非常用
- mkfs: make file system
- fsck: file system check
- ins

ProxyGenerator重点方法

一个`ProxyGenerator`实例代表一个代理类  

`ProxyGenerator`实例中重要的属性
```java
  /** 保存所有接口的方法, key为方法签名, value中位不同返回值的同签名方法 */
  Map<String, List<ProxyMethod>> proxyMethods;
  
  /** 保存最终的字段信息, 每一个元素会生成一个实例字段 */
  List<FieldInfo> fields;
  /** 保存最终的方法信息, 每一个元素会生成一个实例方法 */
  List<MethodInfo> methods;
```

0. `#generateClassFile()`
   > 生成入口, 返回代理类字节码  
   > **步骤**
   > 1. 通过`#addProxyMethod(Method, Class)`注册`hashCode`, `equals`, `toString`方法
   > 2. 通过`#addProxyMethod(Method, Class)`循环注册每个接口的每个方法
   > 3. 对所有注册

The fastest way to exchange binary values.

/**
 * better
 */
function(a, b) {
  a = a ^ b
  b = a ^ b
  a = a ^ b
}

/**
 * standard
 */
function(a, b) {
  var temp = a
  a = b
  b = temp
}

模板_快速幂

// 不能输入负数参数
long binaryPow(long base, long exponent) {
  long res = 1;
  while (exponent > 0) {
    if ((exponent & 1) == 1) res *= base;
    base *= base;
    exponent >>= 1;
  }
  return res;
}

模板_欧几里得算法

// better
int gcd(int x, int y) {
  while (y != 0) {
      int tmp = x % y;
      x = y;
      y = tmp;
  }
  return x;
}

// simple, but slow and make more stacks(in the int case, when the ratio of two numbers is close to the 1.61(Golden Ratio), up to 80(effective 40) stacks can be made)
int gcd(int x, int y) {
  return x == 0 ? y : gcd(y % x, x);
}

int gcd(int large, int small) {
  int temp;
  for (; ; ) {
    if (small > large) {
      temp = large;
      large = small;

拉钩教育-Java高薪训练营-Chapter1

# 模块一
## 一、简答题
1. Mybatis动态sql是做什么的?都有哪些动态sql?简述一下动态sql的执行原理?
    >Mybatis动态sql可以使开发者无需手动进行复杂的sql字符串拼接,将不同参数对象传递进模板代码,可以构造出逻辑不同的sql语句;  
    >动态sql标签有`if`, `choose-when-otherwise`, `trim`, `where`, `set`, `foreach`等;  
    >动态sql标签在初始化时会被`XMLScriptBuilder`解析,`XMLScriptBuilder`会根据不同标签调用不同的`NodeHandler`实现,`NodeHandler`最终将解析结果封装为`SqlNode`实现添加回解析上下文,解析结束后,解析上下文被封装为`MixedSqlNode`返回,`XMLScriptBuilder`会判断该sql语句是否为动态sql,然后将`MixedSqlNode`封装进`SqlSource`实现中,解析就此完成。在调用时,`SqlSource`会接收参数,组装成最终被执行的`BoundSql`。

Markdown Syntax

# Markdown syntax
Markdown(下文中简称为md)是一种纯文本标记语言,你可以将其认为是html的超集。md是纯文本标记语言,相比于html,它更加简易,更加易于人类理解。md有非常多的拓展规范(方言),基本规范文档:RFC7763、RFC7764。  

因为md是html的超集,所以你可以使用任意html标签以补充想要的样式,例如使用`<div style="text-align: center"></div>`标签增添居中效果(部分方言/解析器可能会限制部分html标签及属性的使用)。  
原生md不支持数学表达式及UML图等,你可以通过三方插件实现这些功能,在显示时通过图片或脚本(部分平台支持在线编辑表达式并发布,通过平台依赖脚本进行渲染,坏处是无法转移至其他方言不兼容的平台)的方式插入,本文不作非md语法内容的描述。

***本文所述语法默认兼容GitHub及Cacher,与上述平台不兼容的部分,会给出提示。***

## 目录
* [反转义](#反转义)
* [注释](#注释)
* [标题](#标题)
* [分割线](#分割线)
* [换行方法](#换