Skip to content

Instantly share code, notes, and snippets.

Avatar
Never stop

ruan4261 ruan4261

Never stop
View GitHub Profile
View the_easy_implementation_for_your_ideas.md

The easy implementation for your ideas.

Drawing

  1. Nvidia Canvas

    Desc


    Nvidia 公司推出的一个人工智能照片编辑软件,可以免费下载。用户只要选择要添加的对象(比如云彩),在对应的位置上涂抹几笔,就能够自动生成照片。

View bind_detail_field_change_event.js
/**
* 对指定明细表指定字段(列)绑定变化事件, 绑定的数据行包括已存在的数据行及未来新建的数据行(该方法只需执行一次)
*
* @param detailIndex 明细表索引是对于当前流程而言的, 与模板无关(同一个明细表在不同节点模板内拥有相同的索引)
* @param fieldId 单个字段的id
* @param func 可用参数列表[rowIdx, changedElement]
*/
function bindDetailFieldChangeEvent(detailIndex, fieldId, func) {
var bindEvent = function (idx) {
var jq = jQuery("#field" + fieldId + "_" + idx);
View is_empty.js
/**
* Only for String and ArrayLike.
* Return false if parameter is an object.
*
* @return {boolean}
*/
function isEmpty(obj) {
return (
obj === undefined ||
obj === null ||
View words.md

Words

Reference

欧路词典, 沪江小D辞典, 谷歌翻译, 剑桥辞典, 百度翻译等

Template

英文(缩写) 中文 词性 美音 英音

2021

May

View getUrlParams.js
function getUrlParams() {
var query = location.search// from ? to #
var params = {}
if (query.length > 1) {
var queryStr = query.substr(1)
var entry = queryStr.split('&')
for (var i = 0; i < entry.length; i++) {
var kv = entry[i].split('=')
var key = kv[0]
var value = kv[1]// maybe undefined
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'
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 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 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 gcd.java
// better
int gcd(int x, int y) {
while (y != 0) {
int tmp = x % y;
x = y;
y = tmp;
}
return x;
}