自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

悠忧南士

把所有奉献给热爱的事业

  • 博客(64)
  • 收藏
  • 关注

原创 Hadoop-HDFS 基础回顾

我们每学完一样东西,最好能用笔记记起来,不要太相信自己的记忆力,我在这方面吃过亏。回顾一下,HDFS 全称Hadoop Distribute File System,顾名思义,分布式文件系统。大家想想分布式本身有什么优点:高可用。对,三个字总结一切。首先我们放一下 HDFS官方文档的一段话:NameNode and DataNodesHDFS has a master/slave architecture. An HDFS cluster consists of ...

2020-05-15 23:14:00 215

原创 线程池 核心线程数设定公式

1.先看下机器的CPU核数,然后在设定具体参数:System.out.println(Runtime.getRuntime().availableProcessors());即CPU核数 =Runtime.getRuntime().availableProcessors()2.分析下线程池处理的程序是CPU密集型,还是IO密集型CPU密集型:核心线程数 = CPU核数+ 1...

2020-03-22 17:21:18 3698

原创 RabbitMQ 简单入门 通俗理解

一.RabbitMQ什么语言编写的?我们这边为什么要重点说这个能,就是因为他的编写语言,才让他能在MQ这个大家庭里脱颖而出。rabbitmq是Erlang编程语言编写的:Erlang编程语言最初目的是进行大型电信交换设备的软件开发,是一种适用于大规模并行处理环境的高可靠性编程语言。随着多核处理器技术的日渐普及,以及互联网、云计算等技术的发展,该语言的应用范围也有逐渐扩大之势。所以Ra...

2019-08-17 19:27:56 585

原创 关于部署项目到tomcat,报FAIL - Application at context path [/imageDownloader_war] could not be started

参考:https://blog.csdn.net/yasi_xi/article/details/49642661最近用tomcat部署一个javaweb项目遇到了一个问题。就是 打开tomcat服务器首页,然后点击进入Manager App,手动打开项目。结果发现,项目Running状态为false。所以尝试了一下手动Start项目。出现了报FAIL - Applicatio...

2019-03-26 10:59:33 3232 1

原创 java内存模型---happens-before粗浅的理解

happens-before的规则对于程序员来说是很好理解的它避免程序员为了理解JMM提供的内存可见性保证而去学习复杂的重排序规则以及这些规则的具体实现我们先来说happens-before具体的规则以及个人的解读:两个操作既可以是在一个线程之内,也可以是在不同线程之间。1.程序次序规则:一个线程内,按照代码顺序,书写在前面的操作先行发生于书写在后面的操作;意思就是说前一个操作...

2019-03-25 20:51:26 223

原创 java并发编程----synchronized 实现原理(偏向锁,轻量级锁,自旋锁)

参考文章:http://blog.sina.com.cn/s/blog_c038e9930102v2hu.html http://blog.sina.com.cn/s/blog_c038e9930102v2hu.html参考书籍:Java并发编程的艺术synchronized锁信息存在Make Word 存储对象是hashCodejava 1.6后 为了synchronized减...

2019-03-19 17:31:32 771 1

原创 如果项目使用com.sun包下api,maven 编译,会提示包不存在

因为:maven编译时会忽略jre/lib下的jar包解决:pom文件 新增配置<compilerArgs><arg>-XDignore.symbol.file</arg></compilerArgs><fork>true</fork><compilerArguments><extdirs>${env.JAVA_HOME}\jre\lib</extdirs></com...

2022-05-09 12:23:09 894

原创 浅解mysql之存储引擎 Buffer Pool

一.Buffer Pool这个内存数据结构到底长个什么样子MySQL对数据抽象出来了一个数据页的概念,他是把很多行数据放在了一个数据页里.实际上假设我们要更新一行数据,此时数据库会找到这行数据所在的数据页,然后从磁盘文件里把这行数据所在的数据页直接给加载到Buffer Pool里去.也就是说,Buffer Pool中存放的是一个一个的数据页磁盘中存放的数据页的大小是16KB,也就是说,一页数据包含了16KB的内容。而Buffer Pool中存放的一个一个的数据页,我们通常叫做缓存页,因为毕竟Bu

2021-03-27 09:42:58 270

原创 innoDB存储引擎架构设计

一. innoDB的核心是Buffer pool(缓冲池)1.mysql 执行器,在执行语句的时候,先看看缓冲池有没有数据,如果没有,才会从磁盘里面刷数据进缓冲池。2.缓冲池的缓存被修改后且提交事务后,会随机将数据刷回磁盘二.事务没提交前,缓存被修改了,想回滚数据怎么办?1.缓冲池在修改数据的时候,会先把旧数据写一份进undo日志文件,确保提交事务之前都可以回滚数据。三。如果在提交事务后,缓冲池修改过的数据,还没来得及刷入磁盘,突发宕机,怎么办?1.innoDB存..

2021-03-27 07:52:53 189

转载 两种动态代理方式及其区别(代理模式)

什么是动态代理?假如我有一个user对象,该对象里面有4个方法,增、删、改、查,外界能直接调用这4个方法吗?拿百度来说,你能随便对百度上的内容进行增、删、改、查操作吗?你最多能执行查的操作,增、删、改的操作是不能执行的,你必须要加一个权限操作,应该看看你是否有权限执行这个操作。同理,谁操作了这个东西,你需要给我留下记录,免得我不知道是谁做的。所以,我应该在每一个方法的前面加权限校验,在每一个方法的后面加日志记录。该怎么做呢?有人说,很简单,直接在user对象的实现类里面去改,在增、删、改查前面加

2020-07-05 22:09:29 1291

原创 抽象类(abstract class)和接口(interface)有什么异同?

相同点:(1)不能直接实例化。如果要实例化,抽象类变量必须实现所有抽象方法,接口变量必须实现所有接口未实现的方法。(2)都可以有实现方法(Java8 以前的接口不能有实现方法)。* @since 1.8 */ default void replaceAll(UnaryOperator<E> operator) { Objects.requireNonNull(operator); final ListIterator<E&gt

2020-07-04 13:14:02 1471

原创 org.apache.hadoop.io.nativeio.NativeIOWindows.createDirectoryWithMode0(Ljava/lang/StringI)V

遇到这个错误,对于我这种新手来说真的是摸不着头脑,莫名奇妙。后面搜了很多网上的版本都不行。最终下载了别人的一个bin,覆盖了我的bin,后面就可以了。把我们环境变量的hadoop(我的版本是这个hadoop-2.6.0-cdh5.15.1,不是相同版本慎用)的bin 覆盖成某位大佬的就OK了链接:https://pan.baidu.com/s/1unKAA54Gf_sbCOm-pLMdWQ提取码:oy2p...

2020-05-17 23:51:06 330

转载 hdfs读写机制及其checkpoint机制

https://blog.csdn.net/u014253445/article/details/77574319

2020-05-15 22:22:00 216

原创 分析 HADOOP-HDFS文件储存机制

大家看到hadoop-2.6.0-cdh5.15.1.tar.gz 压缩包 是400M有余我们直接用hadoop fs -put 命令,把包存进HDFS文件系统。我这边的版本block size的默认大小 是128M所以,就是这个文件会分为4个block.用视图工具看了下,确实是分了4个Block.然后我们 在 自定义的HDFS存放数据的根目录/dfs/data/current/BP-504131312-192.168.1.201-1587715632917/c...

2020-05-10 12:26:08 1193

原创 HDFS伪分布式单节点版安装(cdh版本)

我这边用的是hadoop-2.60-cdh5.15.1版本下载Hadoop地址:https://archive.cloudera.com/cdh5/cdh/5/hadoop-2.6.0-cdh5.15.1.tar.gz下载下来后:我们把它解压一下常用的命令是 tar -zxvfhadoop-2.6.0-cdh5.15.1.tar.gz可以看到目录结构:然后我们可以根据配置文档:https://archive.cloudera.com/cdh5/cdh/5/...

2020-05-08 23:52:20 178

原创 kafka入门到精通(二) 生产者

先上段简单的代码:public static final String brokerList = "121.199.24.162:9092"; public static final String topic = "demo"; public static Properties initConfig(){ Properties properties = ne...

2020-03-25 13:34:37 371

原创 kafka入门到精通(一) 基本概念

kafka 的作用分为三个:· 消息系统:Kafka 和传统的消息系统(也称作消息中间件)都具备系统解耦、冗余存储、流量削峰、缓冲、异步通信、扩展性、可恢复性等功能。与此同时,Kafka 还提供了大多数消息系统难以实现的消息顺序性保障及回溯消费的功能。· 存储系统:Kafka 把消息持久化到磁盘,相比于其他基于内存存储的系统而言,有效地降低了数据丢失的风险。也正是得益于Kafka 的消息持...

2020-03-24 22:56:47 187

原创 String 一些理解

先上点题吧 String str1 = "计算机"; String str2 = "计算机"; System.out.println("str1==str2:" + (str1 == str2)); String str3 = new String("计算机"); System.out.println("str1...

2020-03-23 18:32:50 315

原创 对象的访问定位

创建对象自然是为了后续使用该对象,我们的Java程序会通过栈上的reference数据来操作堆上的具体对象。由于reference类型在《Java虚拟机规范》里面只规定了它是一个指向对象的引用,并没有定义这个引用应该通过什么方式去定位、访问到堆中对象的具体位置,所以对象访问方式也是由虚拟机实现而定的,主流的访问方式主要有使用句柄和直接指针两种:·如果使用直接指针访问的话,Java堆...

2020-03-22 17:20:04 255 1

原创 对象的内存布局

在HotSpot虚拟机里,对象在堆内存中的存储布局可以划分为三个部分:对象头(Header)、实例数据(Instance Data)和对齐填充(Padding)。一. 对象头:HotSpot虚拟机对象的对象头部分包括两类信息。第一类是用于存储对象自身的运行时数据,如哈希码(HashCode)、GC分代年龄、锁状态标志、线程持有的锁、偏向线程ID、偏向时间戳对象头的另外一部分是类型指针,即...

2020-03-22 17:18:05 133

原创 本地方法栈和虚拟机栈溢出

1)如果线程请求的栈深度大于虚拟机所允许的最大深度,将抛出StackOverflowError异常。2)如果虚拟机的栈内存允许动态扩展,当扩展栈容量无法申请到足够的内存时,将抛出OutOfMemoryError异常。《Java虚拟机规范》明确允许Java虚拟机实现自行选择是否支持栈的动态扩展,而HotSpot虚拟机的选择是不支持扩展,所以除非在创建线程申请内存时就因无法获得足够内存而出现O...

2020-03-22 16:53:38 280

原创 虚拟机运行时数据区

#####1.程序计数器程序计数器(Program Counter Register)是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器。在Java虚拟机的概念模型里[插图],字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,它是程序控制流的指示器,分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖这个计数器来完成。由于Java虚拟机...

2020-03-22 16:52:06 144

原创 多线程之间通讯学习笔记

wait、notify方法1.因为涉及到对象锁,他们必须都放在synchronized中来使用.Wait、Notify一定要在synchronized里面进行使用。2.Wait必须暂定当前正在执行的线程,并释放资源锁,让其他线程可以有机会运行3. notify/notifyall: 唤醒因锁池中的线程,使之运行wait与sleep区别对于sleep()方法,我们首...

2020-01-06 21:40:34 92

原创 多线程安全和内存模型

同步方法使用的是什么锁?synchronized 修饰方法使用锁是当前this锁。synchronized 修饰静态方法使用锁是当前类的字节码文件Threadlocal什么是ThreadlocalThreadLocal提高一个线程的局部变量,访问某个线程拥有自己局部变量。当使用ThreadLocal维护变量时,ThreadLocal为每个使用该变量的线程提供独立的变量副本...

2020-01-05 23:48:22 207

原创 多线程基础学习笔记

多线程应用场景?答:主要能体现到多线程提高程序效率。举例: 迅雷多线程下载、数据库连接池、分批发送短信,图片上传等。启动线程是使用调用start方法还是run方法?开始执行线程 注意 开启线程不是调用run方法,而是start方法多线程运行状态线程从创建、运行到结束总是处于下面五个状态之一:新建状态、就绪状态、运行状态、阻塞状态及死亡状态。新建状...

2020-01-05 19:58:37 90

原创 分布式事务

事务概念事务特性(ACID)原子性(A)所谓的原子性就是说,在整个事务中的所有操作,要么全部完成,要么全部失败,没有中间状态。对于事务在执行中发生错误,所有的操作都会被回滚,整个事务就像从没被执行过一样。一致性(C)事务的执行必须保证系统的一致性,就拿转账为例,A有500元,B有300元,如果在一个事务里A成功转给B50元,那么不管并发多少,不管发生什么,只要事务执行成功了,那...

2020-01-03 00:20:39 75

原创 String,StringBuffer,StringBuilder有什么区别

1 String (1) String的创建机理 由于String在Java世界中使用过于频繁,Java为了避免在一个系统中产生大量的String对象,引入了字符串常量池。其运行机制是:创建一个字符串时,首先检查池中是否有值相同的字符串对 象,如果有则不需要创建直接从池中刚查找到的对象引用;如果没有则新建字符串对象,返回对象引用,并且将新创建的对象放入池中。但是,通过new方法创建的S...

2019-12-30 21:26:38 119

原创 强引用、软引用、弱引用、幻象引用有什么区别?

1 强引用 特点:我们平常典型编码Object obj = new Object()中的obj就是强引用。通过关键字new创建的对象所关联的引用就是强引用。 当JVM内存空间不足,JVM宁愿抛出OutOfMemoryError运 行时错误(OOM),使程序异常终止,也不会靠随意回收具有强引用的“存活”对象来解决内存不足的问题。对于一个普通的对象,如果没有其他的引用关系,只要超过了引用的作用...

2019-12-30 20:28:30 102

转载 谈谈fnal、fnally、 fnalize有什么不同?

final可以用来修饰类、方法、变量,分别有不同的意义,final修饰的class代表不可以继承扩展,final的变量是不可以修改的,final的方法也是不可以重写的(override)。fnally则是Java保证重点代码一定要被执行的一种机制。我们可以使用try-fnally或者try-catch-fnally来进行类似关闭JDBC连接、保证unlock锁等动作。fnalize是基础...

2019-12-29 23:46:24 581

原创 Java解释执行和编译执行

首先,我们先解释一下在Java中解释执行和编译执行的区别。 解释执行:将编译好的字节码一行一行地翻译为机器码执行。编译执行:以方法为单位,将字节码一次性翻译为机器码后执行。    在编译示时期,我们通过将源代码编译成.class ,配合JVM这种跨平台的抽象,屏蔽了底层计算机操作系统和硬件的区别,实现了“一次编译,到处运行” 。 而在运行时期,目前主流的JVM 都是混合模式(-X...

2019-12-28 22:09:21 179

原创 Exception和Error 区别

Exception和Error都是继承了Throwable类,在Java中只有Throwable类型的实例才可以被抛出(throw)或者捕获(catch),它是异常处理机制的基本组成类型。 Exception和Error体现了Java平台设计者对不同异常情况的分类。Exception是程序正常运行中,可以预料的意外情况,可能并且应该被捕获,进行相应处理。 Error是指在正常情况下,不大可...

2019-12-28 22:09:07 123

原创 redis 缓存优化

一. 缓存穿透常见的解决方案有两个1.数据库不存在的值,在缓存存进一个空值,并添加过期时间。这样的缺点就是会浪费比较多的空间。2.用布隆过滤器,在访问缓存层和存储层之前,将存在的key用布隆过滤 器提前保存起来,做第一层拦截。如果布隆过滤器判断该key不存在,就不会访问持久层,从而保护了持久层。二. 热点key重建优化1.设置分布式锁2.不设置过期时间三...

2019-12-20 10:43:59 112

原创 mysql 学习笔记

一.检索数据1. DISTINCT检索不同的行 SELECTDISTINCTXX FROM XX 使用DISTINCT关键字,只返回不同的值2.LIMIT限制结果 SELECT XX FROM XX LIMIT 5 此语句使用SELECT语句检索单个列。LIMIT 5指示MySQL返回不多于5行SELECT XX FROM XX...

2019-12-19 23:14:08 64

原创 单线程的redis如何实现阻塞队列

从redis的API可以了解到lpop,rpop可以实现一个阻塞式队列。那疑问就来了,redis不是单线程的吗,如果阻塞了,那其他操作就执行不了呀。事实不是这样的redis的线程模型,是接收客户端命令的线程时 I/O 多路复用的,再通过文件事件分配器单线程执行的。如下图,程序总是会将所有产生事件的套接字都入队到一个队列里面, 然后通过这个队列, 以有序(sequentially)、同步(...

2019-12-16 12:02:48 1390

原创 单线程的redis为什么还能那么快

通常来讲,单线程处理能力要比多线程差,例如有10000斤货物,每辆 车的运载能力是每次200斤,那么要50次才能完成,但是如果有50辆车,只 要安排合理,只需要一次就可以完成任务。那么为什么Redis使用单线程模 型会达到每秒万级别的处理能力呢?可以将其归结为三点: 第一,纯内存访问,Redis将所有数据放在内存中,内存的响应时长大 约为100纳秒,这是Redis达到每秒万级别访问的重要基础。...

2019-12-14 11:47:50 119

原创 redis简单限流

需求: 如果要保证一个用户一分钟内只能访问5次接口,超过就拒绝范围。学习老钱的简单限流,这边重复阐述一下,以便更多人能借鉴。这个限流需求中存在一个滑动时间窗口,想想 zset 数据结构的 score 值,是不是可以通过 score 来圈出这个时间窗口来。而且我们只需要保留这个时间窗口,窗口之外的数据都可以砍掉。那这个 zset 的 value 填什么比较合适呢?它只需...

2019-12-12 14:50:46 239

原创 mongodb连接出现 connect@src/mongo/shell/mongo.js:229:14 @(connect):1:6 错误

当我们在cmd窗口输入 mongo时会发现连接失败这时候可能是我们没有启动 Mongodb 的服务,那我们就来启动Mongodb服务第一步:管理员的权限打开CMD第二步:切到mongodb目录下,输入net start MongoDB 命令这样就启动成功了但是有的同学这里会出现服务名无效。那我们需要配置一些东西第一步:建数据库路径(da...

2019-10-08 15:57:37 8028

原创 RabbitMQ 实现分布式事务 通俗理解 简单易学(思想)

一. 什么是分布式事务有两个服务,一个订单服务,一个商品服务。当我们下单成功后,订单服务会调用商品服务的扣库存方法,如果这时候商品服务出现异常,扣库存失败,那就会导致事务的问题,以后有可能出现超卖。所以我们在微服务架构开发的时候,一定要处理好分布式事务二. 分布式事务理论比较流行的就是BASE,CAP定理CAP理论:是由加州大学伯克利分校Eric Brewer教授提出来的,他指...

2019-08-18 11:15:58 1124 3

原创 SpringCloud学习笔记 -----Hystrix 服务降级、熔断机制、服务隔离

一.什么是服务雪崩效应服务雪崩效应产生与服务堆积在同一个线程池中,因为所有的请求都是同一个线程池进行处理,这时候如果在高并发情况下,所有的请求全部访问同一个接口,这时候可能会导致其他服务没有线程进行接受请求,这就是服务雪崩效应效应。二.怎么解决雪崩效应?解决雪崩的方案就是 服务降级+服务熔断,服务隔离,服务限流服务降级在高并发情况下,防止用户一直等待,使用服务降级方式(直接返...

2019-08-16 19:05:03 800

原创 kafka详解

kafka为什么吞吐量大?1.数据读取方式kafka一个topic分成多个分区,每个消费者对应一个或者多个分区,一个分区只对应一个消费者。这样就保证了线程安全性,不用设锁去防止多个消费者同事消费同一个数据源,我们都知道锁是很耗性能的一个东西,这样就省去了这个步骤,性能也有显著的提升。2.顺序写入kafka的顺序读写也是一个提高吞吐量的地方,Kafka的message是不断追加到本地...

2019-08-11 00:00:56 156

空空如也

空空如也

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

TA关注的人

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