作者:微信小助手
<p style="white-space: normal;font-family: -apple-system-font, BlinkMacSystemFont, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;letter-spacing: 0.544px;background-color: rgb(255, 255, 255);text-align: center;" data-mpa-powered-by="yiban.io"><span style="font-family: "Helvetica Neue", Helvetica, "Hiragino Sans GB", "Microsoft YaHei", Arial, sans-serif;font-size: 15px;">公众号后台回复“<span style="color: rgb(255, 0, 0);"><strong>面试</strong></span>”,获取精品学习资料</span></p> <p style="white-space: normal;font-family: -apple-system-font, BlinkMacSystemFont, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;letter-spacing: 0.544px;background-color: rgb(255, 255, 255);text-align: center;"><img class="rich_pages" data-backh="367" data-backw="492" data-ratio="0.7466666666666667" data-s="300,640" data-type="jpeg" data-w="750" src="/upload/7caac45dccbb0afaaac3a4d8d79322ec.jpg" style="font-family: mp-quote, -apple-system-font, BlinkMacSystemFont, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;box-sizing: border-box !important;visibility: visible !important;width: 677px !important;"><br></p> <p style="margin-bottom: 5px;white-space: normal;font-family: -apple-system-font, BlinkMacSystemFont, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;letter-spacing: 0.544px;background-color: rgb(255, 255, 255);text-align: center;"><span style="color: black;font-family: 微软雅黑, sans-serif;font-size: 15px;letter-spacing: 2px;">扫描下方二维码了解详情,试听课程</span></p> <p style="white-space: normal;font-family: -apple-system-font, BlinkMacSystemFont, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;letter-spacing: 0.544px;background-color: rgb(255, 255, 255);text-align: center;"><img class="rich_pages" data-ratio="1" data-s="300,640" data-type="png" data-w="600" src="/upload/dcbe71e4f878b1647ec3e500b226b3e3.png" style="box-sizing: border-box !important;visibility: visible !important;width: 154px !important;"></p> <p style="white-space: normal;font-family: -apple-system-font, BlinkMacSystemFont, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;letter-spacing: 0.544px;background-color: rgb(255, 255, 255);text-align: right;"><img data-ratio="0.6666666666666666" data-type="png" data-w="710" width="100%" src="/upload/15d922467a13a949ce32e3cbe32f3d2b.png" style="letter-spacing: 0.544px;text-align: center;display: block;box-sizing: border-box !important;visibility: visible !important;width: auto !important;"><span style="font-size: 15px;color: rgb(61, 170, 214);letter-spacing: 0.544px;">本文来源:程序员内点事</span></p> <p style="white-space: normal;font-family: -apple-system-font, BlinkMacSystemFont, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;letter-spacing: 0.544px;background-color: rgb(255, 255, 255);text-align: right;"><br></p> <p style="white-space: normal;font-family: -apple-system-font, BlinkMacSystemFont, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;letter-spacing: 0.544px;background-color: rgb(255, 255, 255);text-align: right;"><br></p> <section style="padding-top: 1em;padding-bottom: 8px;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, "PingFang SC", Cambria, Cochin, Georgia, Times, "Times New Roman", serif;font-size: 16px;letter-spacing: 0.544px;text-align: left;white-space: normal;background-color: rgb(255, 255, 255);color: rgb(74, 74, 74);line-height: 2em;"> 前一段有幸参与到一个智能家居项目的开发,由于之前都没有过这方面的开发经验,所以对智能硬件的开发模式和技术栈都颇为好奇。 </section> <figure data-tool="mdnice编辑器" style="margin-top: 10px;margin-bottom: 10px;color: rgb(63, 63, 63);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, "PingFang SC", Cambria, Cochin, Georgia, Times, "Times New Roman", serif;font-size: 16px;letter-spacing: 0.544px;text-align: left;white-space: normal;background-color: rgb(255, 255, 255);"> <img data-ratio="0.6666666666666666" data-type="jpeg" data-w="1269" src="/upload/a942c649c07fa7c32e8d335b749646d7.jpg" style="margin-right: auto;margin-bottom: 25px;margin-left: auto;display: block;border-radius: 4px;box-sizing: border-box !important;width: 677px !important;visibility: visible !important;"> <section style="margin-top: 5px;text-align: center;color: rgb(136, 136, 136);font-size: 12px;font-family: PingFangSC-Light;line-height: 2em;"> 智能可燃气体报警器 </section> </figure> <section style="padding-top: 1em;padding-bottom: 8px;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, "PingFang SC", Cambria, Cochin, Georgia, Times, "Times New Roman", serif;font-size: 16px;letter-spacing: 0.544px;text-align: left;white-space: normal;background-color: rgb(255, 255, 255);color: rgb(74, 74, 74);line-height: 2em;"> 产品是一款可燃气体报警器,如果家中燃气泄露浓度到达一定阈值,报警器检测到并上传气体浓度值给后台,后台以电话、短信、微信等方式,提醒用户家中可能有气体泄漏。 </section> <section style="padding-top: 1em;padding-bottom: 8px;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, "PingFang SC", Cambria, Cochin, Georgia, Times, "Times New Roman", serif;font-size: 16px;letter-spacing: 0.544px;text-align: left;white-space: normal;background-color: rgb(255, 255, 255);color: rgb(74, 74, 74);line-height: 2em;"> 用户还可能向报警器发一些关闭报警、调整音量的指令等。整体功能还是比较简单的,大致的逻辑如下图所示: </section> <p><img data-ratio="0.5494011976047904" data-type="png" data-w="668" src="/upload/417284c3c2b79435076ca1928fde831f.png" style="margin-right: auto;margin-bottom: 25px;margin-left: auto;display: block;border-radius: 4px;box-sizing: border-box !important;width: 668px !important;visibility: visible !important;"></p> <section style="padding-top: 1em;padding-bottom: 8px;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, "PingFang SC", Cambria, Cochin, Georgia, Times, "Times New Roman", serif;font-size: 16px;letter-spacing: 0.544px;text-align: left;white-space: normal;background-color: rgb(255, 255, 255);color: rgb(74, 74, 74);line-height: 2em;"> 但当我真正的参与其中开发时,其实有一点小小的失望,因为在整个研发过程中,并没用到什么新的技术,还是常规的几种中间件,只不过换个用法而已。 </section> <section style="padding-top: 1em;padding-bottom: 8px;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, "PingFang SC", Cambria, Cochin, Georgia, Times, "Times New Roman", serif;font-size: 16px;letter-spacing: 0.544px;text-align: left;white-space: normal;background-color: rgb(255, 255, 255);color: rgb(74, 74, 74);line-height: 2em;"> 技术选型用 <code style="margin-right: 2px;margin-left: 2px;padding: 2px 4px;font-size: 14px;border-radius: 4px;background-color: rgba(27, 31, 35, 0.05);font-family: "Operator Mono", Consolas, Monaco, Menlo, monospace;word-break: break-all;color: rgb(40, 202, 113);">rabbitmq</code> 来做核心的组件,主要考虑到运维成本低,组内成员使用的熟练度比较高。 </section> <hr data-tool="mdnice编辑器" style="margin-top: 10px;margin-bottom: 10px;color: rgb(63, 63, 63);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, "PingFang SC", Cambria, Cochin, Georgia, Times, "Times New Roman", serif;font-size: 16px;letter-spacing: 0.544px;white-space: normal;background-color: rgb(255, 255, 255);height: 1px;border-width: initial;border-style: none;border-color: initial;text-align: center;background-image: linear-gradient(to right, rgba(93, 186, 133, 0), rgba(93, 186, 133, 0.75), rgba(93, 186, 133, 0));"> <section style="padding-top: 1em;padding-bottom: 8px;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, "PingFang SC", Cambria, Cochin, Georgia, Times, "Times New Roman", serif;font-size: 16px;letter-spacing: 0.544px;text-align: left;white-space: normal;background-color: rgb(255, 255, 255);color: rgb(74, 74, 74);line-height: 2em;"> 下面和小伙伴分享一下如何用 <code style="margin-right: 2px;margin-left: 2px;padding: 2px 4px;font-size: 14px;border-radius: 4px;background-color: rgba(27, 31, 35, 0.05);font-family: "Operator Mono", Consolas, Monaco, Menlo, monospace;word-break: break-all;color: rgb(40, 202, 113);">springboot</code> + <code style="margin-right: 2px;margin-left: 2px;padding: 2px 4px;font-size: 14px;border-radius: 4px;background-color: rgba(27, 31, 35, 0.05);font-family: "Operator Mono", Consolas, Monaco, Menlo, monospace;word-break: break-all;color: rgb(40, 202, 113);">rabbitmq</code> 搭建物联网( <code style="margin-right: 2px;margin-left: 2px;padding: 2px 4px;font-size: 14px;border-radius: 4px;background-color: rgba(27, 31, 35, 0.05);font-family: "Operator Mono", Consolas, Monaco, Menlo, monospace;word-break: break-all;color: rgb(40, 202, 113);">IOT</code>)平台,其实智能硬件也没想象的那么高不可攀! </section> <section style="padding-top: 1em;padding-bottom: 8px;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, "PingFang SC", Cambria, Cochin, Georgia, Times, "Times New Roman", serif;font-size: 16px;letter-spacing: 0.544px;text-align: left;white-space: normal;background-color: rgb(255, 255, 255);color: rgb(74, 74, 74);line-height: 2em;"> 很多小伙伴可能有点懵? <code style="margin-right: 2px;margin-left: 2px;padding: 2px 4px;font-size: 14px;border-radius: 4px;background-color: rgba(27, 31, 35, 0.05);font-family: "Operator Mono", Consolas, Monaco, Menlo, monospace;word-break: break-all;color: rgb(40, 202, 113);">rabbitmq</code> 不是消息队列吗? <strong style="line-height: 1.75em;">怎么又能做智能硬件了</strong>? </section> <section style="padding-top: 1em;padding-bottom: 8px;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, "PingFang SC", Cambria, Cochin, Georgia, Times, "Times New Roman", serif;font-size: 16px;letter-spacing: 0.544px;text-align: left;white-space: normal;background-color: rgb(255, 255, 255);color: rgb(74, 74, 74);line-height: 2em;"> 其实 <code style="margin-right: 2px;margin-left: 2px;padding: 2px 4px;font-size: 14px;border-radius: 4px;background-color: rgba(27, 31, 35, 0.05);font-family: "Operator Mono", Consolas, Monaco, Menlo, monospace;word-break: break-all;color: rgb(40, 202, 113);">rabbitmq</code>有两种协议,我们平时接触的消息队列是用的 <code style="margin-right: 2px;margin-left: 2px;padding: 2px 4px;font-size: 14px;border-radius: 4px;background-color: rgba(27, 31, 35, 0.05);font-family: "Operator Mono", Consolas, Monaco, Menlo, monospace;word-break: break-all;color: rgb(40, 202, 113);">AMQP</code>协议,而用在智能硬件中的是 <code style="margin-right: 2px;margin-left: 2px;padding: 2px 4px;font-size: 14px;border-radius: 4px;background-color: rgba(27, 31, 35, 0.05);font-family: "Operator Mono", Consolas, Monaco, Menlo, monospace;word-break: break-all;color: rgb(40, 202, 113);">MQTT</code>协议。 </section> <h2 data-tool="mdnice编辑器" style="margin-top: 1em;margin-bottom: 10px;font-weight: bold;font-size: 22px;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, "PingFang SC", Cambria, Cochin, Georgia, Times, "Times New Roman", serif;letter-spacing: 0.544px;white-space: normal;background: url("https://mmbiz.qpic.cn/mmbiz_png/0OzaL
作者:cdhqyj
怎样才能学好Java? java是一种平台,同时也相当于一种程序设计语言,是当前非常受欢迎的语言之一,从技术层级来看,这种面向网络的程序设计语言支撑了很多程序,未来几年选java好不好?怎样学好java呢?java人才的需求量是相当大的,据IDC统计数字显示,在所有软件开发类人才的需求当中,java工程师的需求达到全部需求量的60%—70%,同时java工程师的工资相对较高,一般有3-5年开发经验的工程师,拥有高年薪不是什么问题,所以选java很好,前景也很不错。 对于java,如何能更好的学习? 培养兴趣,兴趣是我们坚持学习的动力,如果你只是把写程序作为谋生的手段,我想你会活的很累,但也并非让你做白日梦,毕竟兴趣在学习和生活当中是很重要的,有空的话,建议到各大程序员论坛多逛逛。 2.脚踏实地,在学习过程当中,这一点会很重要,快餐的方式是不可取的。 3.多实践,有很多人认为学习编程的秘笈是:编程、编程、再编程,所以多敲敲代码还是很有必要的。 4.加强英文阅读能力,在java开发中,很多软件都是需要到英文网站下载的,所以这是基本要求。 5.使用合适的工具,合适的开发工具可以更好的提高开发效率,使软件的质量更高,当然出现bug的频次也会更少。 6.多多参考程序代码, 程序代码是软件开发重要的成果之一,其中渗透了程序员的思想与灵魂。 以上六点学习java的学习方法是很有效的,作为java开发工程师可以参考。
作者:微信小助手
<p style="white-space: normal;color: rgb(0, 0, 0);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, "PingFang SC", Cambria, Cochin, Georgia, Times, "Times New Roman", serif;font-size: 16px;text-align: center;"><span style="font-size: 14px;letter-spacing: 0.544px;max-width: 100%;color: rgb(255, 41, 65);line-height: 22.4px;">(给</span><span style="font-size: 14px;letter-spacing: 0.544px;max-width: 100%;line-height: 22.4px;color: rgb(0, 128, 255);">ImportNew</span><span style="font-size: 14px;letter-spacing: 0.544px;max-width: 100%;color: rgb(255, 41, 65);line-height: 22.4px;">加星标,提高Java技能)</span></p> <blockquote class="js_blockquote_wrap" data-type="2" data-url="" data-author-name="" data-content-utf8-length="9" data-source-title="" style="white-space: normal;"> <section class="js_blockquote_digest"> <p>投稿: 后端技术学堂</p> </section> </blockquote> <p style="white-space: normal;"><span style="font-family: -apple-system-font, BlinkMacSystemFont, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 15px;letter-spacing: 0px;word-spacing: 0.1em;text-align: left;">学</span><span style="font-family: -apple-system-font, BlinkMacSystemFont, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 15px;letter-spacing: 0px;word-spacing: 0.1em;text-align: left;">习关系型数据库 MySQL 是很好的切入点,大部分人学习和工作中用惯了 CRUD,对面试官刨根问底的灵魂拷问你还能对答如流吗?</span><span style="font-family: -apple-system-font, BlinkMacSystemFont, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 15px;letter-spacing: 0px;word-spacing: 0.1em;text-align: left;">我们有必要了解一些更深层次的数据库基础原理。</span><br></p> <p style="white-space: normal;color: rgb(62, 62, 62);font-family: -apple-system-font, system-ui, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 16px;letter-spacing: 0.544px;text-align: left;"><span style="letter-spacing: 0px;word-spacing: 0.1em;color: rgb(51, 51, 51);font-family: -apple-system-font, BlinkMacSystemFont, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 15px;"><br></span></p> <p style="white-space: normal;color: rgb(62, 62, 62);font-family: -apple-system-font, system-ui, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 16px;letter-spacing: 0.544px;text-align: left;"><span style="letter-spacing: 0px;word-spacing: 0.1em;color: rgb(51, 51, 51);font-family: -apple-system-font, BlinkMacSystemFont, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 15px;">整理了面试中,关于 MySQL 事务和存储引擎的 FAQ。你想知道的都在这里。</span></p> <h3 style="white-space: normal;color: rgb(62, 62, 62);font-family: -apple-system-font, system-ui, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;letter-spacing: 0.544px;text-align: left;"><br></h3> <h3 style="white-space: normal;color: rgb(62, 62, 62);font-family: -apple-system-font, system-ui, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;letter-spacing: 0.544px;text-align: left;"><span style="font-size: 15px;"><strong style="word-spacing: 0.1em;color: rgb(171, 25, 66);letter-spacing: 0.544px;">一、什么是事务?</strong></span></h3> <p><span style="font-size: 15px;"><strong style="word-spacing: 0.1em;color: rgb(171, 25, 66);letter-spacing: 0.544px;"><br></strong></span></p> <p style="white-space: normal;color: rgb(62, 62, 62);font-family: -apple-system-font, system-ui, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 16px;letter-spacing: 0.544px;text-align: left;"><span style="letter-spacing: 0px;word-spacing: 0.1em;color: rgb(51, 51, 51);font-family: -apple-system-font, BlinkMacSystemFont, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 15px;">事务就是「一组原子性的SQL查询」,或者说一个独立的工作单元。如果数据库引擎能够成功地对数据库应用该组查询的全部语句,那么就执行该组查询。如果其中有任何一条语句因为崩溃或其他原因无法执行,那么所有的语句都不会执行。也就是说,事务内的语句,要么全部执行成功,要么全部执行失败。</span></p> <p style="white-space: normal;color: rgb(62, 62, 62);font-family: -apple-system-font, system-ui, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 16px;letter-spacing: 0.544px;text-align: left;"><span style="letter-spacing: 0px;word-spacing: 0.1em;color: rgb(51, 51, 51);font-family: -apple-system-font, BlinkMacSystemFont, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 15px;"><br></span></p> <h3 style="white-space: normal;color: rgb(62, 62, 62);font-family: -apple-system-font, system-ui, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;letter-spacing: 0.544px;text-align: left;"><span style="font-size: 15px;"><strong style="word-spacing: 0.1em;color: rgb(171, 25, 66);letter-spacing: 0.544px;">二、事务控制语法知道吗?</strong></span></h3> <p><span style="font-size: 15px;"><strong style="word-spacing: 0.1em;color: rgb(171, 25, 66);letter-spacing: 0.544px;"><br></strong></span></p> <section class="code-snippet__fix code-snippet__js"> <ul class="code-snippet__line-index code-snippet__js"> </ul> <pre class="code-snippet__js" data-lang="sql"><code><span class="code-snippet_outer"><span class="code-snippet__keyword">BEGIN</span> 或 <span class="code-snippet__keyword">START</span> <span class="code-snippet__keyword">TRANSACTION</span> 显式地开启一个事务;</span></code><code><span class="code-snippet_outer"><span class="code-snippet__keyword">COMMIT</span> / <span class="code-snippet__keyword">COMMIT</span> <span class="code-snippet__keyword">WORK</span>二者是等价的。提交事务,并使已对数据库进行的所有修改成为永久性的;</span></code><code><span class="code-snippet_outer"><span class="code-snippet__keyword">ROLLBACK</span> / <span class="code-snippet__keyword">ROLLBACK</span> <span class="code-snippet__keyword">WORK</span>。回滚会结束用户的事务,并撤销正在进行的所有未提交的修改;</span></code><code><span class="code-snippet_outer"><span class="code-snippet__keyword">SAVEPOINT</span> identifier 在事务中创建一个保存点,一个事务中可以有多个 <span class="code-snippet__keyword">SAVEPOINT</span>;</span></code><code><span class="code-snippet_outer"><span class="code-snippet__keyword">RELEASE</span> <span class="code-snippet__keyword">SAVEPOINT</span> identifier 删除一个事务的保存点;</span></code><code><span class="code-snippet_outer"><span class="code-snippet__keyword">ROLLBACK</span> <span class="code-snippet__keyword">TO</span> identifier 把事务回滚到标记点;</span></code><code><span class="code-snippet_outer"><span class="code-snippet__keyword">SET</span> <span class="code-snippet__keyword">TRANSACTION</span> 用来设置事务的隔离级别。<span class="code-snippet__keyword">InnoDB</span> 存储引擎提供事务的隔离级别有<span class="code-snippet__keyword">READ</span> UNCOMMITTED、<span class="code-snippet__keyword">READ</span> COMMITTED、REPEATABLE <span class="code-snippet__keyword">READ</span> 和 <span class="code-snippet__keyword">SERIALIZABLE</span></span></code></pre> </section> <h3 style="white-space: normal;color: rgb(62, 62, 62);font-family: -apple-system-font, system-ui, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;letter-spacing: 0.544px;text-align: left;"><br></h3> <h3 style="white-space: normal;color: rgb(62, 62, 62);font-family: -apple-system-font, system-ui, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;letter-spacing: 0.544px;text-align: left;"><span style="font-size: 15px;"><strong style="word-spacing: 0.1em;color: rgb(171, 25, 66);letter-spacing: 0.544px;">三、用通俗的语言说说你理解的事务</strong></span></h3> <p><span style="font-size: 15px;"><strong style="word-spacing: 0.1em;color: rgb(171, 25, 66);letter-spacing: 0.544px;"><br></strong></span></p> <p style="white-space: normal;color: rgb(62, 62, 62);font-family: -apple-system-font, system-ui, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 16px;letter-spacing: 0.544px;text-align: left;"><span style="letter-spacing: 0px;word-spacing: 0.1em;color: rgb(51, 51, 51);font-family: -apple-system-font, BlinkMacSystemFont, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 15px;">用银行业务举个栗子,用户 Lemon 有两银行卡,一张是招商银行 CMBC 的工资卡,另一张是工商银行 ICBC 的储蓄卡,每月10号发工资都要把招行卡的100万转到建设银行储蓄卡账户。记住这里的银行缩写后面就是对应的数据表名称,你要记不住,我给你理一理。</span></p> <p style="white-space: normal;color: rgb(62, 62, 62);font-family: -apple-system-font, system-ui, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 16px;letter-spacing: 0.544px;text-align: left;"><span style="letter-spacing: 0px;word-spacing: 0.1em;color: rgb(51, 51, 51);font-family: -apple-system-font, BlinkMacSystemFont, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 15px;"><br></span></p> <section class="code-snippet__fix code-snippet__js"> <ul class="code-snippet__line-index code-snippet__js"> </ul> <pre class="code-snippet__js"><code><span class="code-snippet_outer">招商银行(<span class="code-snippet__built_in">CMBC</span>):“存么?白痴!”</span></code><code><span class="code-snippet_outer">中国工商银行(ICBC):“爱存不存!”</span></code><code><span class="code-snippet_outer">中国建设银行(CCB):“存?存不?”</span></code><code><span class="code-snippet_outer">中国银行(BC):“不存!”</span></code><code><span class="code-snippet_outer">中国农业银行(ABC):“啊,不存!”</span></code><code><span class="code-snippet_outer">民生银行(CMSB):“存么?SB!"</span></code><code><span class="code-snippet_outer">兴业银行(CIB):“存一百。”</span></code><code><span class="code-snippet_outer">国家开发银行(CDB):“存点吧!”</span></code><code><span class="code-snippet_outer">汇丰银行(HSBC):“还是不存!”</span></code></pre> </section> <p style="text-align: center;"><img class="rich_pages js_insertlocalimg" data-ratio="0.8166666666666667" data-s="300,640" src="/upload/bfb1a7a6223f190e54f39453a9bd29b6.png" data-type="png" data-w="240" style=""></p> <p style="white-space: normal;color: rgb(62, 62, 62);font-family: -apple-system-font, system-ui, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 16px;letter-spacing: 0.544px;text-align: left;"><span style="letter-spacing: 0px;word-spacing: 0.1em;color: rgb(51, 51, 51);font-family: -apple-system-font, BlinkMacSystemFont, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 15px;">这个转账的操作可以简化抽成一个事务,包含如下步骤:</span></p> <p style="white-space: normal;color: rgb(62, 62, 62);font-family: -apple-system-font, system-ui, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 16px;letter-spacing: 0.544px;text-align: left;"><span style="letter-spacing: 0px;word-spacing: 0.1em;color: rgb(51, 51, 51);font-family: -apple-system-font, BlinkMacSystemFont, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 15px;"><br></span></p> <ol class="list-paddingleft-2" style="white-space: normal;color: rgb(62, 62, 62);font-family: -apple-system-font, system-ui, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 16px;letter-spacing: 0.544px;text-align: left;"> <li style="white-space: normal;color: rgb(62, 62, 62);font-family: -apple-system-font, system-ui, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 16px;letter-spacing: 0.544px;text-align: left;"><p style="white-space: normal;color: rgb(62, 62, 62);font-family: -apple-system-font, system-ui, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 16px;letter-spacing: 0.544px;text-align: left;"><span style="letter-spacing: 0px;word-spacing: 0.1em;color: rgb(51, 51, 51);font-family: -apple-system-font, BlinkMacSystemFont, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 15px;">查询 CMBC 账户的余额是否大于100万;</span></p></li> <li style="white-space: normal;color: rgb(62, 62, 62);font-family: -apple-system-font, system-ui, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 16px;letter-spacing: 0.544px;text-align: left;"><p style="white-space: normal;color: rgb(62, 62, 62);font-family: -apple-system-font, system-ui, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 16px;letter-spacing: 0.544px;text-align: left;"><span style="letter-spacing: 0px;word-spacing: 0.1em;color: rgb(51, 51, 51);font-family: -apple-system-font, BlinkMacSystemFont, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 15px;">从 CMBC 账户余额中减去100万;</span></p></li> <li style="white-space: normal;color: rgb(62, 62, 62);font-family: -apple-system-font, system-ui, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 16px;letter-spacing: 0.544px;text-align: left;"><p style="white-space: normal;color: rgb(62, 62, 62);font-family: -apple-system-font, system-ui, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 16px;letter-spacing: 0.544px;text-align: left;"><span style="letter-spacing: 0px;word-spacing: 0.1em;color: rgb(51, 51, 51);font-family: -apple-system-font, BlinkMacSystemFont, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 15px;">在 ICBC 账户余额中增加100万。</span></p></li> </ol> <p style="white-space: normal;color: rgb(62, 62, 62);font-family: -apple-system-font, system-ui, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 16px;letter-spacing: 0.544px;text-align: left;"><br></p> <p style="white-space: normal;color: rgb(62, 62, 62);font-family: -apple-system-font, system-ui, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 16px;letter-spacing: 0.544px;text-align: left;"><span style="letter-spacing: 0px;word-spacing: 0.1em;color: rgb(51, 51, 51);font-family: -apple-system-font, BlinkMacSystemFont, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 15px;">以下语句对应创建了一个转账事务:</span></p> <p style="white-space: normal;color: rgb(62, 62, 62);font-family: -apple-system-font, system-ui, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 16px;letter-spacing: 0.544px;text-align: left;"><span style="letter-spacing: 0px;word-spacing: 0.1em;color: rgb(51, 51, 51);font-family: -apple-system-font, BlinkMacSystemFont, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 15px;"><br></span></p> <section class="code-snippet__fix code-snippet__js"> <ul class="code-snippet__line-index code-snippet__js"> </ul> <pre class="code-snippet__js" data-lang="sql"><code><span class="code-snippet_outer"><span class="code-snippet__keyword">START</span> <span class="code-snippet__keyword">TRANSACTION</span>;</span></code><code><span class="code-snippet_outer"><span class="code-snippet__keyword">SELECT</span> balance <span class="code-snippet__keyword">FROM</span> CMBC <span class="code-snippet__keyword">WHERE</span> username=<span class="code-snippet__string">'lemon'</span>;</span></code><code><span class="code-snippet_outer"><span class="code-snippet__keyword">UPDATE</span> CMBC <span class="code-snippet__keyword">SET</span> balance = balance - <span class="code-snippet__number">1000000.00</span> <span class="code-snippet__keyword">WHERE</span> username = <span class="code-snippet__string">'lemon'</span>;</span></code><code><span class="code-snippet_outer"><span class="code-snippet__keyword">UPDATE</span> ICBC <span class="code-snippet__keyword">SET</span> balance = balance + <span class="code-snippet__number">1000000.00</span> <span class="code-snippet__keyword">WHERE</span> username = <span class="code-snippet__string">'lemon'</span>;</span></code><code><span class="code-snippet_outer"><span class="code-snippet__keyword">COMMIT</span>;</span></code></pre> </section> <h3 style="white-space: normal;color: rgb(62, 62, 62);font-family: -apple-system-font, system-ui, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;letter-spacing: 0.544px;text-align: left;"><br></h3> <h3 style="white-space: normal;color: rgb(62, 62, 62);font-family: -apple-system-font, system-ui, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;letter-spacing: 0.544px;text-align: left;"><span style="font-size: 15px;"><strong style="word-spacing: 0.1em;color: rgb(171, 25, 66);letter-spacing: 0.544px;">四、事务的ACID特性是什么?</strong></span></h3> <p><span style="font-size: 15px;"><strong style="word-spacing: 0.1em;color: rgb(171, 25, 66);letter-spacing: 0.544px;"><br></strong></span></p> <p style="white-space: normal;color: rgb(62, 62, 62);font-family: -apple-system-font, system-ui, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 16px;letter-spacing: 0.544px;text-align: left;"><span style="letter-spacing: 0px;word-spacing: 0.1em;color: rgb(51, 51, 51);font-family: -apple-system-font, BlinkMacSystemFont, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 15px;">ACID 其实是事务特性的英文首字母缩写,具体的含义是这样的:</span></p> <p style="white-space: normal;color: rgb(62, 62, 62);font-family: -apple-system-font, system-ui, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 16px;letter-spacing: 0.544px;text-align: left;"><span style="letter-spacing: 0px;word-spacing: 0.1em;color: rgb(51, 51, 51);font-family: -apple-system-font, BlinkMacSystemFont, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 15px;"><br></span></p> <ul class="list-paddingleft-2" style="white-space: normal;color: rgb(62, 62, 62);font-family: -apple-system-font, system-ui, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 16px;letter-spacing: 0.544px;text-align: left;"> <li style="white-space: normal;color: rgb(62, 62, 62);font-family: -apple-system-font, system-ui, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 16px;letter-spacing: 0.544px;text-align: left;"><p style="white-space: normal;color: rgb(62, 62, 62);font-family: -apple-system-font, system-ui, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 16px;letter-spacing: 0.544px;text-align: left;"><strong><span style="letter-spacing: 0px;word-spacing: 0.1em;color: rgb(51, 51, 51);font-family: -apple-system-font, BlinkMacSystemFont, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 15px;">原子性(Atomicity)</span></strong><span style="letter-spacing: 0px;word-spacing: 0.1em;color: rgb(51, 51, 51);font-family: -apple-system-font, BlinkMacSystemFont, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 15px;">:一个事务必须被视为一个不可分割的最小工作单元,整个事务中的所有操作要么全部提交成功,要么全部失败回滚,对于一个事务来说,不可能只执行其中的一部分操作;</span></p></li> <li style="white-space: normal;color: rgb(62, 62, 62);font-family: -apple-system-font, system-ui, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 16px;letter-spacing: 0.544px;text-align: left;"><p style="white-space: normal;color: rgb(62, 62, 62);font-family: -apple-system-font, system-ui, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 16px;letter-spacing: 0.544px;text-align: left;"><strong><span style="letter-spacing: 0px;word-spacing: 0.1em;color: rgb(51, 51, 51);font-family: -apple-system-font, BlinkMacSystemFont, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 15px;">一致性(Consistency)</span></strong><span style="letter-spacing: 0px;word-spacing: 0.1em;color: rgb(51, 51, 51);font-family: -apple-system-font, BlinkMacSystemFont, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 15px;">:数据库总是从一个一致性的状态转换到另外一个一致性的状态。在前面的例子中,一致性确保了,即使在执行第三、四条语句之间时系统崩溃,CMBC 账户中也不会损失100万,不然 Lemon 要哭死,因为事务最终没有提交,所以事务中所做的修改也不会保存到数据库中;</span></p></li> <li style="white-space: normal;color: rgb(62, 62, 62);font-family: -apple-system-font, system-ui, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 16px;letter-spacing: 0.544px;text-align: left;"><p style="white-space: normal;color: rgb(62, 62, 62);font-family: -apple-system-font, system-ui, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 16px;letter-spacing: 0.544px;text-align: left;"><strong><span style="letter-spacing: 0px;word-spacing: 0.1em;color: rgb(51, 51, 51);font-family: -apple-system-font, BlinkMacSystemFont, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 15px;">隔离性(Isolation)</span></strong><span style="letter-spacing: 0px;word-spacing: 0.1em;color: rgb(51, 51, 51);font-family: -apple-system-font, BlinkMacSystemFont, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 15px;">:通常来说,一个事务所做的修改在最终提交以前,对其他事务是不可见的。在前面的例子中,当执行完第三条语句、第四条语句还未开始时,此时如果有其他人准备给 Lemon 的 CMBC 账户存钱,那他看到的 CMBC 账户里还是有100万的;</span></p></li> <li style="white-space: normal;color: rgb(62, 62, 62);font-family: -apple-system-font, system-ui, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 16px;letter-spacing: 0.544px;text-align: left;"><p style="white-space: normal;color: rgb(62, 62, 62);font-family: -apple-system-font, system-ui, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 16px;letter-spacing: 0.544px;text-align: left;"><strong><span style="letter-spacing: 0px;word-spacing: 0.1em;color: rgb(51, 51, 51);font-family: -apple-system-font, BlinkMacSystemFont, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 15px;">持久性(Durability)</span></strong><span style="letter-spacing: 0px;word-spacing: 0.1em;color: rgb(51, 51, 51);font-family: -apple-system-font, BlinkMacSystemFont, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 15px;">:一旦事务提交,则其所做的修改就会永久保存到数据库中。此时即使系统崩溃,修改的数据也不会丢失。持久性是个有点模糊的概念,因为实际上持久性也分很多不同的级别。有些持久性策略能够提供非常强的安全保障,而有些则未必。而且「不可能有能做到100%的持久性保证的策略」否则还需要备份做什么。</span></p></li> </ul> <p style="white-space: normal;color: rgb(62, 62, 62);font-family: -apple-system-font, system-ui, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 16px;letter-spacing: 0.544px;text-align: left;"><br></p> <p style="text-align: center;"><img class="rich_pages js_insertlocalimg" data-ratio="0.9093567251461988" data-s="300,640" src="/upload/b8c9a7221c13e84b2b2ede76eeb4fae9.png" data-type="png" data-w="342" style=""></p> <h3 style="white-space: normal;color: rgb(62, 62, 62);font-family: -apple-system-font, system-ui, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;letter-spacing: 0.544px;text-align: left;"><br></h3> <h3 style="white-space: normal;color: rgb(62, 62, 62);font-family: -apple-system-font, system-ui, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;letter-spacing: 0.544px;text-align: left;"><span style="font-size: 15px;"><strong style="word-spacing: 0.1em;color: rgb(171, 25, 66);letter-spacing: 0.544px;">五、什么是脏读、不可重复读、幻读</strong></span></h3> <p><span style="font-size: 15px;"><strong style="word-spacing: 0.1em;color: rgb(171, 25, 66);letter-spacing: 0.544px;"><br></strong></span></p> <h4 style="white-space: normal;color: rgb(62, 62, 62);font-family: -apple-system-font, system-ui, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 16px;letter-spacing: 0.544px;text-align: left;"><strong><span style="letter-spacing: 0px;word-spacing: 0.1em;color: rgb(51, 51, 51);font-family: -apple-system-font, BlinkMacSystemFont, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 15px;">脏读</span></strong></h4> <p><strong><span style="letter-spacing: 0px;word-spacing: 0.1em;color: rgb(51, 51, 51);font-family: -apple-system-font, BlinkMacSystemFont, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 15px;"><br></span></strong></p> <p style="white-space: normal;color: rgb(62, 62, 62);font-family: -apple-system-font, system-ui, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 16px;letter-spacing: 0.544px;text-align: left;"><span style="letter-spacing: 0px;word-spacing: 0.1em;color: rgb(51, 51, 51);font-family: -apple-system-font, BlinkMacSystemFont, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 15px;">在事务 A 修改数据之后提交数据之前,这时另一个事务B来读取数据,如果不加控制,事务 B 读取到A修改过数据,之后 A 又对数据做了修改再提交,则 B 读到的数据是脏数据,此过程称为脏读 Dirty Read。</span></p> <p style="white-space: normal;color: rgb(62, 62, 62);font-family: -apple-system-font, system-ui, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 16px;letter-spacing: 0.544px;text-align: left;"><span style="letter-spacing: 0px;word-spacing: 0.1em;color: rgb(51, 51, 51);font-family: -apple-system-font, BlinkMacSystemFont, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 15px;"><br></span></p> <p style="text-align: center;"><img class="rich_pages js_insertlocalimg" data-ratio="0.7952443857331571" data-s="300,640" src="/upload/5323bd2d16af8ade6b8279ebe16c1ed5.png" data-type="png" data-w="757" style=""></p> <h4 style="margin-top: 1.5em;margin-bottom: 1.5em;font-weight: bold;font-size: 1.2em;max-width: 100%;color: inherit;font-family: "Helvetica Neue", Helvetica, "Hiragino Sans GB", "Microsoft YaHei", Arial, sans-serif;white-space: normal;background-color: rgb(255, 255, 255);line-height: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="max-width: 100%;font-size: inherit;color: inherit;line-height: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;"></span></h4> <figure style="max-width: 100%;color: inherit;font-family: "Helvetica Neue", Helvetica, "Hiragino Sans GB", "Microsoft YaHei", Arial, sans-serif;font-size: inherit;white-space: normal;background-color: rgb(255, 255, 255);line-height: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;"> <figcaption style="margin-top: 10px;max-width: 100%;line-height: inherit;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;box-sizing: border-box !important;overflow-wrap: break-word !important;"> 脏读 </figcaption> </figure> <h4 style="white-space: normal;color: rgb(62, 62, 62);font-family: -apple-system-font, system-ui, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 16px;letter-spacing: 0.544px;text-align: left;"><strong><span style="letter-spacing: 0px;word-spacing: 0.1em;color: rgb(51, 51, 51);font-family: -apple-system-font, BlinkMacSystemFont, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 15px;">不可重复读</span></strong></h4> <p><span style="letter-spacing: 0px;word-spacing: 0.1em;color: rgb(51, 51, 51);font-family: -apple-system-font, BlinkMacSystemFont, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 15px;"><br></span></p> <p style="white-space: normal;color: rgb(62, 62, 62);font-family: -apple-system-font, system-ui, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 16px;letter-spacing: 0.544px;text-align: left;"><span style="letter-spacing: 0px;word-spacing: 0.1em;color: rgb(51, 51, 51);font-family: -apple-system-font, BlinkMacSystemFont, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 15px;">一个事务在读取某些数据后的某个时间,再次读取以前读过的数据,却发现其读出的数据已经发生了变更、或者某些记录已经被删除了。</span><br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"></p> <p style="white-space: normal;color: rgb(62, 62, 62);font-family: -apple-system-font, system-ui, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 16px;letter-spacing: 0.544px;text-align: left;"><span style="letter-spacing: 0px;word-spacing: 0.1em;color: rgb(51, 51, 51);font-family: -apple-system-font, BlinkMacSystemFont, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 15px;"><br></span></p> <p style="text-align: center;"><img class="rich_pages js_insertlocalimg" data-ratio="0.76010101010101" data-s="300,640" src="/upload/16111cb8bdcc8e83be23fe3a50cbf68.png" data-type="png" data-w="792" style=""></p> <figure style="max-width: 100%;color: inherit;font-family: "Helvetica Neue", Helvetica, "Hiragino Sans GB", "Microsoft YaHei", Arial, sans-serif;font-size: inherit;white-space: normal;background-color: rgb(255, 255, 255);line-height: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;"> <figcaption style="margin-top: 10px;max-width: 100%;line-height: inherit;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;box-sizing: border-box !important;overflow-wrap: break-word !important;"> 不可重复读 </figcaption> </figure> <h4 style="white-space: normal;color: rgb(62, 62, 62);font-family: -apple-system-font, system-ui, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 16px;letter-spacing: 0.544px;text-align: left;"><strong><span style="letter-spacing: 0px;word-spacing: 0.1em;color: rgb(51, 51, 51);font-family: -apple-system-font, BlinkMacSystemFont, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 15px;">幻读</span></strong><span style="letter-spacing: 0px;word-spacing: 0.1em;color: rgb(51, 51, 51);font-family: -apple-system-font, BlinkMacSystemFont, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 15px;"></span></h4> <p><strong><span style="letter-spacing: 0px;word-spacing: 0.1em;color: rgb(51, 51, 51);font-family: -apple-system-font, BlinkMacSystemFont, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 15px;"><br></span></strong></p> <p style="white-space: normal;color: rgb(62, 62, 62);font-family: -apple-system-font, system-ui, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 16px;letter-spacing: 0.544px;text-align: left;"><span style="letter-spacing: 0px;word-spacing: 0.1em;color: rgb(51, 51, 51);font-family: -apple-system-font, BlinkMacSystemFont, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 15px;">事务 A 在按查询条件读取某个范围的记录时,事务 B 又在该范围内插入了新的满足条件的记录,当事务A再次按条件查询记录时,会产生新的满足条件的记录(幻行 Phantom Row)。</span></p> <p style="white-space: normal;color: rgb(62, 62, 62);font-family: -apple-system-font, system-ui, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 16px;letter-spacing: 0.544px;text-align: left;"><span style="letter-spacing: 0px;word-spacing: 0.1em;color: rgb(51, 51, 51);font-family: -apple-system-font, BlinkMacSystemFont, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 15px;"><br></span></p> <p style="text-align: center;"><img class="rich_pages js_insertlocalimg" data-ratio="0.670316301703163" data-s="300,640" src="/upload/5c5a96e30f2f792af10f0fc2d605c64d.png" data-type="png" data-w="822" style=""></p> <figure style="max-width: 100%;color: inherit;font-family: "Helvetica Neue", Helvetica, "Hiragino Sans GB", "Microsoft YaHei", Arial, sans-serif;font-size: inherit;white-space: normal;background-color: rgb(255, 255, 255);line-height: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;"> <figcaption style="margin-top: 10px;max-width: 100%;line-height: inherit;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;box-sizing: border-box !important;overflow-wrap: break-word !important;"> 幻读 </figcaption> </figure> <h4 style="white-space: normal;color: rgb(62, 62, 62);font-family: -apple-system-font, system-ui, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 16px;letter-spacing: 0.544px;text-align: left;"><strong><span style="letter-spacing: 0px;word-spacing: 0.1em;color: rgb(51, 51, 51);font-family: -apple-system-font, BlinkMacSystemFont, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 15px;">不可重复读与幻读有什么区别?</span></strong></h4> <p><strong><span style="letter-spacing: 0px;word-spacing: 0.1em;color: rgb(51, 51, 51);font-family: -apple-system-font, BlinkMacSystemFont, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 15px;"><br></span></strong></p> <ul class="list-paddingleft-2" style="white-space: normal;color: rgb(62, 62, 62);font-family: -apple-system-font, system-ui, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 16px;letter-spacing: 0.544px;text-align: left;"> <li style="white-space: normal;color: rgb(62, 62, 62);font-family: -apple-system-font, system-ui, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 16px;letter-spacing: 0.544px;text-align: left;"><p style="white-space: normal;color: rgb(62, 62, 62);font-family: -apple-system-font, system-ui, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 16px;letter-spacing: 0.544px;text-align: left;"><span style="letter-spacing: 0px;word-spacing: 0.1em;color: rgb(51, 51, 51);font-family: -apple-system-font, BlinkMacSystemFont,
作者:微信小助手
<section style="display: none;" data-tools="新媒体管家" data-label="powered by xmt.cn"> <br> </section> <p style="padding-right: 0.5em;padding-left: 0.5em;white-space: normal;text-align: center;"><img class="rich_pages" data-copyright="0" data-ratio="0.10546875" data-s="300,640" src="/upload/9eb798d67286f62711c373bd36d71b4.png" data-type="png" data-w="1280"></p> <p style="padding-right: 0.5em;padding-left: 0.5em;white-space: normal;text-align: center;"><strong><span style="color: rgb(136, 136, 136);font-size: 12px;letter-spacing: 1px;">总第404篇</span></strong></p> <p style="padding-right: 0.5em;padding-left: 0.5em;white-space: normal;text-align: center;"><strong><span style="color: rgb(136, 136, 136);font-size: 12px;letter-spacing: 1px;">2020年 第27篇</span></strong></p> <section data-role="outer" label="Powered by 135editor.com" style="margin-right: 0.5em;margin-left: 0.5em;padding-right: 0.5em;padding-left: 0.5em;white-space: normal;"> <section data-role="outer" label="Powered by 135editor.com"> <section data-tools="135编辑器" data-id="127" style="border-width: 0px;border-style: none;border-color: initial;"> <section data-tools="135编辑器" data-id="127" style="border-width: 0px;border-style: none;border-color: initial;"> <section style="margin: 60px 16px 16px;border-width: 1px;border-style: solid;border-color: rgb(235, 234, 225);text-align: center;border-radius: 8px;"> <section style="margin-top: -3.3em;margin-right: 5px;margin-left: 5px;font-weight: inherit;text-decoration: inherit;font-size: 18px;color: inherit;"> <p style="margin-right: auto;margin-bottom: 15px;margin-left: auto;border-width: 2px;border-style: solid;border-color: rgb(235, 234, 225);width: 108px;height: 108px;border-radius: 50%;box-shadow: rgb(201, 201, 201) 0px 2px 2px 2px;background-color: rgb(254, 254, 254);"><img border="0" data-cropselx1="17" data-cropselx2="69" data-cropsely1="0" data-cropsely2="87" data-ratio="1.0041152263374487" src="/upload/8f916d55c3db37c8decf42b0aca209c1.png" data-type="png" data-w="972" data-width="100%" opacity="" style="height: 93px;border-radius: 50%;color: inherit;display: inline-block;width: 93px;visibility: visible !important;" title="undefined"></p> </section> <section data-brushtype="text" data-style="text-align: left; font-size: 14px; color: inherit;" style="margin: 8px 15px;line-height: 1.4;"> <section style="text-align: justify;margin-bottom: 10px;"> <span style="font-size: 14px;color: rgb(123, 127, 131);">命名实体识别NER是信息提取、问答系统、句法分析、机器翻译、面向Semantic Web的元数据标注等应用领域的重要基础工具,在自然语言处理技术走向实用化的过程中占有重要的地位。</span> </section> <p style="text-align: justify;"><span style="font-size: 14px;color: rgb(123, 127, 131);">本文介绍了O2O搜索场景下NER任务的特点及技术选型,详述了在实体词典匹配和模型构建方面的探索与实践。</span></p> </section> </section> </section> </section> </section> </section> <section style="padding-right: 0.5em;padding-left: 0.5em;letter-spacing: 0px;white-space: normal;color: rgb(62, 62, 62);line-height: 1.6;font-family: "Helvetica Neue", Helvetica, "Hiragino Sans GB", "Microsoft YaHei", Arial, sans-serif;"> <section> <section style="line-height: 1.6;letter-spacing: 0px;"> <section style="line-height: 1.6;letter-spacing: 0px;"> <section style=""> <section style="line-height: 1.6;letter-spacing: 0px;"> <section style="padding-right: 0.5em;padding-left: 0.5em;line-height: 1.6;letter-spacing: 0px;"> <section style="line-height: 1.6;letter-spacing: 0px;"> <p style="font-size: inherit;margin-top: 1.5em;margin-bottom: 1.5em;color: inherit;line-height: inherit;"><span style="color: rgb(255, 195, 0);"><strong><span style="font-size: 20px;">1. 背景</span></strong></span></p> <section style="color: rgb(62, 62, 62);line-height: 1.6;letter-spacing: 0px;font-family: "Helvetica Neue", Helvetica, "Hiragino Sans GB", "Microsoft YaHei", Arial, sans-serif;"> <p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.5em;margin-bottom: 1.5em;"><span style="font-size: 15px;">命名实体识别(<span style="color: rgb(123, 127, 131);">Named Entity Recognition,简称NER</span>),又称作“专名识别”,是指识别文本中具有特定意义的实体,主要包括人名、地名、机构名、专有名词等。在美团搜索场景下,NER是深度查询理解(<span style="color: rgb(123, 127, 131);">Deep Query Understanding,简称 DQU</span>)的底层基础信号,主要应用于搜索召回、用户意图识别、实体链接等环节,NER信号的质量,直接影响到用户的搜索体验。</span></p> <p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.5em;margin-bottom: 1.5em;"><span style="font-size: 15px;">下面将简述一下实体识别在搜索召回中的应用。在O2O搜索中,对商家POI的描述是商家名称、地址、品类等多个互相之间相关性并不高的文本域。如果对O2O搜索引擎也采用全部文本域命中求交的方式,就可能会产生大量的误召回。</span></p> <p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.5em;margin-bottom: 1.5em;"><span style="font-size: 15px;">我们的解决方法如下图1所示,让特定的查询只在特定的文本域做倒排检索,我们称之为“结构化召回”,可保证召回商家的强相关性。举例来说,对于“海底捞”这样的请求,有些商家地址会描述为“海底捞附近几百米”,若采用全文本域检索这些商家就会被召回,显然这并不是用户想要的。而结构化召回基于NER将“海底捞”识别为商家,然后只在商家名相关文本域检索,从而只召回海底捞品牌商家,精准地满足了用户需求。</span></p> <figure style="font-size: inherit;color: inherit;line-height: inherit;"> <img data-ratio="0.3482142857142857" src="/upload/afdb20ad831e920bb4e1df75b132fe18.png" data-type="png" data-w="1120" style="font-size: inherit;color: inherit;line-height: inherit;display: block;margin-right: auto;margin-left: auto;width: 504px;height: 176px;" title="图1 实体识别与召回策略"> <figcaption style="line-heigh
作者:微信小助手
<section data-tool="mdnice编辑器" data-website="https://www.mdnice.com" style="padding-right: 10px;padding-left: 10px;line-height: 1.6;word-break: break-word;text-align: left;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, "PingFang SC", Cambria, Cochin, Georgia, Times, "Times New Roman", serif;font-size: 15px;letter-spacing: 0.05em;" data-mpa-powered-by="yiban.io"> <section data-tool="mdnice编辑器" data-website="https://www.mdnice.com" style="padding-right: 10px;padding-left: 10px;line-height: 1.6;word-break: break-word;text-align: left;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, "PingFang SC", Cambria, Cochin, Georgia, Times, "Times New Roman", serif;font-size: 15px;letter-spacing: 0.05em;"> <p data-tool="mdnice编辑器" style="font-size: 16px;padding-top: 8px;padding-bottom: 8px;line-height: 26px;color: black;margin: 1em 4px;"><em style="color: rgb(227, 92, 51);"><em style="font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, "PingFang SC", Cambria, Cochin, Georgia, Times, "Times New Roman", serif;font-size: 16px;letter-spacing: 0.75px;text-align: left;white-space: normal;color: rgb(227, 92, 51);">本文主要是讲过程与思路,从手上的日志来反推故障现场,最后模拟出事故现场。没有过度讲解理论的一些知识,主要是偏分析。</em></em></p> </section> <p data-tool="mdnice编辑器" style="font-size: 16px;padding-top: 8px;padding-bottom: 8px;line-height: 26px;color: black;margin: 1em 4px;">文章参考的理论知识在最后,同时也将本次案例提交 ISSUE 给:<span style="color: rgb(0, 128, 255);">https://github.com/aneasystone/mysql-deadlocks/issues/22</span> 仓库。<br>项目源码地址:<span style="color: rgb(0, 128, 255);">https://github.com/LiWenGu/transaction_lock.git</span></p> <h2 data-tool="mdnice编辑器" style="min-height: 32px;line-height: 28px;color: rgb(70, 51, 118);border-bottom: 1px solid rgb(70, 51, 118);border-top-color: rgb(70, 51, 118);border-right-color: rgb(70, 51, 118);border-left-color: rgb(70, 51, 118);font-size: 22px;margin: 1em auto;padding-top: 0.5em;padding-bottom: 0.5em;text-align: center;width: 85%;font-weight: bold;display: flex;flex-direction: column;justify-content: center;"><span style="display: none;"></span>1. 日志</h2> <h3 data-tool="mdnice编辑器" style="font-size: 20px;margin-top: 1.2em;margin-bottom: 1em;font-weight: bold;color: rgb(70, 51, 118);padding-left: 10px;border-left: 2px solid rgb(70, 51, 118);"><span style="display: none;"></span>1.1 业务日志<span style="display: none;"></span></h3> <p data-tool="mdnice编辑器" style="font-size: 16px;padding-top: 8px;padding-bottom: 8px;line-height: 26px;color: black;margin: 1em 4px;">一直平稳运行大半年的代码,突然在最近几天频出现死锁异常,业务机器大概每一两天在业务高峰期发生一次如下的业务日志:</p> <pre data-tool="mdnice编辑器" style="margin-top: 10px;margin-bottom: 10px;border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;"><span style="display: block;background: url("https://mmbiz.qpic.cn/mmbiz_png/iaIdQfEric9TzaJrCG5CLzJZ0uC3dLHO75a61MwPIyoSK40fDvIws2IhWKHJ4AbiaZuIvVkicick0icjOKd1Tibg8ZxrA/640?wx_fmt=png") 10px 10px / 40px no-repeat rgb(250, 250, 250);height: 30px;width: 100%;margin-bottom: -7px;border-radius: 5px;"></span><code style="overflow-x: auto;padding: 16px;color: #383a42;display: -webkit-box;font-family: Operator Mono, Consolas, Monaco, Menlo, monospace;font-size: 12px;-webkit-overflow-scrolling: touch;padding-top: 15px;background: #fafafa;border-radius: 5px;"> INFO 57553 --- [ConsumerThread2] org.example.controller.TestController : 全局链路跟踪id:2的日志:[TransactionReqVO(userId=4, money=4), TransactionReqVO(userId=2, money=2), TransactionReqVO(userId=5, money=5)]<br> INFO 57553 --- [ConsumerThread1] org.example.controller.TestController : 全局链路跟踪id:1的日志:[TransactionReqVO(userId=5, money=5), TransactionReqVO(userId=1, money=1), TransactionReqVO(userId=4, money=4)]<br>ERROR 57553 --- [ConsumerThread2] org.example.controller.TestController : 全局链路跟踪id:2的异常:<br><span style="color: #a0a1a7;font-style: italic;line-height: 26px;">### Error updating database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTransactionRollbackException: Deadlock found when trying to get lock; try restarting transaction</span><br><span style="color: #a0a1a7;font-style: italic;line-height: 26px;">### The error may exist in org/example/mapper/TestTableMapper.java (best guess)</span><br><span style="color: #a0a1a7;font-style: italic;line-height: 26px;">### The error may involve org.example.mapper.TestTableMapper.update-Inline</span><br><span style="color: #a0a1a7;font-style: italic;line-height: 26px;">### The error occurred while setting parameters</span><br><span style="color: #a0a1a7;font-style: italic;line-height: 26px;">### SQL: UPDATE test_table SET money = money + ? WHERE user_id = ?</span><br><span style="color: #a0a1a7;font-style: italic;line-height: 26px;">### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTransactionRollbackException: Deadlock found when trying to get lock; try restarting transaction</span><br>; Deadlock found when trying to get lock; try restarting transaction; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLTransactionRollbackException: Deadlock found when trying to get lock; try restarting transaction<br><br>org.springframework.dao.DeadlockLoserDataAccessException: <br><span style="color: #a0a1a7;font-style: italic;line-height: 26px;">### Error updating database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTransactionRollbackException: Deadlock found when trying to get lock; try restarting transaction</span><br><span style="color: #a0a1a7;font-style: italic;line-height: 26px;">### The error may exist in org/example/mapper/TestTableMapper.java (best guess)</span><br><span style="color: #a0a1a7;font-style: italic;line-height: 26px;">### The error may involve org.example.mapper.TestTableMapper.update-Inline</span><br><span style="color: #a0a1a7;font-style: italic;line-height: 26px;">### The error occurred while setting parameters</span><br><span style="color: #a0a1a7;font-style: italic;line-height: 26px;">### SQL: UPDATE test_table SET money = money + ? WHERE user_id = ?</span><br><span style="color: #a0a1a7;font-style: italic;line-height: 26px;">### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTransactionRollbackException: Deadlock found when trying to get lock; try restarting transaction</span><br>; Deadlock found when trying to get lock; try restarting transaction; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLTransactionRollbackException: Deadlock found when trying to get lock; try restarting transaction<br> at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:266) ~[spring-jdbc-5.0.13.RELEASE.jar:5.0.13.RELEASE]<br> at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:72) ~[spring-jdbc-5.0.13.RELEASE.jar:5.0.13.RELEASE]<br> at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:73) ~[mybatis-spring-2.0.1.jar:2.0.1]<br> at org.mybatis.spring.SqlSessionTemplate<span style="color: #986801;line-height: 26px;">$SqlSessionInterceptor</span>.invoke(SqlSessionTemplate.java:446) ~[mybatis-spring-2.0.1.jar:2.0.1]<br> at com.sun.proxy.<span style="color: #986801;line-height: 26px;">$Proxy59</span>.update(Unknown Source) ~[na:na]<br> at org.mybatis.spring.SqlSessionTemplate.update(SqlSessionTemplate.java:294) ~[mybatis-spring-2.0.1.jar:2.0.1]<br> at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:67) ~[mybatis-3.5.1.jar:3.5.1]<br> at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:58) ~[mybatis-3.5.1.jar:3.5.1]<br> at com.sun.proxy.<span style="color: #986801;line-height: 26px;">$Proxy62</span>.update(Unknown Source) ~[na:na]<br> at org.example.service.impl.TestServiceImpl.update(TestServiceImpl.java:16) ~[classes/:na]<br> at org.example.manager.impl.BizManagerImpl.transactionMoney(BizManagerImpl.java:25) ~[classes/:na]<br> at org.example.manager.impl.BizManagerImpl$<span style="color: #986801;line-height: 26px;">$FastClassBySpringCGLIB</span>$<span style="color: #986801;line-height: 26px;">$824241b9</span>.invoke(<generated>)
作者:じ☆ve不哭
编译安装python3.8的步骤 ## 1.下载python3源码包 ``` wget https://www.python.org/ftp/python/3.8.3/Python-3.8.3.tgz ``` ## 2.下载python3编译的依赖包 ``` yum install -y gcc patch libffi-devel python-devel zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel ``` ## 3.解压缩源码包 ``` tar -zxvf Python-3.8.3.tgz ``` ## 4.进入源码包文件夹 ``` cd Python-3.8.3 ``` ## 5.编译且安装 ``` 进入源码包目录 ls查看源码包内容 释放编译文件 Makefile ./configure --prefix=/opt/python38 # 指定安装目录为/opt/python38 ``` ## 4.编译 ``` make # 相当于把源码包里面的代码编译成linux服务器可以识别的代码 ``` ## 5.编译安装,此步才会最终生成 /opt/python38/ ``` make install ``` ## 注意: 第4步和第5步可以合并执行, 但是中间需要用&&隔开 ``` make && make install # 先进行make,执行完成之后,才开始执行make install ``` 进入/opt目录查看python38文件夹,我们要的python3都在这里了 ``` /opt/python38/bin/python3 /opt/python38/bin/pip3 ..... ``` ## 6.更改linux的path变量,添加python3 修改/etc/profile系统环境变量配置文件,添加以下内容 vi /etc/profile # 系统环境变量配置文件 ``` export PYTHON_HOME=/opt/python38 export PATH=$PATH:$PYTHON_HOME/bin source /etc/profile ``` ## 更换pip源 1)检查pip.conf文件是否存在 ``` >> cd ~ >> mkdir .pip >> ls ~/.pip ``` 2)直接编辑pip.conf ``` sudo vi ~/.pip/pip.conf [global] index-url = http://mirrors.aliyun.com/pypi/simple/ [install] trusted-host = mirrors.aliyun.com ``` ``` pip3 install scrapy pip3 install scrapy-redis pip3 install beautifulsoup4 ```
作者:wkcto
相信随着互联网时代的发展,越来越多的年轻大学生选择进入java的行业领域,那么随之而来的是“大学生java培训后就业前景”的话题,相信这一话题是所有学习java编程大学生们,包括父母们共同关注关心的问题。在现在的新时代大环境下,随着新鲜事物的纷纷涌现,各行各业都有着来自各方面的压力,java作为发展了近二十年的行业,同样有着一些小的压迫感,但因java编程本身独特的优势,使java编程技术广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群,正好巧妙的平衡掉了社会环境下的压力。整体来看大学生们java培训学习后的就业发展前景还是十分光明的。 首先从大学生java培训后可进入的行业来说,可以说,是真的十分广泛。比较常见的是做网站开发、企业级应用开发、安卓应用开发和嵌入式物联网这四种,这四类工程师就业的平均收入从每月10k到19k不止。怎么样,单就薪资方面,java大学生们经培训过后的就业一定不会错的。 其次大学生进行java培训的好处之一就是锻炼自己的动手实践能力。校园毕竟是校园,还是以理论知识为主,就java编程这个行业来说项目实操比理论知识更重要一些,毕竟不能纸上谈兵。针对大学生的java培训,在教学中都会结合具体项目案例,让学生在实践中仔细体会理论知识,使大学生在校园里学的知识更能有的放矢,更好的发挥专业性的作用。正是因为如此,大学生的java培训出来的学习成果,既有了丰富的专业知识,也有了自己动手做项目的实践本领,使得大学生在经过java培训后再就业成为了十分抢手的求职者。 最后,就java工程师的市场需求角度来说,在未来5到7年内,对java编程工程师的需求还是大于供给的,而且,在所有软件工程师中,java工程师是就业薪资非常高的一类工程师。注意,这里说到的java工程师是得技术合格直至优秀的工程师,现在有很多从事java工作的人要么是欠缺工作经验,要么是没有专业性的理论知识作为支撑,所以上一段中讲到的大学生java培训后再就业正是很好的规避了有经验没系统理论和有理论没经验的这两种不好的情况。因此,大学生java培训后,一定是很好就业的。 即使现在全国范围内就业形势不是很乐观,但经过上面的分析就会明白,java行业的前景依然明朗,尤其对于大学生来说,经过专业的java培训,将来大学生的java就业情况一片光明,请广大热爱java有程序员情节的学员行动起来吧。
作者:微信小助手
<section style="letter-spacing: 0.544px;white-space: normal;background-color: rgb(255, 255, 255);text-align: left;font-size: 15px;color: rgb(62, 62, 62);word-spacing: 1px;line-height: 27.2px;font-family: Helvetica, Arial, sans-serif;" data-mpa-powered-by="yiban.io"> <section style="margin: 8px;padding: 10px;line-height: 25.6px;border-radius: 10px;height: auto;box-shadow: rgb(221, 221, 221) 2px 2px 8px;display: -webkit-flex;"> <section style="flex: 0 0 2cm;height: 78px;width: 75px;"> <img data-copyright="0" data-cropselx1="0" data-cropselx2="76" data-cropsely1="0" data-cropsely2="76" data-ratio="0.6666666666666666" data-type="jpeg" data-w="258" data-width="100%" title="1803089889.png" width="100%" src="/upload/bb8461f7c0104acaa0b568a661767b3b.jpg" style="box-sizing: border-box !important;visibility: visible !important;width: 75.5903px !important;"> </section> <section style="padding-right: 10px;padding-left: 10px;flex: 1 1 auto;height: 55px;"> <p style="margin-top: 5px;line-height: 35px;white-space: nowrap;"><span style="color: rgb(56, 53, 53);"> 脚本之家</span></p> <p style="margin-top: 5px;font-size: 13px;line-height: 20px;color: rgb(127, 127, 127);"><span style="color: rgb(165, 165, 165);font-size: 12px;">你与百万开发者在一起</span></p> </section> <section style="flex: 0 0 1.5cm;color: rgb(86, 187, 55);letter-spacing: 0px;text-align: center;line-height: 6;"> <section style="margin-top: 25px;max-width: 100px;vertical-align: middle;overflow: hidden;"> <section style="line-height: 2;letter-spacing: 0px;width: 55px;height: 30px;background-image: url("https://mmbiz.qpic.cn/mmbiz_gif/Ljib4So7yuWjauTdbzQb2ZYv9xTWWaw0rNXb5rzVlgtGfnbug1K1axhbhlhd2s5fYibfg8vsx9QMTdOuv2vibpqBw/640?wx_fmt=gif");background-size: 100% 100%;background-repeat: no-repeat;"> <span data-role="width" style="display: inline-block;width: auto;"><img border="0" data-ratio="0.6666666666666666" data-type="jpeg" data-w="300" height="" title="undefined" vspace="0" width="auto" src="/upload/bb8461f7c0104acaa0b568a661767b3b.jpg" style="opacity: 0;box-sizing: border-box !important;visibility: visible !important;width: 55px !important;"></span> </section> </section> </section> </section> </section> <p style="margin-top: 10px;margin-bottom: 5px;padding-right: 0em;padding-left: 0em;letter-spacing: 0.544px;white-space: normal;background-color: rgb(255, 255, 255);font-size: medium;font-family: Optima-Regular, PingFangTC-light;color: rgb(0, 0, 0);line-height: 1.75em;text-align: left;"><img class="__bg_gif" data-backh="39" data-backw="558" data-ratio="0.6666666666666666" data-type="gif" data-w="750" width="auto" src="/upload/5968ddb27c3ed704367e67c63f20e6eb.gif" style="color: rgb(62, 62, 62);font-size: 13.3333px;letter-spacing: 1.5px;box-sizing: border-box !important;visibility: visible !important;width: 557.778px !important;"></p> <p style="margin-right: 8px;margin-bottom: 10px;margin-left: 8px;font-family: -apple-system-font, BlinkMacSystemFont, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;letter-spacing: 0.544px;white-space: normal;background-color: rgb(255, 255, 255);text-align: right;line-height: normal;"><span style="letter-spacing: 1px;font-size: 14px;color: rgb(136, 136, 136);">来源 | 程序通事(ID:US_stocks)</span></p> <p style="margin-right: 8px;margin-bottom: 10px;margin-left: 8px;font-family: -apple-system-font, BlinkMacSystemFont, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;letter-spacing: 0.544px;white-space: normal;background-color: rgb(255, 255, 255);text-align: right;line-height: normal;"><span style="letter-spacing: 1px;font-size: 14px;color: rgb(136, 136, 136);"><span style="text-align: center;"><span style="color: rgb(123, 127, 131);text-align: left;">如若转载请联系原公众号</span></span></span></p> <section data-tool="mdnice编辑器" data-website="https://www.mdnice.com" style=""> <p data-tool="mdnice编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;word-spacing: 3px;letter-spacing: 1px;color: rgb(66, 75, 93);">上周的时候,朋友圈的直升飞机不知道为什么就火了,很多朋友开着各种花式飞机带着起飞。</p> <figure data-tool="mdnice编辑器" style="margin-top: 10px;margin-bottom: 10px;display: flex;flex-direction: column;justify-content: center;align-items: center;"> <img data-ratio="0.9083503054989817" src="/upload/8f05a110310c20c065ca97883a5d546a.jpg" data-type="jpeg" data-w="982" style="display: block;border-radius: 5px;margin: 12px auto;"> <figcaption style="margin-top: 5px;text-align: center;font-size: 14px;margin: 12px auto;color: #999999;"> 图片来自网络 </figcaption> </figure> <p data-tool="mdnice编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;word-spacing: 3px;letter-spacing: 1px;color: rgb(66, 75, 93);">还没来得及了解咋回事来着,这个直升飞机就🔥到的微博热搜。</p> <figure data-tool="mdnice编辑器" style="margin-top: 10px;margin-bottom: 10px;display: flex;flex-direction: column;justify-content: center;align-items: center;"> <img data-ratio="0.8373590982286635" src="/upload/c88c3bbedb8971218bad312526c3f966.jpg" data-type="jpeg" data-w="1242" style="display: block;border-radius: 5px;margin: 12px auto;"> <figcaption style="margin-top: 5px;text-align: center;font-size: 14px;margin: 12px auto;color: #999999;"> 图片来自网络 </figcaption> </figure> <p data-tool="mdnice编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;word-spacing: 3px;letter-spacing: 1px;color: rgb(66, 75, 93);">后面越来越多人开来他们的直升飞机,盘旋在朋友圈上方。于是很多朋友开来他们的坦克,专打直升飞机,一轰一个准。</p> <figure data-tool="mdnice编辑器" style="margin-top: 10px;margin-bottom: 10px;display: flex;flex-direction: column;justify-content: center;align-items: center;"> <img data-ratio="0.6745406824146981" src="/upload/2ce87d1860a0da01eee86813d08b92ea.jpg" data-type="jpeg" data-w="1524" style="display: block;border-radius: 5px;margin: 12px auto;"> <figcaption style="margin-top: 5px;text-align: center;font-size: 14px;margin: 12px auto;color: #999999;"> 图片来自网络 </figcaption> </figure> <p data-tool="mdnice编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;word-spacing: 3px;letter-spacing: 1px;color: rgb(66, 75, 93);">好了,说回正题!</p> <p data-tool="mdnice编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;word-spacing: 3px;letter-spacing: 1px;color: rgb(66, 75, 93);">程序员朋友应该都很熟悉 <strong>Unicode</strong> (万国码),它几乎包含世界上所有符号,比如组成直升飞机这几个特殊符号对应的 Unicode 码分别为:</p> <figure data-tool="mdnice编辑器" style="margin-top: 10px;margin-bottom: 10px;display: flex;flex-direction: column;justify-content: center;align-items: center;"> <img data-ratio="0.7069408740359897" src="/upload/2dc073d8da067a4bf84ab3e78771dc48.jpg" data-type="jpeg" data-w="778" style="display: block;border-radius: 5px;margin: 12px auto;"> </figure> <figure data-tool="mdnice编辑器" style="margin-top: 10px;margin-bottom: 10px;display: flex;flex-direction: column;justify-content: center;align-items: center;"> <img data-ratio="0.7727272727272727" src="/upload/8f5dc4b88ff15d4f38d765599b99f571.jpg" data-type="jpeg" data-w="704" style="display: block;border-radius: 5px;margin: 12px auto;"> </figure> <blockquote data-tool="mdnice编辑器" style="font-size: 0.9em;overflow: auto;color: rgb(106, 115, 125);padding: 10px 10px 10px 20px;margin: 0px 8px;border-width: initial;border-style: none;border-color: initial;background: rgb(255, 255, 255);box-shadow: rgba(0, 0, 0, 0.16) 0px 1px 2px -2px, rgba(0, 0, 0, 0.12) 0px 3px 6px 0px, rgba(0, 0, 0, 0.09) 0px 5px 12px 4px;"> <p style="padding-top: 8px;padding-bottom: 8px;word-spacing: 3px;letter-spacing: 1px;font-size: 14px;color: rgb(66, 75, 93);line-height: 24px;">ps:推荐一个网站,可以根据符号搜对应的 Unicode 码:https://unicode.yunser.com/unicode</p> </blockquote> <p data-tool="mdnice编辑器" s
作者:wkcto
近些年来,移动互联网在全世界范围内的迅速发展,使得计算机行业也迅速发展,那c语言和java语言作为计算机语言中两种,相应的逐渐被人们了解和关注,想学习和从事c语言和java的朋友也越来越多。那同样都是计算机语言,c语言和java之间的关系如何,二者之间有哪些相同点和不同点。 首先先来说明一下c语言和java是什么。 C语言是一门通用计算机编程语言,应用比较广泛。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的计算机编程语言。Java是一门面向对象编程语言,不仅吸收了c++语言的各种优点,还摒弃了c++里难以理解的多继承、指针等概念,因此java语言具有功能强大和简单易用两个特征。 关于c语言和java之间相同点。第一,java是从c++的上面发展得来的,所以c语言和java之间的关系之一就是语法类似。第二,编程语言都是由语法和相应的程序库所构成,c语言则有标准库,java有自身的类库。 关于c语言和java之间不同点: 一、内存管理不同。在Java中,基本不用考虑内存的问题,如果想用一个对象,new一个就可以,这个过程的背后则是JRE为对象分类的一定内存,当JRE发现你不再使用这个对象的时候,他就会自动回收内存,也就是说你只管借东西,不用管归还,在你不使用的时候就把东西归还了,不过这个过程还是有的,只不过是JRE作的而已。但是c语言则不同,当使用完了的时候,需要自己把这块内存归还回去,也就是调用free方法来完成这个任务。由于需要显式的归还内存,因此当一个函数需要将一块内存返回给调用者的时候,问题就比较复杂了,不如面向对象和具有内存回收功能的java那么直观了。 二、面向对象不同。Java的面向对象的特点很明显,而C则是一个地道的结构化语言。 Java中有一个字符串类String, 通过调用 String.length()就可以知道字符串的长度,但是在c语言中,则需要调用函数strlen(str)来得到字符串的长度。由于c语言不是面向对象的语言,也就没有this的概念,因此当使用一个与某个“东西”相关的函数时,就需要不厌其烦的将代表这个“东西”的变量作为参数传递进去。 三、名称空间不同。Java通过包(package)来实现名称空间,在c语言中,所有的函数都处于同一名称空间,也就是没有名称空间,会很多程序提供的api接口函数都有一个前缀。 C语言和java作为计算机中通用且流行的两种语言,都服务于各大系统程序,要问c语言和java之间的关系,就是既有相同点又有不同点。
作者:wkcto
Java语言已经成为了所有计算机语言中应用最为广泛的一种了,因为其独有的面向对象性和安全性等特点,从而受到了很多编程爱好者的喜欢,java程序员的队伍也逐渐壮大。Java主要是以后端技术为主,但是想成为一名优秀的java工程师的话,一些前端技术也是必须要掌握的,html就是一种前端技术。既然要学习html,那么这篇文章来推荐一套html视频教程,感兴趣的朋友们来学习html视频教程吧。 既然是推荐一整套html视频教程,那么就要针对不同基础的人来推荐不同的学习课程。首先适合java零基础的人学习的html视频教程是——“[https://www.wkcto.com/course/45](https://)”,这个课程就是适合零基础的人群来学习的,因为里面的课程是按照由浅入深、循序渐进的标准来设置的。这个基础的html视频教程共分为三个章节。相信java零基础的小白们通过这个课程不仅可以了解和认识html,更能熟练掌握网页的开发以及各种常用标记的使用。 对于具有一定html、css、javascript开发基础的人员,可以学习“[https://www.wkcto.com/course/119](https://)”这个课程,通过这个html视频教程的学习,可以掌握HTML5中图形绘制canvas的基本原理和使用,并利用canvas解决实际相关问题。 另外,有想学习webStorage技术的,同时又有html、javascript基础的朋友们,推荐“[https://www.wkcto.com/course/132](https://)”这个html视频教程,对H5 web存储之Webstorage进行了详细的解读,并附有多个案例,让学习者能快速地掌握这一技术。 以上三个课程就是对html视频教程的推荐,有学习需要的人可以根据自己资审的java基础和技术需求来选择适合自己的教程,另外,这三个html视频教程都是免费的,只需要在蛙课网校上面注册一个账号,再登录就可以免费无限次观看了。