Skip to content

Instantly share code, notes, and snippets.

Avatar
Never stop

ruan4261 ruan4261

Never stop
View GitHub Profile
View the-fastest-way-to-exchange-binary-values.js
/**
* better
*/
function(a, b) {
a = a ^ b
b = a ^ b
a = a ^ b
}
/**
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 gcd.java
// better
int gcd(int x, int y) {
while (y != 0) {
int tmp = x % y;
x = y;
y = tmp;
}
return x;
}
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 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,与上述平台不兼容的部分,会给出提示。

目录