Skip to content

Instantly share code, notes, and snippets.

Avatar
Never stop

ruan4261 ruan4261

Never stop
View GitHub Profile
View binaryPow.java
// 不能输入负数参数
long binaryPow(long base, long exponent) {
long res = 1;
while (exponent > 0) {
if ((exponent & 1) == 1) res *= base;
base *= base;
exponent >>= 1;
}
return res;
}
View markdown-syntax.md

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,与上述平台不兼容的部分,会给出提示。

目录

View the-fastest-way-to-exchange-binary-values.js
/**
* better
*/
function(a, b) {
a = a ^ b
b = a ^ b
a = a ^ b
}
/**
View ProxyGenerator_important_method.md

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

ProxyGenerator实例中重要的属性

  /** 保存所有接口的方法, key为方法签名, value中位不同返回值的同签名方法 */
  Map<String, List<ProxyMethod>> proxyMethods;
  
  /** 保存最终的字段信息, 每一个元素会生成一个实例字段 */
  List<FieldInfo> fields;
  /** 保存最终的方法信息, 每一个元素会生成一个实例方法 */
View linux_cmd_mean.md

常用

  • 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
View gcd.java
// better
int gcd(int x, int y) {
while (y != 0) {
int tmp = x % y;
x = y;
y = tmp;
}
return x;
}
View reverse_int.java
public int rev(int x) {
int res = 0;
while (x > 0) {
int mod = x % 10;
x /= 10;
res = res * 10 + mod;
}
return res;
}
View Module1.md

模块一

一、简答题

  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

  2. Mybatis是否支持延迟加载?如果支持,它的实现原理是什么?

    支持。
    Mybatis会使用org.javassist(默认)或CGLIB创建目标对象的代理对象。首次加载对象时,只会执行主要的sql语句,延迟加载的属性的sql语句会在首次执行其getter方法时调用。

  3. Mybatis都有哪些Executor执行器?它们之间的区别是什么?
View PermutationAndCombination.java
// Arrangement or Permutation
int P(int n, int m) {
int res = 1;
int limit = n - m;
while (n > limit) {
res *= n--;
}
return res;
}
View dynamic_import_javascript.js
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'