自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 享学堂-架构师网课笔记-数据库-L0(数据库基础)

个人笔记,别看

2023-02-06 23:03:27 105 1

原创 享学堂-架构师网课笔记-线程-L5(线程池的实现原理)

线程池ExecutorService线程池的使用方式,new 一个线程代码如下:ThreadPoolExecutor executor = new ThreadPoolExecutor(1, 2, 3, TimeUnit.MINUTES, new ArrayBlockingQueue<>(1), (r) -> { return new Thread(r, "name"); }, ne

2020-10-15 11:27:45 94

原创 享学堂-架构师网课笔记-spring源码-L2(bean的解析)

上面讲了spring 的核心加载是通过 AbstractApplicationContext.refresh() 方法来定义加载的一个过程,那么下面将具体看看通过XML和自定义加载xml 的解析过程主要流程如下:1、创建 XmlBeanDefinitionReader 对象2,通过 Reader 对象加载配置文件3,根据加载的配置文件封装成document对象4,创建 BeanDefinitionDocumentReader 对象,DocumentReader 负责对 document 对

2020-10-13 10:59:32 165

原创 享学堂-架构师网课笔记-spring源码-L1(bean的加载)

什么Spring IOC所谓spring 的ioc容器就是将对象通过 getClassLoader 这种方式实例化一个对象放到一个hashMap中,这个 hashMap 就是一个 name 和封装的 bean 对象,而这样每次使用就不用每次都要 new 一个对象,通过 key 就可以直接拿到了。这就是 ioc 的代码主要功能,当然它还有很多好处。所以spring框架的主要思路就是1,解析bean(xml,扫描包,配置文件);2,...

2020-10-12 15:40:35 176 1

原创 享学堂-架构师网课笔记-数据库-L1(Mysql数据架构)

Mysql 数据架构篇MySQL在单表过大的时候,可以通过索引优化。例如postgresql提供了字段上的分表功能,通过某个字段取hash把数据平均分配到多个表中,一条sql可以通过分表索引,查找到具体哪个表再定位到哪个分表中。同时也可以通过中间件和代码逻辑进行分表分库。MySQL架构设计MySQL高可用架构设计可以通过数据库扩展来解决热备份,多活,故障切换,负载均衡,读写分离等。Replication常用架构常规复制架构(Master–Slaves)在常规的使用中90%都是一个主多个从,都是从

2020-10-09 15:07:12 487 1

原创 享学堂-架构师网课笔记-线程-L4(Lock&AQS)

Lock 的使用Lock 的特点:1,可重入(syn也可以),可打断(syn不能),可公平2,可以设置超时时间3,不能自动释放,需要finally 释放4,支持读写锁基本语法基础语法:1,可打断 Lock lock=new ReentrantLock(); try { //行加锁 lock.lock(); }finally { //finally 释放锁 loc

2020-10-08 20:30:37 136

原创 享学堂-架构师网课笔记-线程-L3(synchronized 应用)

在上一篇文章讲了synchronized的实现原理,今天来讲讲它的应用场景。基础使用1,基础使用synchronized 锁定的不是代码块,是对象。注意如果这个对象不是唯一的则可能加锁失败,因为synchronized可以锁定的对象有两种1,类的实例;2,类的对象。具体用法synchronized (object){ count--; log.debug(Thread.currentThread().getName() + " count = " + count);

2020-09-29 14:02:53 100

原创 享学堂-架构师网课笔记-线程-L2

偏向锁的实现CASCAS(compare and swap) 对比和交换,对比两个值,如果相同则交换,如果不同则返回false,是原子性的操作,操作系统提供用户态的方法,性能比较高。公平锁和非公平锁的实现公平锁和非公平锁,其中里面的值如果为false,则非公平锁,如果是true,则为公平锁。公平锁和非公平锁在Java源码的实现的并没有实现通过系统调用mutex(用户态切换到内核态调用),所以性能是比较高的,而在使用synchronized时,如果有多个线程竞争的话,会转化为主重量级锁。而此时则会产生

2020-09-09 15:43:47 321

原创 享学堂-架构师网课笔记-线程-L1

线程线程在Java中的实现主要是通过实现操作系统中的方法,也就是说Java中要起一个线程,必须通过JVM调用底层native方法才能实现开启线程。也就是说Java线程只是系统的一个封装实现,所以想了解Java的线程,就必须理解操作系统层面的实现。Linux的线程实现方式int pthread_create(pthread_t *thread, const pthread_attr_t *attr,void *(*start_routine) (void *), void *arg);上面的代码是

2020-08-26 21:59:44 102

原创 享学堂-架构师网课笔记-JVM-L11+L12(排查实战,项目总结)

这两节课主要讲的是JVM的问题排查和调优。我将结合本身遇到实际的案例和本节课的知识点去总结如何排查项目。本文将从个人实际遇到过的实际问题,从定位问题,问题解决,和最后如何进行压力测试。问题案例一项目简介,这个项目是我之前在银行写的一个分布式项目,这是一个实时的任务,作用是从Kafka对列里面拉取数据交易,然后对符合要求的交易调用下游接口,对不符合,或者异常的信息记录到Mysql里。项目是高可用的,同时部署两个,但是同一时间只有一个运行(通过设置group内,consumer数量不能大于partition

2020-08-16 11:22:51 270

原创 享学堂-架构师网课笔记-JVM-L9+L10

GC 调优基础知识之工具篇在实际的项目中GC存在很多的问题,例如高延时,高内存占用等这里结合之前的垃圾回收理论+工具去排除问题,解决实际生产问题,优化代码和运行参数。jpsjps 常用的Java运行线程查看工具,查看当前运行的Java线程,确认目标项目是否部署成功等。比较常用的参数是-l 和 -v 一般在生产上如果有太多的程序在跑以查看路径。jps -l 查看主类完整的package 名称和jar完整名称jps -v 查看Java运行参数和具体路径jstat...

2020-08-11 10:53:54 159

原创 享学堂-架构师网课笔记-JVM-L9

Java 中的泛型Java中的泛型,即“参数化类型”,作用是定义方法是不作为实际参数类型,然后调用方法时使用实参。这样做的好处就是在开始不知道入参的类型的时候可以先定义。减少函数的复杂度。泛型类和泛型接口可以为任何泛型类和接口增加泛型声明。在实际的使用中,当我们的入参不确定时可以根据业务调整 例如入参是数字类型 NormalGeneric<Integer> normalGeneric = new NormalGeneric<>(); 可以改成这种形式从而把改成别的入参,避免

2020-08-06 15:16:53 203

原创 享学堂-架构师网课笔记-JVM-L8

方法调用的底层实现在应用程序中,Java的运行是通过main方法作为入口,代码的执行站在JVM中实际上是方法的执行,方法的执行在JVM是怎样的一个执行过程就是这里要看的。方法调用的字节码指令方法调用指令,Java提供了5个字节码指令来调用不同的方法:invokestatic 用来调用静态方法invokespecial 用来调用私有实例的方法,构造器,super等invokevirtual 调用非私有实例方法等,比如public,protect等invokeinterface 接口invok

2020-08-04 17:59:20 94

原创 享学堂-架构师网课笔记-JVM-L7

类加载和类加载器一个类的加载顺序一般是加载,验证,准备,解析,初始化,使用,加载

2020-08-03 15:43:37 148

原创 享学堂-架构师网课笔记-JVM-L6

class文件结构JVM无关性Java编译出来的class文件和其他语言例如Scala都是可以运行在JVM上的,这都是因为虚拟机识别的是二进制的文件,而不是程序员写出来的文件,而class文件从出现到现在已经比较稳定,可以看下class文件的内容,可以看到Java代码的实现。class 的文件结构class 文件用记事本打开是一个二进制文件,如下它可以用 javap 命令查看编译内容,例如输入javap -c +XX.class 可以查看。其中class文件包含了以下的信息:常量池常量池包

2020-07-30 15:51:33 139

原创 享学堂-架构师网课笔记-JVM-L5

Garbage First(G1)续上课。。。。最终标记:对线程进行一个短暂的停顿,用于处理并发阶段少量的SATB记录。筛选回收:这个是G1比较有意思的地方,它会预测哪些对象回收得比较快,然后进行回收当然,这些是在STW下进行的特点跟CMS这款垃圾回收器来讲,它拥有和CMS差不多的特点,1)包括并行与并发,都是使用多线程; 2)分代收集,区分了老年代,年轻代,和大对象空间;但是在空间整合方面不同于CMS,因为它的空间分布并不是连续的,是分布在一块块region中,基于“复制“算法实现。G1这种垃

2020-07-28 15:58:45 280

原创 享学堂-架构师网课笔记-JVM-L4

笔记GC为什么要进行垃圾回收,原因很简单,就是当不断的进行新建对象时会占用空间,当空间被用光就会OOM了,像使用C或者C++是自动回收的,而JVM是进行自动垃圾回收的。而上次之所以把JVM划分出两个不同的区域,主要是方便进行垃圾回收,因为两个区的对象存活情况和使用频率不同。所以根据设计了两种垃圾回收算法。在甲骨文公司对Java的使用情况进行了大量调查发现以下规律:1,大量对象都是朝生夕死的。2,越是难回收的对象越难回收。所以根据JVM的发展垃圾回收器也随着变化一代目 Serial/Seria

2020-07-26 15:41:36 238

原创 享学堂-架构师网课笔记-JVM-L3

笔记对象的加载对象的加载过程,在JVM启动时会从class文件中检查加载,然后分配内存,进行内存空间初始化(赋予默认初始值),设置(类的实例,如何查找元数据信息,GC方式等),对象初始化(等待被new出来)。期中比较重要的是内存的分配方式,内存的分配方式有下面几种:指针碰撞内存大小被分为固定几块,当有新对象插入时插入的固定大小的地方,然后移动指针,称为指针碰撞空闲列表如果分配的内存大小不是连续的,则需要把内存空间划分出等量的几块内容,然后维护一个变量表记录哪些是没有被使用,哪些是已经存在的

2020-07-23 15:15:39 165

原创 享学堂-架构师网课笔记-JVM-L2

笔记运行加载1,jvm的运行流程,先往操作系统中申请一块连续的内存空间,根据内存大小找到具体分配表,根据内存的起始位置和终止位置分配给jvm然后jvm进行内部分配。2,jvm根据运行参数分配堆,方法区和堆内存的空间大小3,类加载,加载类信息到方法区,还有类中的静态变量也要加入方法区4,执行方法区创建对象,运行main方法线程,创建栈空间 static class Teacher{ String name; public String getName() { return n

2020-07-21 15:11:22 190

原创 享学堂-架构师网课笔记-JVM-L1

Java诞生之初是从C语言之后的,为什么会出现Java,就是因为市场上存在多个操作系统像Linux,Mac,Windows,机器的位数也有可能不同,像32位,64位系统指令不同。而为什么会存在多个操作系统?因为底层存在不同的硬件有AMD和Internet,所导致机器指令有所不同。而JVM就是屏蔽下层的操作系统用的一个虚拟机。所谓的虚拟机,JVM就是一个操作系统,操作系统要干的事它都要干,操作系统主要作用是什么?是计算机资源的合理分配,包括内存,CPU,I/O,网络这些硬件资源。而现在要入门学习的是内存管理

2020-07-17 23:43:10 295

原创 数据与决策

数据与决策先说下个人的经历,小弟毕业于一家普通的全日制本科,计算机专业,一直对数据有一种迷之好奇。包括我的毕业论文,我的选题是大数据与数据挖掘相关,导师跟我说你的研究选题有点虚,不容易过。但是我还是坚持自己的课题,题目就是[《基于Hadoop的数据挖掘技术》](https://github.com/Corn-886/graduated.git),通过挖掘某地的政府电话咨询热线文本,最后为当地政府提供了一些民生问题建议。最后我还差点得了系的优秀毕业论文。然后我从此对这样一个问题产生了思考:究竟数据是怎样影响

2020-07-17 10:21:10 262

空空如也

空空如也

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

TA关注的人

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