-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.html
872 lines (525 loc) · 31.5 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
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<link rel="apple-touch-icon" sizes="76x76" href="/img/apple-touch-icon.png">
<link rel="icon" type="image/png" href="/img/favicon.png">
<meta name="viewport"
content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, shrink-to-fit=no">
<meta http-equiv="x-ua-compatible" content="ie=edge">
<meta name="description" content="">
<meta name="author" content="Ye hongzhi">
<meta name="keywords" content="">
<title>叶洪智的技术分享</title>
<link rel="stylesheet" href="/lib/font-awesome/css/all.min.css" >
<link rel="stylesheet" href="/lib/bootstrap/css/bootstrap.min.css" >
<link rel="stylesheet" href="/lib/mdbootstrap/css/mdb.min.css" >
<link rel="stylesheet" href="/lib/github-markdown/github-markdown.min.css" >
<link rel="stylesheet" href="//at.alicdn.com/t/font_1067060_qzomjdt8bmp.css">
<link rel="stylesheet" href="/lib/prettify/tomorrow-night-eighties.min.css" >
<link rel="stylesheet" href="/css/main.css" >
<link rel="stylesheet" href="/lib/fancybox/jquery.fancybox.min.css" >
<meta name="generator" content="Hexo 4.2.0"></head>
<body>
<header style="height: 70vh;">
<nav id="navbar" class="navbar fixed-top navbar-expand-lg navbar-dark scrolling-navbar">
<div class="container">
<a class="navbar-brand"
href="/"> <strong>YeHongzhi's Blog</strong> </a>
<button id="navbar-toggler-btn" class="navbar-toggler" type="button" data-toggle="collapse"
data-target="#navbarSupportedContent"
aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
<div class="animated-icon"><span></span><span></span><span></span></div>
</button>
<!-- Collapsible content -->
<div class="collapse navbar-collapse" id="navbarSupportedContent">
<ul class="navbar-nav ml-auto text-center">
<li class="nav-item">
<a class="nav-link" href="/">首页</a>
</li>
<li class="nav-item">
<a class="nav-link" href="/archives/">归档</a>
</li>
<li class="nav-item">
<a class="nav-link" href="/tags/">标签</a>
</li>
<li class="nav-item">
<a class="nav-link" href="/about/">关于</a>
</li>
<li class="nav-item" id="search-btn">
<a class="nav-link" data-toggle="modal" data-target="#modalSearch"> <i
class="iconfont icon-search"></i> </a>
</li>
</ul>
</div>
</div>
</nav>
<div class="view intro-2" id="background" parallax=true
style="background: url('/img/index.png')no-repeat center center;
background-size: cover;">
<div class="full-bg-img">
<div class="mask rgba-black-light flex-center">
<div class="container text-center white-text fadeInUp">
<span class="h2" id="subtitle">
</span>
</div>
<div class="scroll-down-bar">
<i class="fas fa-angle-down scroll-down-arrow"></i>
</div>
</div>
</div>
</div>
</header>
<main>
<div class="container nopadding-md">
<div class="py-5 z-depth-3" id="board">
<div class="container">
<div class="row">
<div class="col-12 col-md-10 m-auto">
<div class="row mx-auto index-card">
<div class="col-12 col-md-4 m-auto">
<a href="/2021/09/25/%E9%87%8D%E6%B8%A9%E5%B9%B6%E5%8F%91%E7%9F%A5%E8%AF%86%E4%BB%8EThreadLocal%E5%BC%80%E5%A7%8B/" target="_blank">
<img src="https://static.lovebilibili.com/ThreadLocal_index.png" srcset="/img/loading.gif" alt="重温并发知识从ThreadLocal开始" class="index-img img-fluid rounded index-thumbnails">
</a>
</div>
<div class="col-12 col-md-8 mx-auto index-info">
<a href="/2021/09/25/%E9%87%8D%E6%B8%A9%E5%B9%B6%E5%8F%91%E7%9F%A5%E8%AF%86%E4%BB%8EThreadLocal%E5%BC%80%E5%A7%8B/">
<p class="h4 index-header">重温并发知识从ThreadLocal开始</p>
</a>
<a href="/2021/09/25/%E9%87%8D%E6%B8%A9%E5%B9%B6%E5%8F%91%E7%9F%A5%E8%AF%86%E4%BB%8EThreadLocal%E5%BC%80%E5%A7%8B/">
<div class="index-excerpt" >
<div class="index-text mb-1">
文章已收录Github精选,欢迎Star:https://github.com/yehongzhi/learningSummary
什么是ThreadLocalThreadLocal提供线程的局部变量,这种变量与普通变量的区别在于,每个访问这种变量的线程都有自己的、独立的变量副本。用于解决多线程间的数据隔离问题。
使用场景其实ThreadLocal在很多开源框架中都有应用:
Spring中的事务管理器,比如TransactionSynchronizationManager等。
Mybatis中的ErrorContext类,使用ThreadLocal实现线程安全的单例。
存储session中的一些参数,比如用户信息等。
APIThreadLocal提供了4个常用方法:
set()方法,设置当前线程中变量的副本。
get()方法,获取 ThreadLocal在当前线程中保存的变量副本。
remove()方法,清空当前线程中变量的副本。
initialValue()是一个 protected方法,一般是用来重写的,如果在没有set的时候就调用 get,会调用 initialV</div>
</div>
</a>
<div class="index-btm">
<i class="iconfont icon-riqi2"></i> 2021-09-25
<i class="iconfont icon-tag"></i>
<a href="/tags/%E5%B9%B6%E5%8F%91%E7%BC%96%E7%A8%8B">并发编程</a>
</div>
</div>
</div>
<div class="row mx-auto index-card">
<div class="col-12 col-md-4 m-auto">
<a href="/2021/09/25/BaseMapper%E6%BA%90%E7%A0%81%E5%88%86%E6%9E%90/" target="_blank">
<img src="https://static.lovebilibili.com/mybatis-plus_source_index.png" srcset="/img/loading.gif" alt="BaseMapper源码分析" class="index-img img-fluid rounded index-thumbnails">
</a>
</div>
<div class="col-12 col-md-8 mx-auto index-info">
<a href="/2021/09/25/BaseMapper%E6%BA%90%E7%A0%81%E5%88%86%E6%9E%90/">
<p class="h4 index-header">BaseMapper源码分析</p>
</a>
<a href="/2021/09/25/BaseMapper%E6%BA%90%E7%A0%81%E5%88%86%E6%9E%90/">
<div class="index-excerpt" >
<div class="index-text mb-1">抛出疑问Mybatis-plus的确能让我们写少很多重复代码,非常好用。那么其中最方便的就是Mapper接口继承BaseMapper就能获得增删改查的这个功能。那么这个功能的底层代码,究竟是怎么实现的呢?
原生Mybatis配置的原理毕竟Mybatis-plus是Mybatis的加强,所以Mybatis-plus肯定是基于Mybatis原来的机制来扩展的,沿着这个思路,我们先搞清楚一个问题,就是原生的mapper.xml文件最后是怎么跟对应的Mapper接口产生联系的。
既然是配置,那么在Mybatis里肯定有对应的配置类,这个类就是MappedStatement。最终在Configuration类中把MappedStatement对象添加进mappedStatements集合中进行管理。源码如下:
public class Configuration {
protected final Map<String, MappedStatement> mappedStatements = new StrictMap<MappedStatement>("</div>
</div>
</a>
<div class="index-btm">
<i class="iconfont icon-riqi2"></i> 2021-09-25
<i class="iconfont icon-tag"></i>
<a href="/tags/%E6%BA%90%E7%A0%81%E5%88%86%E6%9E%90">源码分析</a>
</div>
</div>
</div>
<div class="row mx-auto index-card">
<div class="col-12 col-md-4 m-auto">
<a href="/2021/07/06/Mybatis-plus%EF%BC%8C%E7%9C%9F%E9%A6%99%EF%BC%81/" target="_blank">
<img src="https://static.lovebilibili.com/mybatis-plus_05.png" srcset="/img/loading.gif" alt="Mybatis-plus,真香!" class="index-img img-fluid rounded index-thumbnails">
</a>
</div>
<div class="col-12 col-md-8 mx-auto index-info">
<a href="/2021/07/06/Mybatis-plus%EF%BC%8C%E7%9C%9F%E9%A6%99%EF%BC%81/">
<p class="h4 index-header">Mybatis-plus,真香!</p>
</a>
<a href="/2021/07/06/Mybatis-plus%EF%BC%8C%E7%9C%9F%E9%A6%99%EF%BC%81/">
<div class="index-excerpt" >
<div class="index-text mb-1">前言mybatis相信都不陌生,目前互联网公司大部分都使用mybatis作为持久层框架,无他,因为可以直接在xml文件中编写SQL语句操作数据库,灵活。但是我们在使用的时候,也会发现有很多增删改查的SQL是每个表都会有的基本操作,如果每个表都写一套增删改查的SQL显然是非常耗时耗力的。
于是乎,就有了mybatis-plus这个框架。正如官网所说,mybatis-plus是为简化开发而生。
mybatis-plus有以下特点:
只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑。
只需简单配置,即可快速进行单表CRUD操作,节省大量时间。
代码生成,物理分页,性能分析等功能一应俱全。
一、整合mybatis-plus这里用的是SpringBoot2.5.2做演示。首先导入依赖:
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
</div>
</div>
</a>
<div class="index-btm">
<i class="iconfont icon-riqi2"></i> 2021-07-06
<i class="iconfont icon-tag"></i>
<a href="/tags/Mybatis">Mybatis</a>
</div>
</div>
</div>
<div class="row mx-auto index-card">
<div class="col-12 col-md-4 m-auto">
<a href="/2021/07/06/Java%E5%9F%BA%E7%A1%80%E4%B8%8D%E7%AE%80%E5%8D%95%EF%BC%8C%E8%B0%88%E8%B0%88hashCode-%E5%92%8Cequals-%E4%B9%8B%E9%97%B4%E7%9A%84%E8%81%94%E7%B3%BB/" target="_blank">
<img src="https://static.lovebilibili.com/hashCode_equals_index.jpg" srcset="/img/loading.gif" alt="Java基础不简单,谈谈hashCode()和equals()之间的联系" class="index-img img-fluid rounded index-thumbnails">
</a>
</div>
<div class="col-12 col-md-8 mx-auto index-info">
<a href="/2021/07/06/Java%E5%9F%BA%E7%A1%80%E4%B8%8D%E7%AE%80%E5%8D%95%EF%BC%8C%E8%B0%88%E8%B0%88hashCode-%E5%92%8Cequals-%E4%B9%8B%E9%97%B4%E7%9A%84%E8%81%94%E7%B3%BB/">
<p class="h4 index-header">Java基础不简单,谈谈hashCode()和equals()之间的联系</p>
</a>
<a href="/2021/07/06/Java%E5%9F%BA%E7%A1%80%E4%B8%8D%E7%AE%80%E5%8D%95%EF%BC%8C%E8%B0%88%E8%B0%88hashCode-%E5%92%8Cequals-%E4%B9%8B%E9%97%B4%E7%9A%84%E8%81%94%E7%B3%BB/">
<div class="index-excerpt" >
<div class="index-text mb-1">
文章已收录Github精选,欢迎Star:https://github.com/yehongzhi/learningSummary
写在前面其实很早我就注意到阿里巴巴Java开发规范有一句话:只要重写 equals,就必须重写 hashCode。
我想很多人都会问为什么,所谓知其然知其所以然,对待知识不单止知道结论还得知道原因。
hashCode方法hashCode()方法的作用是获取哈希码,返回的是一个int整数
学过数据结构的都知道,哈希码的作用是确定对象在哈希表的索引下标。比如HashSet和HashMap就是使用了hashCode方法确定索引下标。如果两个对象返回的hashCode相同,就被称为“哈希冲突”。
equals方法equals()方法的作用很简单,就是判断两个对象是否相等,equals()方法是定义在Object类中,而所有的类的父类都是Object,所以如果不重写equals方法则会调用Object类的equals方法。
Object类的equals方法是用“==”号进行比较,在很多时候,因为==号比较的是两个对象的内存地址而不是实际的值,所以不是很符合</div>
</div>
</a>
<div class="index-btm">
<i class="iconfont icon-riqi2"></i> 2021-07-06
<i class="iconfont icon-tag"></i>
<a href="/tags/Java%E5%9F%BA%E7%A1%80">Java基础</a>
</div>
</div>
</div>
<div class="row mx-auto index-card">
<div class="col-12 col-md-4 m-auto">
<a href="/2021/05/30/%E8%B0%88%E8%B0%88MYSQL%E7%B4%A2%E5%BC%95%E6%98%AF%E5%A6%82%E4%BD%95%E6%8F%90%E9%AB%98%E6%9F%A5%E8%AF%A2%E6%95%88%E7%8E%87%E7%9A%84/" target="_blank">
<img src="https://static.lovebilibili.com/mysql_suoyin_index.jpg" srcset="/img/loading.gif" alt="谈谈MYSQL索引是如何提高查询效率的" class="index-img img-fluid rounded index-thumbnails">
</a>
</div>
<div class="col-12 col-md-8 mx-auto index-info">
<a href="/2021/05/30/%E8%B0%88%E8%B0%88MYSQL%E7%B4%A2%E5%BC%95%E6%98%AF%E5%A6%82%E4%BD%95%E6%8F%90%E9%AB%98%E6%9F%A5%E8%AF%A2%E6%95%88%E7%8E%87%E7%9A%84/">
<p class="h4 index-header">谈谈MYSQL索引是如何提高查询效率的</p>
</a>
<a href="/2021/05/30/%E8%B0%88%E8%B0%88MYSQL%E7%B4%A2%E5%BC%95%E6%98%AF%E5%A6%82%E4%BD%95%E6%8F%90%E9%AB%98%E6%9F%A5%E8%AF%A2%E6%95%88%E7%8E%87%E7%9A%84/">
<div class="index-excerpt" >
<div class="index-text mb-1">
文章已收录Github精选,欢迎Star:https://github.com/yehongzhi/learningSummary
前言我们都知道当查询数据库变慢时,需要建索引去优化。但是只知道索引能优化显然是不够的,我们更应该知道索引的原理,因为不是加了索引就一定会提升性能。那么接下来就一起探索MYSQL索引的原理吧。
什么是索引索引其实是一种能高效帮助MYSQL获取数据的数据结构,通常保存在磁盘文件中,好比一本书的目录,能加快数据库的查询速度。除此之外,索引是有序的,所以也能提高数据的排序效率。
通常MYSQL的索引包括聚簇索引,覆盖索引,复合索引,唯一索引,普通索引,通常底层是B+树的数据结构。
总结一下,索引的优势在于:
提高查询效率。
降低数据排序的成本。
缺点在于:
索引会占用磁盘空间。
索引会降低更新表的效率。因为在更新数据时,要额外维护索引文件。
索引的类型
聚簇索引
索引列的值必须是唯一的,并且不能为空,一个表只能有一个聚簇索引。
唯一索引
索引列的值是唯一的,值可以为空。
普通索引
没有什么限制,允许在定义索引的列中插入重复值和空值。
复合索</div>
</div>
</a>
<div class="index-btm">
<i class="iconfont icon-riqi2"></i> 2021-05-30
<i class="iconfont icon-tag"></i>
<a href="/tags/MySQL">MySQL</a>
</div>
</div>
</div>
<div class="row mx-auto index-card">
<div class="col-12 col-md-4 m-auto">
<a href="/2021/05/30/%E4%BB%80%E4%B9%88%E6%98%AF%E9%9B%AA%E8%8A%B1ID%EF%BC%9F/" target="_blank">
<img src="https://static.lovebilibili.com/snowflake_index.png" srcset="/img/loading.gif" alt="什么是雪花ID?" class="index-img img-fluid rounded index-thumbnails">
</a>
</div>
<div class="col-12 col-md-8 mx-auto index-info">
<a href="/2021/05/30/%E4%BB%80%E4%B9%88%E6%98%AF%E9%9B%AA%E8%8A%B1ID%EF%BC%9F/">
<p class="h4 index-header">什么是雪花ID?</p>
</a>
<a href="/2021/05/30/%E4%BB%80%E4%B9%88%E6%98%AF%E9%9B%AA%E8%8A%B1ID%EF%BC%9F/">
<div class="index-excerpt" >
<div class="index-text mb-1">
文章已收录Github精选,欢迎Star:https://github.com/yehongzhi/learningSummary
为什么使用雪花ID在以前的项目中,最常见的两种主键类型是自增Id和UUID,在比较这两种ID之前首先要搞明白一个问题,就是为什么主键有序比无序查询效率要快,因为自增Id和UUID之间最大的不同点就在于有序性。
我们都知道,当我们定义了主键时,数据库会选择表的主键作为聚集索引(B+Tree),mysql 在底层是以数据页为单位来存储数据的。
也就是说如果主键为自增 id的话,mysql 在写满一个数据页的时候,直接申请另一个新数据页接着写就可以了。如果一个数据页存满了,mysql 就会去申请一个新的数据页来存储数据。如果主键是UUID,为了确保索引有序,mysql 就需要将每次插入的数据都放到合适的位置上。这就造成了页分裂,这个大量移动数据的过程是会严重影响插入效率的。
一句话总结就是,InnoDB表的数据写入顺序能和B+树索引的叶子节点顺序一致的话,这时候存取效率是最高的。
但是为什么很多情况又不用自增id作为主键呢?
容易导致主键重复。比如导入旧数</div>
</div>
</a>
<div class="index-btm">
<i class="iconfont icon-riqi2"></i> 2021-05-30
<i class="iconfont icon-tag"></i>
<a href="/tags/MySQL">MySQL</a>
</div>
</div>
</div>
<div class="row mx-auto index-card">
<div class="col-12 col-md-4 m-auto">
<a href="/2021/05/30/OOM%E6%80%8E%E4%B9%88%E5%8A%9E%EF%BC%8C%E6%95%99%E4%BD%A0%E7%94%9F%E6%88%90dump%E6%96%87%E4%BB%B6%E4%BB%A5%E5%8F%8A%E6%9F%A5%E7%9C%8B/" target="_blank">
<img src="https://static.lovebilibili.com/dump_index.jpg" srcset="/img/loading.gif" alt="OOM怎么办,教你生成dump文件以及查看" class="index-img img-fluid rounded index-thumbnails">
</a>
</div>
<div class="col-12 col-md-8 mx-auto index-info">
<a href="/2021/05/30/OOM%E6%80%8E%E4%B9%88%E5%8A%9E%EF%BC%8C%E6%95%99%E4%BD%A0%E7%94%9F%E6%88%90dump%E6%96%87%E4%BB%B6%E4%BB%A5%E5%8F%8A%E6%9F%A5%E7%9C%8B/">
<p class="h4 index-header">OOM怎么办,教你生成dump文件以及查看</p>
</a>
<a href="/2021/05/30/OOM%E6%80%8E%E4%B9%88%E5%8A%9E%EF%BC%8C%E6%95%99%E4%BD%A0%E7%94%9F%E6%88%90dump%E6%96%87%E4%BB%B6%E4%BB%A5%E5%8F%8A%E6%9F%A5%E7%9C%8B/">
<div class="index-excerpt" >
<div class="index-text mb-1">
文章已收录Github精选,欢迎Star:https://github.com/yehongzhi/learningSummary
前言在日常开发中,即使代码写得有多谨慎,免不了还是会发生各种意外的事件,比如服务器内存突然飙高,又或者发生内存溢出(OOM)。当发生这种情况时,我们怎么去排查,怎么去分析原因呢?
这时就引出这篇文章要讲的dump文件,各位看官且往下看。
什么是dump文件dump文件是一个进程或者系统在某一个给定的时间的快照。
dump文件是用来给驱动程序编写人员调试驱动程序用的,这种文件必须用专用工具软件打开。
dump文件中包含了程序运行的模块信息、线程信息、堆栈调用信息、异常信息等数据。
在服务器运行我们的Java程序时,是无法跟踪代码的,所以当发生线上事故时,dump文件就成了一个很关键的分析点。
如何生成dump文件这里介绍两种方式,一种是主动的,一种是被动的。
方式一主动生成dump文件。首先要查找运行的Java程序的pid。
使用top命令:
然后使用jmap命令生成dump文件。file后面是保存的文件名称,1246则是java程序的PID。
jma</div>
</div>
</a>
<div class="index-btm">
<i class="iconfont icon-riqi2"></i> 2021-05-30
<i class="iconfont icon-tag"></i>
<a href="/tags/JVM">JVM</a>
</div>
</div>
</div>
<div class="row mx-auto index-card">
<div class="col-12 col-md-4 m-auto">
<a href="/2021/05/16/%E6%B7%B1%E5%85%A5%E7%90%86%E8%A7%A3String%E7%B1%BB/" target="_blank">
<img src="https://static.lovebilibili.com/string_final_index.jpg" srcset="/img/loading.gif" alt="深入理解String类" class="index-img img-fluid rounded index-thumbnails">
</a>
</div>
<div class="col-12 col-md-8 mx-auto index-info">
<a href="/2021/05/16/%E6%B7%B1%E5%85%A5%E7%90%86%E8%A7%A3String%E7%B1%BB/">
<p class="h4 index-header">深入理解String类</p>
</a>
<a href="/2021/05/16/%E6%B7%B1%E5%85%A5%E7%90%86%E8%A7%A3String%E7%B1%BB/">
<div class="index-excerpt" >
<div class="index-text mb-1">
文章已收录Github精选,欢迎Star:https://github.com/yehongzhi/learningSummary
String类在Java中String类的使用的频率可谓相当高。它是Java语言中的核心类,在java.lang包下,主要用于字符串的比较、查找、拼接等等操作。如果要深入理解一个类,最好的方法就是看看源码:
public final class String implements java.io.Serializable, Comparable<String>, CharSequence {
/** The value is used for character storage. */
private final char value[];
/** Cache the hash code for the string */
private int hash; // Default to 0
//...
}
从源码中,可以看出以下几点:
String类被final关键字修饰,表示String类不能</div>
</div>
</a>
<div class="index-btm">
<i class="iconfont icon-riqi2"></i> 2021-05-16
<i class="iconfont icon-tag"></i>
<a href="/tags/Java">Java</a>
</div>
</div>
</div>
<div class="row mx-auto index-card">
<div class="col-12 col-md-4 m-auto">
<a href="/2021/04/25/%E8%B0%88%E8%B0%88MySQL%E7%9A%84MVCC%E6%9C%BA%E5%88%B6/" target="_blank">
<img src="https://static.lovebilibili.com/mysql_mvcc_index.jpg" srcset="/img/loading.gif" alt="谈谈MySQL的MVCC机制" class="index-img img-fluid rounded index-thumbnails">
</a>
</div>
<div class="col-12 col-md-8 mx-auto index-info">
<a href="/2021/04/25/%E8%B0%88%E8%B0%88MySQL%E7%9A%84MVCC%E6%9C%BA%E5%88%B6/">
<p class="h4 index-header">谈谈MySQL的MVCC机制</p>
</a>
<a href="/2021/04/25/%E8%B0%88%E8%B0%88MySQL%E7%9A%84MVCC%E6%9C%BA%E5%88%B6/">
<div class="index-excerpt" >
<div class="index-text mb-1">
文章已收录Github精选,欢迎Star:https://github.com/yehongzhi/learningSummary
前言无论是上一篇文章讲的事务隔离级别,还是之前讲的undo log日志,其实都涉及到MVCC机制,那么什么是MVCC机制,它的作用是什么,下面就让我们带着问题一起学习吧。
什么是MVCCMVCC全称是多版本并发控制 (Multi-Version Concurrency Control),只有在InnoDB引擎下存在。MVCC机制的作用其实就是避免同一个数据在不同事务之间的竞争,提高系统的并发性能。
它的特点如下:
允许多个版本同时存在,并发执行。
不依赖锁机制,性能高。
只在读已提交和可重复读的事务隔离级别下工作。
为什么使用MVCC在早期的数据库中,只有读读之间的操作才可以并发执行,读写,写读,写写操作都要阻塞,这样就会导致MySQL的并发性能极差。
采用了MVCC机制后,只有写写之间相互阻塞,其他三种操作都可以并行,这样就可以提高了MySQL的并发性能。
MVCC机制的原理在讲解MVCC机制的原理之前首先要介绍几个概念。
ReadViewRea</div>
</div>
</a>
<div class="index-btm">
<i class="iconfont icon-riqi2"></i> 2021-04-25
<i class="iconfont icon-tag"></i>
<a href="/tags/MySQL">MySQL</a>
</div>
</div>
</div>
<div class="row mx-auto index-card">
<div class="col-12 col-md-4 m-auto">
<a href="/2021/04/21/%E4%BB%80%E4%B9%88%E6%98%AF%E8%84%8F%E8%AF%BB%E3%80%81%E4%B8%8D%E5%8F%AF%E9%87%8D%E5%A4%8D%E8%AF%BB%E3%80%81%E5%B9%BB%E8%AF%BB/" target="_blank">
<img src="https://static.lovebilibili.com/mysql_sw_index.jpg" srcset="/img/loading.gif" alt="什么是脏读、不可重复读、幻读" class="index-img img-fluid rounded index-thumbnails">
</a>
</div>
<div class="col-12 col-md-8 mx-auto index-info">
<a href="/2021/04/21/%E4%BB%80%E4%B9%88%E6%98%AF%E8%84%8F%E8%AF%BB%E3%80%81%E4%B8%8D%E5%8F%AF%E9%87%8D%E5%A4%8D%E8%AF%BB%E3%80%81%E5%B9%BB%E8%AF%BB/">
<p class="h4 index-header">什么是脏读、不可重复读、幻读</p>
</a>
<a href="/2021/04/21/%E4%BB%80%E4%B9%88%E6%98%AF%E8%84%8F%E8%AF%BB%E3%80%81%E4%B8%8D%E5%8F%AF%E9%87%8D%E5%A4%8D%E8%AF%BB%E3%80%81%E5%B9%BB%E8%AF%BB/">
<div class="index-excerpt" >
<div class="index-text mb-1">
文章已收录Github精选,欢迎Star:https://github.com/yehongzhi/learningSummary
脏读、不可重复读、幻读在现代关系型数据库中,事务机制是非常重要的,假如在多个事务并发操作数据库时,如果没有有效的机制进行避免就会导致出现脏读,不可重复读,幻读。
脏读1、在事务A执行过程中,事务A对数据资源进行了修改,事务B读取了事务A修改后的数据。
2、由于某些原因,事务A并没有完成提交,发生了RollBack操作,则事务B读取的数据就是脏数据。
这种读取到另一个事务未提交的数据的现象就是脏读(Dirty Read)。
不可重复读事务B读取了两次数据资源,在这两次读取的过程中事务A修改了数据,导致事务B在这两次读取出来的数据不一致。
这种在同一个事务中,前后两次读取的数据不一致的现象就是不可重复读(Nonrepeatable Read)。
幻读事务B前后两次读取同一个范围的数据,在事务B两次读取的过程中事务A新增了数据,导致事务B后一次读取到前一次查询没有看到的行。
幻读和不可重复读有些类似,但是幻读强调的是集合的增减,而不是单条数据的更新。
</div>
</div>
</a>
<div class="index-btm">
<i class="iconfont icon-riqi2"></i> 2021-04-21
<i class="iconfont icon-tag"></i>
<a href="/tags/MySQL">MySQL</a>
</div>
</div>
</div>
<nav aria-label="index posts navigation">
<span class="pagination pg-blue justify-content-center mt-5" id="pagination">
<span class="page-number current">1</span><a class="page-number" href="/page/2/">2</a><a class="page-number" href="/page/3/">3</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-angle-double-right"></i></a>
</span>
</nav>
<script>
for (ele of document.getElementById("pagination").getElementsByClassName("page-number")) {
ele.href += '#board';
}
</script>
</div>
</div>
</div>
</div>
</div>
</main>
<a class="z-depth-1" id="scroll-top-button" href="#" role="button">
<i class="fa fa-chevron-up scroll-top-arrow" aria-hidden="true"></i>
</a>
<div class="modal fade" id="modalSearch" tabindex="-1" role="dialog" aria-labelledby="ModalLabel"
aria-hidden="true">
<div class="modal-dialog modal-dialog-scrollable modal-lg" role="document">
<div class="modal-content">
<div class="modal-header text-center">
<h4 class="modal-title w-100 font-weight-bold">搜索</h4>
<button type="button" id="local-search-close" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body mx-3">
<div class="md-form mb-5">
<input type="text" id="local-search-input" class="form-control validate">
<label data-error="x" data-success="v"
for="local-search-input">关键词</label>
</div>
<div class="list-group" id="local-search-result"></div>
</div>
</div>
</div>
</div>
<footer class="mt-5">
<div class="text-center py-3">
<a href="https://hexo.io" target="_blank" rel="nofollow noopener"><b>Hexo</b></a>
<i class="iconfont icon-love"></i>
<a href="https://github.com/fluid-dev/hexo-theme-fluid" target="_blank" rel="nofollow noopener"> <b>Fluid</b></a>
<br>
<!-- 不蒜子统计PV -->
<span id="busuanzi_container_site_pv"></span>总访问量
<span id="busuanzi_value_site_pv"></span> 次
<!-- 不蒜子统计UV -->
<span id="busuanzi_container_site_uv"></span>总访客数
<span id="busuanzi_value_site_uv"></span> 人
<br>
<!-- cnzz Analytics icon -->
</div>
</footer>
<!-- SCRIPTS -->
<script src="/lib/jquery/jquery.min.js" ></script>
<script src="/lib/popper/popper.min.js" ></script>
<script src="/lib/bootstrap/js/bootstrap.min.js" ></script>
<script src="/lib/mdbootstrap/js/mdb.min.js" ></script>
<script src="/js/main.js" ></script>
<script src="/js/lazyload.js" ></script>
<script src="/lib/smooth-scroll/smooth-scroll.min.js" ></script>
<script async src="//busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js" ></script>
<!-- Plugins -->
<!-- cnzz Analytics -->
<script src="/lib/prettify/prettify.min.js" ></script>
<script>
$(document).ready(function () {
$('pre').addClass('prettyprint linenums');
prettyPrint();
})
</script>
<script src="/lib/typed/typed.min.js" ></script>
<script>
var typed = new Typed('#subtitle', {
strings: [
' ',
"Code Create Life ",
],
cursorChar: "_",
typeSpeed: 70,
loop: false,
});
typed.stop();
$(document).ready(function () {
$(".typed-cursor").addClass("h2");
typed.start();
});
</script>
<script src="/lib/anchor/anchor.min.js" ></script>
<script>
anchors.options = {
placement: "right",
visible: "false",
};
var el = "h1,h2,h3,h4,h5,h6".split(",");
var res = [];
for (item of el) {
res.push(".markdown-body > " + item)
}
anchors.add(res.join(", "))
</script>
<script src="/js/local-search.js" ></script>
<script>
var path = "/local-search.xml";
var inputArea = document.querySelector("#local-search-input");
inputArea.onclick = function () {
getSearchFile(path);
this.onclick = null
}
</script>
<script src="/lib/fancybox/jquery.fancybox.min.js" ></script>
<script>
$("#post img:not(.no-zoom img, img[no-zoom])").each(
function () {
var element = document.createElement("a");
$(element).attr("data-fancybox", "images");
$(element).attr("href", $(this).attr("src"));
$(this).wrap(element);
}
);
</script>
</body>
</html>