自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 Java堆内存是线程共享的!面试官:你确定吗?

Java作为一种面向对象的,跨平台语言,其对象、内存等一直是比较难的知识点,所以,即使是一个Java的初学者,也一定或多或少的对JVM有一些了解。可以说,关于JVM的相关知识,基本是每个Java开发者必学的知识点,也是面试的时候必考的知识点。在JVM的内存结构中,比较常见的两个区域就是堆内存和栈内存(如无特指,本文提到的栈均指的是虚拟机栈),关于堆和栈的区别,很多开发者也是如数家珍,有很多书籍,或者网上的文章大概都是这样介绍的:1、堆是线程共享的内存区域,栈是线程独享的内存区域。2、堆中主要存放对象实

2021-03-07 18:47:54 401

原创 JVM辣鸡收集器

垃圾收集器主要包括 Serial、ParNew、Parallel Scavenge、CMS、G1Serial:单线程;简单而高效(与其他收集器的单线程相比);新生代采用复制算法,老年代采用标记-整理算法。进行垃圾收集工作的时候必须暂停其他所有的工作线程( “Stop The World” )。ParNew:ParNew 收集器其实就是 Serial 收集器的多线程版本。Parallel Scavenge:几乎和 ParNew 一样,关注点是吞吐量(高效率的利用 CPU,吞吐量是 CPU 中用于运行

2021-02-26 15:06:04 100

转载 浏览器输入URL回车之后发生了什么

地址解析:浏览器会开一个线程来处理,先对URL进行解析,一般包括 ( 协议头、主机域名或IP地址、端口号、请求路径、查询参数、hash等等 ),然后打开网络线程发出一个完整的请求浏览器根据URL进行DNS查询,浏览器会首先搜索浏览器的DNS缓存,看自身的缓存中是否有对应的条目,而且没有过期,如果有且没有过期则解析到此结束。如果浏览器自身的缓存里面没有找到对应的条目,那么会搜索操作系统的DNS缓存,如果找到且没有过期则停止搜索解析到此结束。如果在Windows系统的DNS缓存也没有找到,那么尝试读取hos

2021-02-19 13:39:31 89

转载 进程间通信的几种方式

每个进程各自有不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不到,所以进程之间要交换数据必须通过内核,在内核中开辟一块缓冲区,进程1把数据从用户空间拷到内核缓冲区,进程2再从内核缓冲区把数据读走,内核提供的这种机制称为进程间通信。1.无名管道( pipe ):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。管道是一种最基本的IPC机制,由pipe函数创建。调用pipe函数时在内核中开辟一块缓冲区(称为管道)用于通信,它有

2021-02-18 17:08:05 370

原创 建立索引的原则总结

数据库建立索引的原则1,确定针对该表的操作是大量的查询操作还是大量的增删改操作。2,尝试建立索引来帮助特定的查询。检查自己的sql语句,为那些频繁在where子句中出现的字段建立索引。3,尝试建立复合索引来进一步提高系统性能。修改复合索引将消耗更长时间,同时,复合索引也占磁盘空间。4,对于小型的表,建立索引可能会影响性能5,应该避免对具有较少值的字段进行索引。6,避免选择大型数据类型的列作为索引。7,在SQL语句中经常进行GROUP BY、ORDER BY的字段上建立索引;...

2021-02-13 21:13:59 190

转载 同一个进程中的线程程的哪些资源共享,哪些资源不共享

共享的资源有:堆。 由于堆是在进程空间中开辟出来的,所以它是理所当然地被共享的;因此new出来的都是共享的(16位平台上分全局堆和局部堆,局部堆是独享的)全局变量 。它是与具体某一函数无关的,所以也与特定线程无关;因此也是共享的静态变量。 虽然对于局部变量来说,它在代码中是“放”在某一函数中的,但是其存放位置和全局变量一样,存于堆中开辟的.bss和.data段,是共享的文件等公用资源。 这个是共享的,使用这些公共资源的线程必须同步。Win32 提供了几种同步资源的方式,包括信号、临界区、事件和互斥体

2021-02-08 14:49:57 6256

转载 Mysql行锁和表锁

1.表级别的锁定是MySQL各存储引擎中最大颗粒度的锁定机制。该锁定机制最大的特点是实现逻辑非常简单,带来的系统负面影响最小。所以获取锁和释放锁的速度很快。由于表级锁一次会将整个表锁定,所以可以很好的避免困扰我们的死锁问题。锁定颗粒度大所带来最大的负面影响就是出现锁定资源争用的概率也会最高,致使并大度大打折扣。2.行级锁定最大的特点就是锁定对象的颗粒度很小,也是目前各大数据库管理软件所实现的锁定颗粒度最小的。由于锁定颗粒度很小,所以发生锁定资源争用的概率也最小,能够给予应用程序尽可能大的并发处理能力而提高

2021-02-08 13:47:35 321

原创 Redis缓存问题

缓存穿透(查不到)缓存穿透的概念很简单,用户要查询一个数据,发现redis内存数据库没有,也就是说在缓存中没有命中,于是会向持久层数据库中查询,发现也没有,于是本次查询失败,当用户很多时候,缓存都没有命中(秒杀),于是都向持久层数据库中请求。这就给了持久层数据库很大的压力,这时候相当于出现了缓存穿透。解决方法:1.设置布隆过滤器,是一种数据结构,对所有可能查询的参数以hash的形式存储,在控制层先进性校验,不符合就丢弃,从而避免了对底层存储系统的压力。2.缓存空对象:当存储层不命中后,即使返回空

2021-02-07 12:07:45 90

原创 JVM内存机制

在本地方法栈中装的都是native方法类加载器ClassLoader负责加载class文件,class文件在文件开头有特定的文件标识,将class文件字节码内容加载到内存中,并将这些内容转换成方法区中的运行时数据结构并且将ClassLoader只负责class文件加载从Car.class变成Car.Class方法区不是存放方法的区域,其实是存放类描述信息(模板)的地方ClassLoader只负责加载class文件,相当于一个快递员,这个快递员不是只有一家,ClassLoader有很多种ClassL.

2021-02-05 16:46:21 71

原创 JUC中的生产者消费者

/*1.wait()的作用是让当前线程进入等待状态,同时,wait()也会让当前线程释放它所持有的锁。“直到其他线程调用此对象的 notify() 方法或 notifyAll() 方法”,当前线程被唤醒(进入“就绪状态”)2.notify()和notifyAll()的作用,则是唤醒当前对象上的等待线程;notify()是唤醒单个线程,而notifyAll()是唤醒所有的线程。3.wait(long timeout)让当前线程处于“等待(阻塞)状态”,“直到其他线程调用此对象的notify()方法或

2021-02-05 10:45:46 71

转载 mysql行锁和行锁检测

行锁顾名思义,就是针对单行数据加锁,在mysql中,锁的实现是由引擎层实现的,MyISAM引擎就不支持行锁不支持行锁就意味着并发控制只能使用表锁,也就是说同一时间,在这个表上只能有一个更新在执行,这就会影响到业务的并发度。InnoDB是支持行锁的,这也是MyISAM被InnoDB替代的重要原因之一。事务B在执行这条语句时会被阻塞其实事务A的加锁时机是执行第一条语句的时候,释放锁的时候是commit完以后但是事务B是在事务A commit前执行的这个时候事务A还持有id=1这行数据的锁,所以事务B会被

2021-02-04 17:03:06 310

原创 悲观锁和乐观锁

一般可以分为两类,一个是悲观锁,一个是乐观锁,悲观锁一般就是我们通常说的数据库锁机制,乐观锁一般是指用户自己实现的一种锁机制,比如hibernate实现的乐观锁甚至编程语言也有乐观锁的思想的应用。悲观锁:顾名思义,就是很悲观,它对于数据被外界修改持保守态度,认为数据随时会修改,所以整个数据处理中需要将数据加锁。悲观锁一般都是依靠关系数据库提供的锁机制,事实上关系数据库中的行锁,表锁不论是读写锁都是悲观锁。悲观锁按照使用性质划分:共享锁(Share locks简记为S锁):也称读锁,事务A对对象T加s锁

2021-02-04 10:59:31 70

转载 HashMap知识点

(1) HashMap的实现原理此题可以分为下面几个小问题来问• 看过HashMap源码吗,知道原理吗?• 为什么用数组+链表?• hash冲突你还知道哪些解决办法?• 用LinkedList代替数组结构可以么?• 了解TreeMap吗?看过HashMap源码吗,知道原理吗?HashMap采用Entry数组来存储key-value对,每一个键值对组成了一个Entry实体,Entry类实际上是一个单向的链表结构,它具有Next指针,可以连接下一个Entry实体。 只是在JDK1.8中,链表长度

2021-02-04 00:03:27 114

转载 mysql中的for update

for update是在数据库中上锁用的,可以为数据库中的行上一个排它锁。当一个事务的操作未完成时候,其他事务可以读取但是不能写入或更新。如果遇到存在高并发并且对于数据的准确性很有要求的场景,是需要了解和使用for update的。比如涉及到金钱、库存等。一般这些操作都是很长一串并且是开启事务的。如果库存刚开始读的时候是1,而立马另一个进程进行了update将库存更新为0了,而事务还没有结束,会将错的数据一直执行下去,就会有问题。所以需要for upate 进行数据加锁防止高并发时候数据出错。记住一个

2021-02-03 21:25:30 188

原创 get请求和post请求的区别

1.get请求再请求行上提交数据,格式为:uri?name=value&name=value…这种提交方式最终提交的数据会显示再浏览器的地址栏上post请求在请求体中提交数据,相对安全,提交格式为name=value&name=value…这种提交方式最终不会在地址栏上显示2.post请求在请求体中提交数据,所以post请求提交的数据没有长度限制get请求在请求行上提交数据,所以get请求提交的数据有长度限制3.get请求只能提交字符串数据,post请求可以提交任何类型的数据,包括视

2021-01-31 21:48:07 91

原创 TCP和UDP区别

1、连接方面区别TCP面向连du接(如打电话要zhi先拨号建立连接)。UDP是无连接的,即发送数据之前不需要建立连接。2、安全方面的区别TCP提供可靠的服务,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达。UDP尽最大努力交付,即不保证可靠交付。3、传输效率的区别TCP传输效率相对较低。UDP传输效率高,适用于对高速传输和实时性有较高的通信或广播通信。4、连接对象数量的区别TCP连接只能是点到点、一对一的。UDP支持一对一,一对多,多对一和多对多的交互通信。5.一般情况下TCP

2021-01-31 14:34:39 80

转载 转发和重定向

请求次数:重定向是浏览器向服务器发送一个请求并收到响应后再次向一个新地址发出请求,转发是服务器收到请求后为了完成响应跳转到一个新的地址;重定向至少请求两次,转发请求一次;地址栏不同:重定向地址栏会发生变化,转发地址栏不会发生变化;是否共享数据:重定向两次请求不共享数据,转发一次请求共享数据(在request级别使用信息共享,使用重定向必然出错);跳转限制:重定向可以跳转到任意URL,转发只能跳转本站点资源;发生行为不同:重定向是客户端行为,转发是服务器端行为;...

2021-01-31 14:27:34 57

原创 synchronized锁原理

synchronized是java提供的原子性内置锁,这种内置而且使用者看不到的锁也叫做监视器锁,使用synchronized关键字后会在编译器之后在同步代码块前后加上monitorenter和monitorexit指令,他依赖操作系统底层的互斥锁实现,他的主要作用是实现原子性操作和解决共享变量的内存可见性问题。执行monitorenter指令会尝试获取对象所,如果对象没有锁或者已经获得了对象锁,锁的计数器+1.此时其他竞争锁的线程会进入等待队列当中。执行monitorexit指令会把锁的计数器-1.当

2021-01-31 14:27:20 226

原创 数据库的脏读幻读不可重复读和隔离级别等

1.脏读(读取未被提交的数据)A事务读取B事务尚未提交的数据,此时如果B事务发生了错误执行了回滚操作,那么A事务读取道德数据就是脏数据。就好比原本比较干净纯粹的数据,由于B事务更改了它,它变得不再纯粹,这个时候A事务读取了这个数据,但是事务B良心发现,把数据恢复成了原来干净的样子,可是事务A却并不知道。2.幻读(前后多次读取,数据总量不一致)事务A在执行读取操作,要统计量词数据量,前一次查询总量之后,此时事务B执行新增数据操作并且提交之后,这时候事务A读取的数据总量和之前统计的不一样,就像产生幻觉一样

2021-01-31 14:26:40 69

空空如也

空空如也

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

TA关注的人

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