自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(22)
  • 收藏
  • 关注

原创 阿里云DataX用法

Datax原理及使用

2022-07-13 10:03:29 659 1

原创 mysql与redis的区别

1.mysql和redis的数据库类型mysql是关系型数据库,主要用于存放持久化数据,将数据存储在硬盘中,读取速度较慢。redis是NOSQL,即非关系型数据库,也是缓存数据库,即将数据存储在缓存中,缓存的读取速度快,能够大大的提高运行效率,但是保存时间有限。2.mysql的运行机制mysql作为持久化存储的关系型数据库,相对薄弱的地方在于每次请求访问数据库时,都存在着I/O操作,如果反复频繁的访问数据库。第一:会在反复链接数据库上花费大量时间,从而导致运行效率过慢;第二:反复的访问数据库

2022-04-22 14:51:49 19710

原创 MySQL中的悲观锁和乐观锁

1:悲观锁顾名思义,就是对于数据的处理持悲观态度,总认为会发生并发冲突,获取和修改数据时,别人会修改数据。所以在整个数据处理过程中,需要将数据锁定。悲观锁的实现,通常依靠数据库提供的锁机制实现,比如mysql的排他锁,select .... for update来实现悲观锁。将商品库存数量nums字段类型设为unsigned,保证在数据库层面不会发生负数的情况。悲观锁在并发控制上采取的是先上锁然后再处理数据的保守策略,虽然保证了数据处理的安全性,但也降低了效率。2:乐观锁顾名思义,就是

2022-04-12 14:58:34 2624

原创 JVM垃圾回收详解

1:JVM内存模型1 jdk 1.8 里主要是 分成了 堆(新生代【eden,s0,s1】,老年代,元空间),方法区,程序计数器,虚拟机栈,本地方法栈2 对象和共享变量放到堆里,类信息,方法和字符串常量池放到方法区里,栈里面都是内存地址值和局部变量3 本地方法栈——私有,存储线程的本地方法调用信息,也是主要是栈帧。是c 语言实现4 程序计数器——私有,记录线程的当前执行的位置信息。2:jvm 垃圾回收分析和优化1. 回收发生在哪里?主要是 堆和方法区中的对象和废弃常量和无用的类2.

2022-03-30 15:13:35 268

原创 java中的锁

1.jdk 1.6后Synchronized 锁优化(分级锁)1. 检测Mark Word里面是不是当前线程ID,如果是,表示当前线程处于偏向锁2. 如果不是,则使用CAS将当前线程ID替换到Mark Word,如果成功则表示当前线程获得偏向锁,设置偏向标志位13. 如果失败,则说明发生了竞争,撤销偏向锁,升级为轻量级锁4. 当前线程使用CAS将对象头的mark Word锁标记位替换为锁记录指针,如果成功,当前线程获得锁5. 如果失败,表示其他线程竞争锁,当前线程尝试通过自旋获取锁 for(;;

2022-03-30 10:51:50 103

原创 MySQL事务四大特性以及如何保证

1.MySQL事务四大特性:我们以从A账户转账50元到B账户为例进行说明一下ACID,四大特性。原子性原子性是指一个事务是一个不可分割的工作单位,其中的操作要么都做,要么都不做。即要么转账成功,要么转账失败,是不存在中间的状态!如果无法保证原子性会怎么样?OK,就会出现数据不一致的情形,A账户减去50元,而B账户增加50元操作失败。系统将无故丢失50元~隔离性隔离性是指多个事务并发执行的时候,事务内部的操作与其他事务是隔离的,并发执行的各个事务之间不能互相干扰。持久性持久性是指

2022-03-30 09:57:25 5658

原创 MySQL为什么使用B+树作为索引?

1:MySQL的索引结构MySQL常用的索引为:哈希索引,b+树索引。如果只选一个数据,那确实是hash更快。但是数据库中经常会选择多条,这时候由于B+树索引有序,并且又有链表相连,它的查询效率比hash就快很多了。树的话,无非就是前中后序遍历、二叉树、二叉搜索树、平衡二叉树,更高级一点的有红黑树、B树、B+树。2:都是树形结构为什么M有SQL选择b+树呢?首先我们知道树形结构查找的时间与树的高度是成正比的,高度越高查找的时间越长,而B树是一种多路搜索树,每个结点至多可以有两个孩子结点,

2022-03-30 09:32:18 1591

原创 二叉查找树、平衡树以及红黑树的区别和联系

1:二叉查找树二叉查找树的特点就是左子树的节点值比父亲节点小,而右子树的节点值比父亲节点大基于二叉查找树的这种特点,我们在查找某个节点的时候,可以采取类似于二分查找的思想,快速找到某个节点。n 个节点的二叉查找树,正常的情况下,查找的时间复杂度为 O(logn)但是会有一种极端情况如:此时的二叉查找树 退化成链表,查找的时间复杂度变为O(n)。2:平衡二叉树平衡二叉树就是为了解决二叉查找树退化成一颗链表而诞生了,平衡树具有如下特点1、具有二叉查找树的全部特性。2、每个

2022-03-30 09:12:48 461

原创 Java进行 gc时为什么要stop the world

1:什么是stop the world?在gc事件发生过程中,会产生应用的停顿,停顿产生时整个应用程序线程都会被暂停,没有任何响应,有点像卡死的感觉,这个停顿称为STW2:为什么gc时要stop the world原因很简单,因为java进行垃圾回收时使用可达性分析,从GC Root向下判断对象是否有引用,如果不把所有线程进入safe points并阻塞起来就会出现对象上一秒没有引用被删除,后一秒又出现引用,导致错误的产生...

2022-03-28 16:36:42 1756

原创 concurrenthashmap实现原理

1.JDK 1.7ConcurrentHashMap 是由 Segment 数组结构和 HashEntry 数组结构组成Segment 继承自 ReentrantLock,是一种可重入锁;其中,HashEntry 是用于真正存储数据的地方static final class Segment<K,V> extends ReentrantLock implements Serializable { // 真正存放数据的地方 transient volatile Hash

2022-03-23 11:15:06 7422 4

原创 Volatile和Synchronized区别

在Java多线程并发中,Volatile和Synchronizedzed都扮演着重要的角色,Volatile是轻量级的Synchronized,它在多处理器开发中保证了共享变量的可见性。“可见性”是指当一个线程修改变量时,另一个线程也能读到修改后的值。1:Volatile的定义和实现原理Lock前缀指令会引发两件事:1:当前处理器缓存行的数据写回系统内存2:这个写回内存的操作会使得CPU里其他缓存了该内存地址的数据无效。如果对申明了Volatile的变量进行写操作,JVM会向处理器发送一

2022-03-21 17:06:32 639

原创 Java线程池参数详解

1:前言在使用线程池时,为了获取最佳的性能,常常需要手动指定线程池的参数,ThreadPoolExecutor是最常用的线程池执行器,它有四个构造方法,参数最多的构造方法有7个参数,下面将详细介绍这7个参数的含义及作用。2:ThreadPoolExecutor的构造方法源码 public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize,

2022-03-21 15:17:32 555

原创 BIO与NIO、AIO区别

简介:BIO:同步阻塞式IO,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销,当然可以通过线程池机制改善。NIO:同步非阻塞式IO,服务器实现模式为一个请求一个线程,即客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有I/O请求时才启动一个线程进行处理。AIO(NIO.2):异步非阻塞式IO,服务器实现模式为一个有效请求一个线程,客户端的I/O请求都是由OS先完成了再通知服务器应用去启动线程..

2022-03-15 17:15:51 93

原创 Linux 查看CPU、Memory等资源占用情况

linux下获取占用CPU资源最多的10个进程,可以使用如下命令组合:ps aux|head -1;ps aux|grep -v PID|sort -rn -k +3|headlinux下获取占用内存资源最多的10个进程,可以使用如下命令组合:ps aux|head -1;ps aux|grep -v PID|sort -rn -k +4|head命令组合解析(针对CPU的,MEN也同样道理):ps aux|head -1;ps aux|grep -v PID|sort -rn -k +3|h.

2022-03-15 17:06:09 1035

原创 UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0xad in position 176:

事件抽取处理中文数据集时出现这个错误,因为默认编码方式是gbk,而中文文本是utf-8原先: with open(sgm_file, 'r') as f: soup = BeautifulSoup(f.read(), features='html.parser') sgm_text = soup.text所以当出现这个错误时修改代码: with open(sgm_file, 'r',encoding='utf-8') as f:

2022-03-09 15:26:41 283

原创 Java创建字符串的两种方式

1 :String literalString str = "Elroy";在这里,JVM 检查字符串常量池。如果字符串不存在,则创建一个新的字符串实例并将其放置在池中。如果字符串存在,则不会创建新对象。相反,它将返回对同一实例的引用。存储这些字符串实例的缓存称为字符串常量池或字符串池。在 Java 的早期版本中,直到 JDK 6 字符串池位于 PermGen(永久代)空间内。但是在 JDK 7 中,它被移到了主堆区域。2: 使用new关键字String s = new String (

2022-03-08 16:55:35 2046 1

原创 Java 中的方法和块同步

线程主要通过共享对字段和对象引用字段的访问来进行通信。这种通信形式非常高效,但会导致两种错误:线程干扰和内存一致性错误。需要一些同步结构来防止这些错误。以下示例显示了我们需要同步的情况。方法同步同步方法启用了防止线程干扰和内存一致性错误的简单策略。如果一个对象对多个线程可见,则对该对象字段的所有读取或写入都通过同步方法完成。同步方法的两次调用不可能交错。如果一个线程正在执行同步方法,则在同一对象上调用同步方法的所有其他线程将不得不等到第一个线程完成该对象。示例:这表明是否有多个线程在没有同步

2022-03-08 16:34:32 264

原创 Synchronized 的使用

多线程程序可能经常遇到多个线程尝试访问相同资源并最终产生错误和无法预料的结果的情况。因此需要通过某种同步方法确保在给定时间点只有一个线程可以访问资源。Java 提供了一种使用同步块创建线程和同步它们的任务的方法。Java 中的同步块用 synchronized 关键字标记。Java 中的同步块在某个对象上同步。在同一个对象上同步的所有同步块一次只能在其中执行一个线程。所有其他试图进入同步块的线程都被阻塞,直到同步块内的线程退出该块。synchronized(sync_object){ /.

2022-03-08 16:20:54 359

原创 Java线程池

背景:服务器程序(如数据库和 Web 服务器)重复执行来自多个客户端的请求,这些程序旨在处理大量短任务。构建服务器应用程序的一种方法是在每次请求到达时创建一个新线程,并在新创建的线程中为这个新请求提供服务。虽然这种方法实施起来似乎很简单,但它也有明显的缺点。与处理实际请求相比,为每个请求创建新线程的服务器将花费更多时间和消耗更多系统资源来创建和销毁线程。线程池重用先前创建的线程来执行当前任务,并为线程周期开销和资源抖动问题提供了解决方案。由于请求到达时线程已经存在,因此消除了线程创建引入的延迟,使应用程

2022-03-08 16:12:13 451

原创 Java线程优先级

线程中的优先级是一个概念,其中每个线程都有一个优先级,用外行的语言可以说每个对象在这里都有优先级,由 1 到 10 的数字表示。默认优先级设置为 5 作为例外。 最低优先级设置为 1。 最大优先级设置为 10。这里定义了3个常量,如下所示:公共静态 int NORM_PRIORITY 公共静态 int MIN_PRIORITY 公共静态 int MAX_PRIORITY我们将使用currentThread()方法来获取当前线程的名称。用户也可以使用setName()方法,如果他/她想根.

2022-03-08 15:56:14 545

原创 Java创建线程的两种方式

Java创建线程的两种方式:1.继承Thread类// Java code for thread creation by extending// the Thread classclass MultithreadingDemo extends Thread { public void run() { try { // Displaying the thread that is running System.out.println( "Thread " + Threa

2022-03-08 15:27:13 422

原创 Java中set.iterator()的用法;

java.util.Set.iterator() 方法用于返回与集合相同元素的迭代器。元素从集合中的内容以随机顺序返回。句法iterate_value = Set.iterator();参数:该函数不带任何参数。返回值:该方法迭代集合的元素并返回值(迭代器)。下面的程序说明了 java.util.Set.iterator() 方法:// Java code to illustrate iterator()import java.util.*;public class Se

2022-03-08 14:45:19 2729

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除