-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.html
178 lines (166 loc) · 45.9 KB
/
index.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
<!DOCTYPE html><html lang="zh-CN" data-theme="light"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1"><title>混饭's Notes - Quick notes</title><meta name="description" content="重度拖延症患者(-__-)b"><meta name="author" content="混饭"><meta name="copyright" content="混饭"><meta name="format-detection" content="telephone=no"><link rel="shortcut icon" href="/images/avatar.png"><link rel="canonical" href="https://hunfan.top/"><meta http-equiv="Cache-Control" content="no-transform"><meta http-equiv="Cache-Control" content="no-siteapp"><link rel="preconnect" href="//cdn.jsdelivr.net"/><link rel="preconnect" href="//hm.baidu.com"/><link rel="preconnect" href="//fonts.googleapis.com" crossorigin="crossorigin"/><link rel="preconnect" href="//busuanzi.ibruce.info"/><link rel="preconnect" href="//zz.bdstatic.com"/><meta property="og:type" content="website"><meta property="og:title" content="混饭's Notes"><meta property="og:url" content="https://hunfan.top/"><meta property="og:site_name" content="混饭's Notes"><meta property="og:description" content="重度拖延症患者(-__-)b"><meta property="og:image" content="https://hunfan.top/images/avatar.png"><meta property="article:published_time" content="2022-04-13T09:49:07.141Z"><meta property="article:modified_time" content="2022-04-13T09:49:07.141Z"><meta name="twitter:card" content="summary"><script>var activateDarkMode = function () {
document.documentElement.setAttribute('data-theme', 'dark')
if (document.querySelector('meta[name="theme-color"]') !== null) {
document.querySelector('meta[name="theme-color"]').setAttribute('content', '#000')
}
}
var activateLightMode = function () {
document.documentElement.setAttribute('data-theme', 'light')
if (document.querySelector('meta[name="theme-color"]') !== null) {
document.querySelector('meta[name="theme-color"]').setAttribute('content', '#fff')
}
}
var getCookies = function (name) {
const value = `; ${document.cookie}`
const parts = value.split(`; ${name}=`)
if (parts.length === 2) return parts.pop().split(';').shift()
}
var autoChangeMode = 'false'
var t = getCookies('theme')
if (autoChangeMode === '1') {
var isDarkMode = window.matchMedia('(prefers-color-scheme: dark)').matches
var isLightMode = window.matchMedia('(prefers-color-scheme: light)').matches
var isNotSpecified = window.matchMedia('(prefers-color-scheme: no-preference)').matches
var hasNoSupport = !isDarkMode && !isLightMode && !isNotSpecified
if (t === undefined) {
if (isLightMode) activateLightMode()
else if (isDarkMode) activateDarkMode()
else if (isNotSpecified || hasNoSupport) {
console.log('You specified no preference for a color scheme or your browser does not support it. I Schedule dark mode during night time.')
var now = new Date()
var hour = now.getHours()
var isNight = hour <= 6 || hour >= 18
isNight ? activateDarkMode() : activateLightMode()
}
window.matchMedia('(prefers-color-scheme: dark)').addListener(function (e) {
if (Cookies.get('theme') === undefined) {
e.matches ? activateDarkMode() : activateLightMode()
}
})
} else if (t === 'light') activateLightMode()
else activateDarkMode()
} else if (autoChangeMode === '2') {
now = new Date()
hour = now.getHours()
isNight = hour <= 6 || hour >= 18
if (t === undefined) isNight ? activateDarkMode() : activateLightMode()
else if (t === 'light') activateLightMode()
else activateDarkMode()
} else {
if (t === 'dark') activateDarkMode()
else if (t === 'light') activateLightMode()
}</script><link rel="stylesheet" href="/css/index.css"><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free/css/all.min.css"><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fancyapps/fancybox@latest/dist/jquery.fancybox.min.css"><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/node-snackbar/dist/snackbar.min.css"><link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/instantsearch.min.css"><script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/instantsearch.min.js" defer></script><script>var _hmt = _hmt || [];
(function() {
var hm = document.createElement("script");
hm.src = "https://hm.baidu.com/hm.js?6cd8ae14adb2fe3dc7047ddfa0d40d73";
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(hm, s);
})();
</script><link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Titillium+Web&display=swap"><script>var GLOBAL_CONFIG = {
root: '/',
algolia: {"appId":"EOQFFOF30N","apiKey":"f9225ddc11a8366934d88cf19b7d999e","indexName":"github","hits":{"per_page":6},"languages":{"input_placeholder":"搜索文章","hits_empty":"找不到您查询的内容:${query}","hits_stats":"找到 ${hits} 条结果,用时 ${time} 毫秒"}},
localSearch: undefined,
translate: {"defaultEncoding":1,"translateDelay":0,"msgToTraditionalChinese":"繁","msgToSimplifiedChinese":"簡"},
copy: {
success: '复制成功',
error: '复制错误',
noSupport: '浏览器不支持'
},
bookmark: {
message_prev: '按',
message_next: '键将本页加入书签'
},
runtime_unit: '天',
runtime: true,
copyright: undefined,
ClickShowText: undefined,
medium_zoom: false,
fancybox: true,
Snackbar: {"bookmark":{"message_prev":"按","message_next":"键将本页加入书签"},"chs_to_cht":"你已切换为繁体","cht_to_chs":"你已切换为简体","day_to_night":"你已切换为深色模式","night_to_day":"你已切换为浅色模式","bgLight":"#49b1f5","bgDark":"#121212","position":"top-center"},
justifiedGallery: {
js: 'https://cdn.jsdelivr.net/npm/justifiedGallery/dist/js/jquery.justifiedGallery.min.js',
css: 'https://cdn.jsdelivr.net/npm/justifiedGallery/dist/css/justifiedGallery.min.css'
},
baiduPush: true,
highlightCopy: true,
highlightLang: true,
isPhotoFigcaption: false,
islazyload: true,
isanchor: false
}</script><script>var GLOBAL_CONFIG_SITE = {
isPost: false,
isHome: true,
isHighlightShrink: false,
isSidebar: false
}</script><noscript><style>
#nav {
opacity: 1
}
.justified-gallery img{
opacity: 1
}
</style></noscript><meta name="generator" content="Hexo 4.2.1"><link rel="alternate" href="/atom.xml" title="混饭's Notes" type="application/atom+xml">
</head><body><div id="mobile-sidebar"><div id="menu_mask"></div><div id="mobile-sidebar-menus"><div class="mobile_author_icon"><img class="avatar-img" src="/images/avatar.png" onerror="onerror=null;src='/img/friend_404.gif'" alt="avatar"/></div><div class="mobile_post_data"><div class="mobile_data_item is-center"><div class="mobile_data_link"><a href="/archives/"><div class="headline">文章</div><div class="length_num">65</div></a></div></div><div class="mobile_data_item is-center"> <div class="mobile_data_link"><a href="/tags/"><div class="headline">标签</div><div class="length_num">60</div></a></div></div><div class="mobile_data_item is-center"> <div class="mobile_data_link"><a href="/categories/"><div class="headline">分类</div><div class="length_num">2</div></a></div></div></div><hr/><div class="menus_items"><div class="menus_item"><a class="site-page" href="/"><i class="fa-fw fas fa-home"></i><span> 首页</span></a></div><div class="menus_item"><a class="site-page" href="/archives/"><i class="fa-fw fas fa-archive"></i><span> 时间轴</span></a></div><div class="menus_item"><a class="site-page" href="/bangumis/"><i class="fa-fw fas fa-tv"></i><span> 番剧</span></a></div><div class="menus_item"><a class="site-page" href="/tags/"><i class="fa-fw fas fa-tags"></i><span> 标签</span></a></div></div></div></div><div id="body-wrap"><header class="full_page" id="page-header" style="background-image: url(/images/UncompahgreForest_ZH-CN6161020948_1920x1080.jpg)"><nav id="nav"><span class="pull-left" id="blog_name"><a class="blog_title" id="site-name" href="/">混饭's Notes</a></span><span class="pull-right menus"><div id="search_button"><a class="site-page social-icon search"><i class="fas fa-search fa-fw"></i><span> 搜索</span></a></div><div class="menus_items"><div class="menus_item"><a class="site-page" href="/"><i class="fa-fw fas fa-home"></i><span> 首页</span></a></div><div class="menus_item"><a class="site-page" href="/archives/"><i class="fa-fw fas fa-archive"></i><span> 时间轴</span></a></div><div class="menus_item"><a class="site-page" href="/bangumis/"><i class="fa-fw fas fa-tv"></i><span> 番剧</span></a></div><div class="menus_item"><a class="site-page" href="/tags/"><i class="fa-fw fas fa-tags"></i><span> 标签</span></a></div></div><span class="toggle-menu close"><a class="site-page"><i class="fas fa-bars fa-fw"></i></a></span></span></nav><div id="site-info"><h1 id="site_title">混饭's Notes</h1><div id="site_subtitle"><span id="subtitle"></span></div><div id="site_social_icons"><a class="social-icon" href="https://github.com/hf-hf" target="_blank" title="github"><i class="fab fa-github"></i></a><a class="social-icon" href="https://hunfan.top/atom.xml" target="_blank" title="rss"><i class="fas fa-rss"></i></a><a class="social-icon" href="https://gitee.com/hf-hf" target="_blank" title="gitee"><i class="fas fa-gitee"></i></a><a class="social-icon" href="https://tuishuxia.com" target="_blank" title="tuishuxia"><i class="fas fa-tuishuxia"></i></a></div></div><div id="scroll_down"><i class="fas fa-angle-down scroll-down-effects"></i></div></header><main class="layout_page" id="content-inner"><div class="recent-posts" id="recent-posts"><div class="recent-post-item"><div class="post_cover left_radius"><a href="/posts/50d03f6d/" title="Java根据圆心经纬度、半径获取圆的点集"> <img class="post_bg" data-src="/upload/homePage/20180930150201.jpg" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="Java根据圆心经纬度、半径获取圆的点集"></a></div><div class="recent-post-info"><a class="article-title" href="/posts/50d03f6d/" title="Java根据圆心经纬度、半径获取圆的点集">Java根据圆心经纬度、半径获取圆的点集</a><div class="article-meta-wrap"><span class="article-meta"><i class="fas fa-thumbtack article-meta__icon sticky"></i><span class="sticky">置顶</span><span class="article-meta__separator">|</span></span><time class="post-meta__date"><span class="post-meta__date-created" title="发表于 2018-09-29 16:41:54"><i class="far fa-calendar-alt"></i>2018-09-29</span><span class="article-meta__separator">|</span><span class="post-meta__date-updated" title="更新于 2020-07-09 09:46:50"><i class="fas fa-history"></i>2020-07-09</span></time><span class="article-meta"><span class="article-meta__separator">|</span><i class="fas fa-inbox article-meta__icon"></i><a class="article-meta__categories" href="/categories/uncategorized/">uncategorized</a></span><span class="article-meta tags"><span class="article-meta__separator">|</span><i class="fas fa-tag article-meta__icon"></i><a class="article-meta__tags" href="/tags/Java/">Java</a></span></div><div class="content">情景最近有对接第三方的需求,需要在后台通过圆心点经纬度、半径获取圆的经纬度点集。
根据圆心、半径计算圆上点集的算法首先来分析一下,这个问题可以转换成数学上的平面坐标系计算,已知圆心坐标(x0,y0),半径r,角度a0,求圆上任一点公式为:
x1 = x0 + r * cos(a0 * π/180)y1 = y0 + r * sin(a0 * π/180)
其中a0 * π/180(角度乘以π/180),目的是将角度a0转换为弧度。
下面将平面上的圆等分为6份(如下图),根据公式代入圆心坐标、弧度和半径计算出对应圆弧半径与圆交点的平面坐标。
这样就获得了6个平面圆上的坐标点,(x1,y1)、(x2,y2)…(x6,y6),注意此时的点只是数学意义上的点,接下来需要将平面的点投影到地图上,获取地图经纬度的点集。
将平面坐标投影到地图在介绍如何将平面坐标投影到地图之前,我们首先需要了解一个概念:墨卡托投影。
众所周知,地球是一个不规则的球体,而我们平时看到的地图大多是平面的,那么如何将一个三维的地球画到平面上的呢。
墨卡托投影就是将三维的地球表示在一个二维平面上的方法之一,也是应用得最 ...</div></div></div><div class="recent-post-item"><div class="post_cover right_radius"><a href="/posts/ecdd7de8/" title="Google,Twitter和Spotify怎样建立文档文化"> <img class="post_bg" data-src="/upload/homePage/20181105161104.jpg" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="Google,Twitter和Spotify怎样建立文档文化"></a></div><div class="recent-post-info"><a class="article-title" href="/posts/ecdd7de8/" title="Google,Twitter和Spotify怎样建立文档文化">Google,Twitter和Spotify怎样建立文档文化</a><div class="article-meta-wrap"><time class="post-meta__date"><span class="post-meta__date-created" title="发表于 2021-11-08 09:20:34"><i class="far fa-calendar-alt"></i>2021-11-08</span><span class="article-meta__separator">|</span><span class="post-meta__date-updated" title="更新于 2022-04-13 16:41:29"><i class="fas fa-history"></i>2022-04-13</span></time><span class="article-meta"><span class="article-meta__separator">|</span><i class="fas fa-inbox article-meta__icon"></i><a class="article-meta__categories" href="/categories/uncategorized/">uncategorized</a></span><span class="article-meta tags"><span class="article-meta__separator">|</span><i class="fas fa-tag article-meta__icon"></i><a class="article-meta__tags" href="/tags/google/">google</a><span class="article-meta__link">•</span><a class="article-meta__tags" href="/tags/twitter/">twitter</a><span class="article-meta__link">•</span><a class="article-meta__tags" href="/tags/spotify/">spotify</a><span class="article-meta__link">•</span><a class="article-meta__tags" href="/tags/docs/">docs</a></span></div><div class="content">许多技术问题
[原文链接]https://blog.doctave.com/2021/09/07/how-google-twitter-and-spotify-build-culture-of-documentation.html
</div></div></div><div class="recent-post-item"><div class="post_cover left_radius"><a href="/posts/204726e2/" title="Spring声明式事务Transactional原理只看这一篇就够了"> <img class="post_bg" data-src="/upload/homePage/20210928152000.jpg" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="Spring声明式事务Transactional原理只看这一篇就够了"></a></div><div class="recent-post-info"><a class="article-title" href="/posts/204726e2/" title="Spring声明式事务Transactional原理只看这一篇就够了">Spring声明式事务Transactional原理只看这一篇就够了</a><div class="article-meta-wrap"><time class="post-meta__date"><span class="post-meta__date-created" title="发表于 2021-09-28 15:18:34"><i class="far fa-calendar-alt"></i>2021-09-28</span><span class="article-meta__separator">|</span><span class="post-meta__date-updated" title="更新于 2021-09-29 17:14:07"><i class="fas fa-history"></i>2021-09-29</span></time><span class="article-meta"><span class="article-meta__separator">|</span><i class="fas fa-inbox article-meta__icon"></i><a class="article-meta__categories" href="/categories/uncategorized/">uncategorized</a></span><span class="article-meta tags"><span class="article-meta__separator">|</span><i class="fas fa-tag article-meta__icon"></i><a class="article-meta__tags" href="/tags/spring/">spring</a><span class="article-meta__link">•</span><a class="article-meta__tags" href="/tags/transaction/">transaction</a></span></div><div class="content">问题Spring声明式事务@Transactional在同一个类中的两个方法之间调用失效是个老生常谈的问题,之前恰巧又遇到有这么写的同学,今天就翻一翻源码,总结一下其背后的原因。
初步分析由于Spring声明式事务采用动态代理(AOP)实现,它会在代码运行时为类生成一个代理对象,实际会使用代理对象调用业务方法,并在方法调用之前决定是否开启一个事务,在方法执行之后决定事务的提交和回滚。
其相当于下面这段代码:
// 业务方法 main { bizMethod();}// 经过AOP事务增强后main { Connection con = null; try{ con = getConnection(); con.setAutoCommit(false); //方法调用 bizMethod(); //提交事务 con.commit(); } catch(Run ...</div></div></div><div class="recent-post-item"><div class="post_cover right_radius"><a href="/posts/6a76cba2/" title="Nodejs14大版本特性以及版本管理n模块"> <img class="post_bg" data-src="/upload/homePage/20210517184300.jpg" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="Nodejs14大版本特性以及版本管理n模块"></a></div><div class="recent-post-info"><a class="article-title" href="/posts/6a76cba2/" title="Nodejs14大版本特性以及版本管理n模块">Nodejs14大版本特性以及版本管理n模块</a><div class="article-meta-wrap"><time class="post-meta__date"><span class="post-meta__date-created" title="发表于 2021-04-26 14:43:09"><i class="far fa-calendar-alt"></i>2021-04-26</span><span class="article-meta__separator">|</span><span class="post-meta__date-updated" title="更新于 2021-05-17 18:46:43"><i class="fas fa-history"></i>2021-05-17</span></time><span class="article-meta"><span class="article-meta__separator">|</span><i class="fas fa-inbox article-meta__icon"></i><a class="article-meta__categories" href="/categories/uncategorized/">uncategorized</a></span><span class="article-meta tags"><span class="article-meta__separator">|</span><i class="fas fa-tag article-meta__icon"></i><a class="article-meta__tags" href="/tags/nodejs/">nodejs</a></span></div><div class="content">情景前段时间在Github看到有这么一种写法:
data = $request(params)if (data?.data?.bizCode === 0) { console.log(`任务完成成功,获得:${data?.data?.result?.produceScore ?? "未知"}能量`);}
这段代码中包含两种操作符’?.’和’??’,之前都没有看到过,突然想起node14版本已经出来很久了,立马去翻了一下新版本的文档,果然这两个操作符都是为了解决以前开发中很经常遇到的两种问题。
Nodejs14重点功能介绍Optional Chaining官方介绍节选The optional chaining operator (?.) enables you to read the value of a property located deep within a chain of connected objects without having to check ...</div></div></div><div class="recent-post-item"><div class="post_cover left_radius"><a href="/posts/10b18d71/" title="20210402-重庆游记"> <img class="post_bg" data-src="/upload/20210402%E9%87%8D%E5%BA%86%E6%B8%B8%E8%AE%B0/20210402_%E9%87%8D%E5%BA%86_12.jpg" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="20210402-重庆游记"></a></div><div class="recent-post-info"><a class="article-title" href="/posts/10b18d71/" title="20210402-重庆游记">20210402-重庆游记</a><div class="article-meta-wrap"><time class="post-meta__date"><span class="post-meta__date-created" title="发表于 2021-04-26 14:06:44"><i class="far fa-calendar-alt"></i>2021-04-26</span><span class="article-meta__separator">|</span><span class="post-meta__date-updated" title="更新于 2021-04-26 14:38:42"><i class="fas fa-history"></i>2021-04-26</span></time><span class="article-meta"><span class="article-meta__separator">|</span><i class="fas fa-inbox article-meta__icon"></i><a class="article-meta__categories" href="/categories/%E6%97%85%E6%B8%B8%E6%97%A5%E8%AE%B0/">旅游日记</a></span><span class="article-meta tags"><span class="article-meta__separator">|</span><i class="fas fa-tag article-meta__icon"></i><a class="article-meta__tags" href="/tags/%E6%97%85%E6%B8%B8%E6%97%A5%E8%AE%B0/">旅游日记</a></span></div><div class="content">
待上传内容~(゜ー゜)
</div></div></div><div class="recent-post-item"><div class="post_cover right_radius"><a href="/posts/364d7e27/" title="字符串编码问题"> <img class="post_bg" data-src="/upload/homePage/20210426115900.jpg" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="字符串编码问题"></a></div><div class="recent-post-info"><a class="article-title" href="/posts/364d7e27/" title="字符串编码问题">字符串编码问题</a><div class="article-meta-wrap"><time class="post-meta__date"><span class="post-meta__date-created" title="发表于 2021-04-26 13:51:30"><i class="far fa-calendar-alt"></i>2021-04-26</span><span class="article-meta__separator">|</span><span class="post-meta__date-updated" title="更新于 2021-04-26 14:27:15"><i class="fas fa-history"></i>2021-04-26</span></time><span class="article-meta"><span class="article-meta__separator">|</span><i class="fas fa-inbox article-meta__icon"></i><a class="article-meta__categories" href="/categories/uncategorized/">uncategorized</a></span><span class="article-meta tags"><span class="article-meta__separator">|</span><i class="fas fa-tag article-meta__icon"></i><a class="article-meta__tags" href="/tags/encode/">encode</a></span></div><div class="content">字符串编码问题我们已经讲过了,字符串也是一种数据类型,但是,字符串比较特殊的是还有一个编码问题。
因为计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理。最早的计算机在设计时采用8个比特(bit)作为一个字节(byte),所以,一个字节能表示的最大的整数就是255(二进制11111111=十进制255),如果要表示更大的整数,就必须用更多的字节。比如两个字节可以表示的最大整数是65535,4个字节可以表示的最大整数是4294967295。
由于计算机是美国人发明的,因此,最早只有127个字符被编码到计算机里,也就是大小写英文字母、数字和一些符号,这个编码表被称为ASCII编码,比如大写字母A的编码是65,小写字母z的编码是122。
但是要处理中文显然一个字节是不够的,至少需要两个字节,而且还不能和ASCII编码冲突,所以,中国制定了GB2312编码,用来把中文编进去。
你可以想得到的是,全世界有上百种语言,日本把日文编到Shift_JIS里,韩国把韩文编到Euc-kr里,各国有各国的标准,就会不可避免地出现冲突,结果就是,在多语言混合的文本中,显示出来会有乱码。因此, ...</div></div></div><div class="recent-post-item"><div class="post_cover left_radius"><a href="/posts/a4fbff2c/" title="DBA题目索引设计问题调研"> <img class="post_bg" data-src="/upload/homePage/20210425115900.jpg" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="DBA题目索引设计问题调研"></a></div><div class="recent-post-info"><a class="article-title" href="/posts/a4fbff2c/" title="DBA题目索引设计问题调研">DBA题目索引设计问题调研</a><div class="article-meta-wrap"><time class="post-meta__date"><span class="post-meta__date-created" title="发表于 2021-04-23 17:08:46"><i class="far fa-calendar-alt"></i>2021-04-23</span><span class="article-meta__separator">|</span><span class="post-meta__date-updated" title="更新于 2021-05-17 17:19:59"><i class="fas fa-history"></i>2021-05-17</span></time><span class="article-meta"><span class="article-meta__separator">|</span><i class="fas fa-inbox article-meta__icon"></i><a class="article-meta__categories" href="/categories/uncategorized/">uncategorized</a></span><span class="article-meta tags"><span class="article-meta__separator">|</span><i class="fas fa-tag article-meta__icon"></i><a class="article-meta__tags" href="/tags/Mysql/">Mysql</a></span></div><div class="content">题目本题目来源自网络,引用自cnblogs 05 | 深入浅出索引(下),最初出处因搜索结果过多目前无法确定。
DBA小吕在入职新公司的时候,就发现自己接手维护的库里面,有这么一个表,表结构定义类似这样的:
CREATE TABLE `geek` (`a` int(11) NOT NULL,`b` int(11) NOT NULL,`c` int(11) NOT NULL,`d` int(11) NOT NULL,PRIMARY KEY (`a`,`b`),KEY `c` (`c`),KEY `ca` (`c`,`a`),KEY `cb` (`c`,`b`)) ENGINE=InnoDB;
公司的同事告诉他说,由于历史原因,这个表需要a、b做联合主键,这个小吕理解了。
但是,学过本章内容的小吕又纳闷了,既然主键包含了a、b这两个字段,那意 ...</div></div></div><div class="recent-post-item"><div class="post_cover right_radius"><a href="/posts/4bdcd099/" title="Mysql优化减少回表操作"> <img class="post_bg" data-src="/upload/homePage/20210414152100.jpg" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="Mysql优化减少回表操作"></a></div><div class="recent-post-info"><a class="article-title" href="/posts/4bdcd099/" title="Mysql优化减少回表操作">Mysql优化减少回表操作</a><div class="article-meta-wrap"><time class="post-meta__date"><span class="post-meta__date-created" title="发表于 2021-04-14 10:19:12"><i class="far fa-calendar-alt"></i>2021-04-14</span><span class="article-meta__separator">|</span><span class="post-meta__date-updated" title="更新于 2021-04-15 09:43:03"><i class="fas fa-history"></i>2021-04-15</span></time><span class="article-meta"><span class="article-meta__separator">|</span><i class="fas fa-inbox article-meta__icon"></i><a class="article-meta__categories" href="/categories/uncategorized/">uncategorized</a></span><span class="article-meta tags"><span class="article-meta__separator">|</span><i class="fas fa-tag article-meta__icon"></i><a class="article-meta__tags" href="/tags/Mysql/">Mysql</a></span></div><div class="content">情景有一张日增量的Mysql InnoDB数据表,未分库分表,ID为自增主键,DAY_TAG为非唯一索引,当前数据量为69660129,现需根据其数据做每日的统计报表,每日数据分段统计分析后写入另一张表,数据分段查询使用limit offset,rows。在此环境下,执行’select * from table where day_tag = ‘2021-04-14’ limit 20, 2’只需要几毫秒结果就返回了,但是若执行’select * from table where day_tag = ‘2021-04-14’ limit 300000, 2’,还是2条记录却会发现实际耗时很久。
问题分析虽然我们仅需2条记录,但实际Mysql对前300000条记录都进行了不必要的回表操作,导致耗时增加,我们只要减少回表操作就可以有效的优化查询的效率。
那么什么是回表操作呢?在这之前我们要先了解两个概念聚簇索引和非聚簇索引。
聚集索引(聚簇索引):以 InnoDB 作为存储引擎的表,表中的数据都会有一个主键,即使你不创建主键,系统也会帮你创建一个隐式的主键。这是因为 InnoDB 是把数 ...</div></div></div><div class="recent-post-item"><div class="post_cover left_radius"><a href="/posts/98e85ae5/" title="解决爬取Https页面报unable to find valid certification path to requested target的问题"> <img class="post_bg" data-src="/upload/homePage/20200628154000.jpg" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="解决爬取Https页面报unable to find valid certification path to requested target的问题"></a></div><div class="recent-post-info"><a class="article-title" href="/posts/98e85ae5/" title="解决爬取Https页面报unable to find valid certification path to requested target的问题">解决爬取Https页面报unable to find valid certification path to requested target的问题</a><div class="article-meta-wrap"><time class="post-meta__date"><span class="post-meta__date-created" title="发表于 2020-06-28 10:53:51"><i class="far fa-calendar-alt"></i>2020-06-28</span><span class="article-meta__separator">|</span><span class="post-meta__date-updated" title="更新于 2020-07-08 10:13:03"><i class="fas fa-history"></i>2020-07-08</span></time><span class="article-meta"><span class="article-meta__separator">|</span><i class="fas fa-inbox article-meta__icon"></i><a class="article-meta__categories" href="/categories/uncategorized/">uncategorized</a></span><span class="article-meta tags"><span class="article-meta__separator">|</span><i class="fas fa-tag article-meta__icon"></i><a class="article-meta__tags" href="/tags/https/">https</a><span class="article-meta__link">•</span><a class="article-meta__tags" href="/tags/%E8%AF%81%E4%B9%A6/">证书</a></span></div><div class="content">最近调试爬虫程序,对ershcimi进行爬取时报错,堆栈信息如下:</div></div></div><div class="recent-post-item"><div class="post_cover right_radius"><a href="/posts/c15a9847/" title="Mysql关于blob数据类型使用mysqldump导出乱码问题解决"> <img class="post_bg" data-src="/upload/homePage/20200611092200.jpg" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="Mysql关于blob数据类型使用mysqldump导出乱码问题解决"></a></div><div class="recent-post-info"><a class="article-title" href="/posts/c15a9847/" title="Mysql关于blob数据类型使用mysqldump导出乱码问题解决">Mysql关于blob数据类型使用mysqldump导出乱码问题解决</a><div class="article-meta-wrap"><time class="post-meta__date"><span class="post-meta__date-created" title="发表于 2020-06-11 09:17:10"><i class="far fa-calendar-alt"></i>2020-06-11</span><span class="article-meta__separator">|</span><span class="post-meta__date-updated" title="更新于 2020-07-08 10:13:03"><i class="fas fa-history"></i>2020-07-08</span></time><span class="article-meta"><span class="article-meta__separator">|</span><i class="fas fa-inbox article-meta__icon"></i><a class="article-meta__categories" href="/categories/uncategorized/">uncategorized</a></span><span class="article-meta tags"><span class="article-meta__separator">|</span><i class="fas fa-tag article-meta__icon"></i><a class="article-meta__tags" href="/tags/Mysql/">Mysql</a></span></div><div class="content">情景最近查看服务器上的Mysql自动备份,发现关于blob数据类型使用mysqldump导出有乱码的情况,命令如下:
mysqldump -h$db_host -u$db_username -p$db_password --events --default-character-set=utf8 --all-databases | gzip > $backup_dir/mysql_dump_$today.sql.gz
原因分析看到有乱码,肯定第一时间怀疑是字符集的问题,但是又确认了一下utf8是没有问题的,而且发现乱码是因为包含blob类型字段,所以查了一下,原来少了个参数–hex-blob,看参数名应该是以二进制形式导出blob。
解决方案修改后的命令:
mysqldump -h$db_host -u$db_username -p$db_password --events --default-character-set=utf8 --hex-blob --all-databases | gzip > $backup_dir/mysq ...</div></div></div><nav id="pagination"><div class="pagination"><span class="page-number current">1</span><a class="page-number" href="/page/2/">2</a><span class="space">…</span><a class="page-number" href="/page/7/">7</a><a class="extend next" rel="next" href="/page/2/"><i class="fas fa-chevron-right fa-fw"></i></a></div></nav></div><div class="aside_content" id="aside_content"><div class="card-widget card-info"><div class="card-content"><div class="card-info-avatar is-center"><img class="avatar-img" src="/images/avatar.png" onerror="this.onerror=null;this.src='/img/friend_404.gif'" alt="avatar"/><div class="author-info__name">混饭</div><div class="author-info__description">重度拖延症患者(-__-)b</div></div><div class="card-info-data"><div class="card-info-data-item is-center"><a href="/archives"><div class="headline">文章</div><div class="length_num">65</div></a></div><div class="card-info-data-item is-center"> <a href="/tags"><div class="headline">标签</div><div class="length_num">60</div></a></div><div class="card-info-data-item is-center"> <a href="/categories"><div class="headline">分类</div><div class="length_num">2</div></a></div></div><div class="card-info-bookmark is-center"><button class="button--animated" id="bookmark-it" title="加入书签"><i class="fas fa-bookmark"></i><span>加入书签</span></button></div><div class="card-info-social-icons is-center"><a class="social-icon" href="https://github.com/hf-hf" target="_blank" title="github"><i class="fab fa-github"></i></a><a class="social-icon" href="https://hunfan.top/atom.xml" target="_blank" title="rss"><i class="fas fa-rss"></i></a><a class="social-icon" href="https://gitee.com/hf-hf" target="_blank" title="gitee"><i class="fas fa-gitee"></i></a><a class="social-icon" href="https://tuishuxia.com" target="_blank" title="tuishuxia"><i class="fas fa-tuishuxia"></i></a></div></div></div><div class="card-widget card-announcement"><div class="card-content"><div class="item-headline"><i class="fas fa-bullhorn card-announcement-animation"></i><span>公告</span></div><div class="announcement_content">我的博客主题已更换为butterfly^^</div></div></div><div class="card-widget card-recent-post"><div class="card-content"><div class="item-headline"><i class="fas fa-history"></i><span>最新文章</span></div><div class="aside-recent-item"><div class="aside-recent-post"><a href="/posts/ecdd7de8/"><div class="aside-post-cover"><img class="aside-post-bg" data-src="/upload/homePage/20181105161104.jpg" onerror="this.onerror=null;this.src='/img/404.jpg'" title="Google,Twitter和Spotify怎样建立文档文化" alt="Google,Twitter和Spotify怎样建立文档文化"/></div><div class="aside-post-title"><div class="aside-post_title" href="/posts/ecdd7de8/" title="Google,Twitter和Spotify怎样建立文档文化">Google,Twitter和Spotify怎样建立文档文化</div><time class="aside-post_meta post-meta__date" title="发表于 2021-11-08 09:20:34">2021-11-08</time></div></a></div><div class="aside-recent-post"><a href="/posts/204726e2/"><div class="aside-post-cover"><img class="aside-post-bg" data-src="/upload/homePage/20210928152000.jpg" onerror="this.onerror=null;this.src='/img/404.jpg'" title="Spring声明式事务Transactional原理只看这一篇就够了" alt="Spring声明式事务Transactional原理只看这一篇就够了"/></div><div class="aside-post-title"><div class="aside-post_title" href="/posts/204726e2/" title="Spring声明式事务Transactional原理只看这一篇就够了">Spring声明式事务Transactional原理只看这一篇就够了</div><time class="aside-post_meta post-meta__date" title="发表于 2021-09-28 15:18:34">2021-09-28</time></div></a></div><div class="aside-recent-post"><a href="/posts/6a76cba2/"><div class="aside-post-cover"><img class="aside-post-bg" data-src="/upload/homePage/20210517184300.jpg" onerror="this.onerror=null;this.src='/img/404.jpg'" title="Nodejs14大版本特性以及版本管理n模块" alt="Nodejs14大版本特性以及版本管理n模块"/></div><div class="aside-post-title"><div class="aside-post_title" href="/posts/6a76cba2/" title="Nodejs14大版本特性以及版本管理n模块">Nodejs14大版本特性以及版本管理n模块</div><time class="aside-post_meta post-meta__date" title="发表于 2021-04-26 14:43:09">2021-04-26</time></div></a></div><div class="aside-recent-post"><a href="/posts/10b18d71/"><div class="aside-post-cover"><img class="aside-post-bg" data-src="/upload/20210402%E9%87%8D%E5%BA%86%E6%B8%B8%E8%AE%B0/20210402_%E9%87%8D%E5%BA%86_12.jpg" onerror="this.onerror=null;this.src='/img/404.jpg'" title="20210402-重庆游记" alt="20210402-重庆游记"/></div><div class="aside-post-title"><div class="aside-post_title" href="/posts/10b18d71/" title="20210402-重庆游记">20210402-重庆游记</div><time class="aside-post_meta post-meta__date" title="发表于 2021-04-26 14:06:44">2021-04-26</time></div></a></div><div class="aside-recent-post"><a href="/posts/364d7e27/"><div class="aside-post-cover"><img class="aside-post-bg" data-src="/upload/homePage/20210426115900.jpg" onerror="this.onerror=null;this.src='/img/404.jpg'" title="字符串编码问题" alt="字符串编码问题"/></div><div class="aside-post-title"><div class="aside-post_title" href="/posts/364d7e27/" title="字符串编码问题">字符串编码问题</div><time class="aside-post_meta post-meta__date" title="发表于 2021-04-26 13:51:30">2021-04-26</time></div></a></div></div></div></div><div class="card-widget card-categories"><div class="card-content"><div class="item-headline"><i class="fas fa-folder-open"></i><span>分类</span></div><ul class="card-category-list">
<li class="card-category-list-item "><a class="card-category-list-link" href="/categories/uncategorized/"><span class="card-category-list-name">uncategorized</span><span class="card-category-list-count">63</span></a></li><li class="card-category-list-item "><a class="card-category-list-link" href="/categories/%E6%97%85%E6%B8%B8%E6%97%A5%E8%AE%B0/"><span class="card-category-list-name">旅游日记</span><span class="card-category-list-count">2</span></a></li>
</ul></div></div><div class="card-widget card-tags"><div class="card-content"><div class="item-headline"><i class="fas fa-tags"></i><span>标签</span></div><div class="card-tag-cloud"><a href='/tags/Eclipse/' style='font-size:21px; color:rgb(1, 119, 0)'>Eclipse</a><a href='/tags/Feign/' style='font-size:21px; color:rgb(123, 157, 69)'>Feign</a><a href='/tags/Hibernate-validator/' style='font-size:16px; color:rgb(151, 25, 135)'>Hibernate-validator</a><a href='/tags/IDE/' style='font-size:16px; color:rgb(70, 93, 112)'>IDE</a><a href='/tags/Idea/' style='font-size:21px; color:rgb(33, 55, 118)'>Idea</a><a href='/tags/Java/' style='font-size:17px; color:rgb(133, 111, 80)'>Java</a><a href='/tags/Maven/' style='font-size:20px; color:rgb(190, 151, 166)'>Maven</a><a href='/tags/Maven-Helper/' style='font-size:17px; color:rgb(108, 156, 77)'>Maven Helper</a><a href='/tags/Mysql/' style='font-size:20px; color:rgb(83, 67, 10)'>Mysql</a><a href='/tags/RESTful/' style='font-size:18px; color:rgb(115, 79, 83)'>RESTful</a><a href='/tags/Set%E5%BA%8F%E5%88%97%E5%8C%96/' style='font-size:20px; color:rgb(56, 79, 6)'>Set序列化</a><a href='/tags/Spring-Boot/' style='font-size:16px; color:rgb(93, 189, 3)'>Spring Boot</a><a href='/tags/Spring-Cloud/' style='font-size:16px; color:rgb(158, 181, 12)'>Spring Cloud</a><a href='/tags/algolia/' style='font-size:18px; color:rgb(12, 161, 8)'>algolia</a><a href='/tags/cerbot/' style='font-size:19px; color:rgb(74, 52, 134)'>cerbot</a><a href='/tags/deploy/' style='font-size:16px; color:rgb(33, 96, 160)'>deploy</a><a href='/tags/docker/' style='font-size:18px; color:rgb(108, 180, 189)'>docker</a><a href='/tags/docs/' style='font-size:18px; color:rgb(165, 142, 164)'>docs</a><a href='/tags/eclipse-paho/' style='font-size:19px; color:rgb(39, 116, 65)'>eclipse paho</a><a href='/tags/encode/' style='font-size:17px; color:rgb(168, 26, 47)'>encode</a><a href='/tags/encrypted/' style='font-size:20px; color:rgb(189, 94, 152)'>encrypted</a><a href='/tags/fastjson/' style='font-size:20px; color:rgb(86, 75, 46)'>fastjson</a><a href='/tags/formatter/' style='font-size:20px; color:rgb(103, 84, 78)'>formatter</a><a href='/tags/git/' style='font-size:17px; color:rgb(188, 140, 40)'>git</a><a href='/tags/gitee/' style='font-size:18px; color:rgb(10, 151, 104)'>gitee</a><a href='/tags/google/' style='font-size:20px; color:rgb(116, 66, 27)'>google</a><a href='/tags/gradle/' style='font-size:17px; color:rgb(196, 150, 58)'>gradle</a><a href='/tags/hexo/' style='font-size:19px; color:rgb(113, 27, 147)'>hexo</a><a href='/tags/https/' style='font-size:20px; color:rgb(76, 134, 171)'>https</a><a href='/tags/idea/' style='font-size:17px; color:rgb(99, 190, 11)'>idea</a><a href='/tags/ignore/' style='font-size:17px; color:rgb(110, 196, 133)'>ignore</a><a href='/tags/import/' style='font-size:21px; color:rgb(102, 148, 124)'>import</a><a href='/tags/jstack/' style='font-size:19px; color:rgb(51, 118, 73)'>jstack</a><a href='/tags/jvm/' style='font-size:21px; color:rgb(49, 28, 111)'>jvm</a><a href='/tags/kafka/' style='font-size:18px; color:rgb(85, 114, 29)'>kafka</a><a href='/tags/linux/' style='font-size:20px; color:rgb(62, 43, 104)'>linux</a><a href='/tags/logrotate/' style='font-size:16px; color:rgb(87, 33, 50)'>logrotate</a><a href='/tags/maven/' style='font-size:16px; color:rgb(117, 129, 166)'>maven</a><a href='/tags/mqtt/' style='font-size:20px; color:rgb(119, 75, 81)'>mqtt</a><a href='/tags/mybatis/' style='font-size:16px; color:rgb(121, 154, 147)'>mybatis</a></div></div></div><div class="card-widget card-archives"><div class="card-content"><div class="item-headline"><i class="fas fa-archive"></i><span>归档</span></div><ul class="card-archive-list"><li class="card-archive-list-item"><a class="card-archive-list-link" href="/archives/2021/11/"><span class="card-archive-list-date">十一月 2021</span><span class="card-archive-list-count">1</span></a></li><li class="card-archive-list-item"><a class="card-archive-list-link" href="/archives/2021/09/"><span class="card-archive-list-date">九月 2021</span><span class="card-archive-list-count">1</span></a></li><li class="card-archive-list-item"><a class="card-archive-list-link" href="/archives/2021/04/"><span class="card-archive-list-date">四月 2021</span><span class="card-archive-list-count">5</span></a></li><li class="card-archive-list-item"><a class="card-archive-list-link" href="/archives/2020/06/"><span class="card-archive-list-date">六月 2020</span><span class="card-archive-list-count">2</span></a></li><li class="card-archive-list-item"><a class="card-archive-list-link" href="/archives/2020/05/"><span class="card-archive-list-date">五月 2020</span><span class="card-archive-list-count">2</span></a></li><li class="card-archive-list-item"><a class="card-archive-list-link" href="/archives/2019/07/"><span class="card-archive-list-date">七月 2019</span><span class="card-archive-list-count">1</span></a></li><li class="card-archive-list-item"><a class="card-archive-list-link" href="/archives/2019/05/"><span class="card-archive-list-date">五月 2019</span><span class="card-archive-list-count">1</span></a></li><li class="card-archive-list-item"><a class="card-archive-list-link" href="/archives/2019/04/"><span class="card-archive-list-date">四月 2019</span><span class="card-archive-list-count">1</span></a></li><li class="card-archive-list-item more is-center"><a class="card-archive-list-link-more" href="/archives">
<span>查看更多</span><i class="fas fa-angle-right" ></i></a></li></ul></div></div><div class="card-widget card-webinfo"><div class="card-content"><div class="item-headline"><i class="fas fa-chart-line"></i><span>网站资讯</span></div><div class="webinfo"><div class="webinfo-item"><div class="webinfo-article-name">文章数目 :</div><div class="webinfo-article-count">65</div></div><div class="webinfo-item"><div class="webinfo-runtime-name">已运行时间 :</div><div class="webinfo-runtime-count" id="webinfo-runtime-count" publish_date="6/1/2017 00:00:00"> </div></div><div class="webinfo-item"> <div class="webinfo-site-uv-name">本站访客数 :</div><div class="webinfo-site-uv-count" id="busuanzi_value_site_uv"></div></div><div class="webinfo-item"><div class="webinfo-site-name">本站总访问量 :</div><div class="webinfo-site-pv-count" id="busuanzi_value_site_pv"></div></div></div></div></div></div></main><footer id="footer" data-type="color"><div id="footer-wrap"><div class="copyright">©2017 - 2022 By 混饭</div><div class="icp"><a href="http://www.beian.miit.gov.cn/" target="_blank" rel="noopener"><img class="icp-icon" src="/img/icp.png"/><span>鲁ICP备19006622号-1 版权所有</span></a></div></div></footer></div><section class="rightside" id="rightside"><div id="rightside-config-hide"><button class="translate_chn_to_cht" id="translateLink" title="简繁转换">繁</button><button id="darkmode" title="浅色和深色模式转换"><i class="fas fa-adjust"></i></button></div><div id="rightside-config-show"><button id="rightside_config" title="设置"><i class="fas fa-cog"></i></button><button id="go-up" title="回到顶部"><i class="fas fa-arrow-up"></i></button></div></section><div class="search-dialog" id="algolia-search"><div class="search-dialog__title" id="algolia-search-title">Algolia</div><div id="algolia-input-panel"><div id="algolia-search-input"></div></div><hr/><div id="algolia-search-results"><div id="algolia-hits"></div><div id="algolia-pagination"></div><div id="algolia-stats"></div></div><span class="search-close-button"><i class="fas fa-times"></i></span></div><div class="search-mask"></div><script src="https://cdn.jsdelivr.net/npm/jquery@latest/dist/jquery.min.js"></script><script src="/js/utils.js"></script><script src="/js/main.js"></script><script src="/js/tw_cn.js"></script><script src="https://cdn.jsdelivr.net/npm/@fancyapps/fancybox@latest/dist/jquery.fancybox.min.js"></script><script src="https://cdn.jsdelivr.net/npm/node-snackbar/dist/snackbar.min.js"></script><script defer id="ribbon" src="/js/third-party/canvas-ribbon.js" size="150" alpha="0.6" zIndex="-1" mobile="false" data-click="true"></script><script async src="//busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js"></script><script src="https://cdn.jsdelivr.net/npm/instant.page/instantpage.min.js" type="module" defer></script><script src="https://cdn.jsdelivr.net/npm/vanilla-lazyload/dist/lazyload.iife.min.js" async></script><script src="/js/search/algolia.js"></script><script src="https://cdn.jsdelivr.net/npm/typed.js"></script><script>var subtitleType = function () {
var subtitleEffect = true
fetch('https://v1.hitokoto.cn')
.then(function (res) {
return res.json()
})
.then(function (data) {
if (subtitleEffect) {
var from = '出自 ' + data.from
var sub = "我始终相信,走过平湖烟雨,岁月山河,那些历尽劫数,尝遍百味的人,会更加生动而干净。".length == 0 ? new Array() : "我始终相信,走过平湖烟雨,岁月山河,那些历尽劫数,尝遍百味的人,会更加生动而干净。".split(',')
var both = sub.unshift(data.hitokoto, from)
var typed = new Typed('#subtitle', {
strings: sub,
startDelay: 300,
typeSpeed: 150,
loop: false,
backSpeed: 50,
})
} else {
document.getElementById('subtitle').innerHTML = data.hitokoto
}
})
.catch(function (err) {
console.error(err)
})
}
window.addEventListener('load', subtitleType)
</script></body></html>