自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(45)
  • 资源 (3)
  • 问答 (8)
  • 收藏
  • 关注

原创 VMware下的虚拟机网络设置(NAT、桥接、仅主机)

对于三种方式可以用一下的例子做个最后的总结:NAT模式:公司的员工连接公司的WIFI,然后通过公用的一个外网IP地址进行上网。桥接模式:他跟主机在一个网段,有自己的独立ip,相当于单独一台主机,跟主机处于同一级别,相当于同一层楼两家公司的其中一家。仅主机模式:这个就像公司的外网断掉,公司的员工通过局域网的方式,相互之间通信、资源访问。但是就是不能访问外网。

2023-01-10 17:29:21 9764 3

原创 在安装Centos时如何选择磁盘的分区?

在这个结构图最重要的就是盘片和磁头,由一个个盘片叠起来组成,每一个盘片并不是结构图那样看起来很光滑的样子,其实是划分了很多的磁道(下图中的一圈圈灰色同心圆)。对比使用Windows的时候,系统会默认给分区成C盘、D盘、E盘等,所以当这里让我们自己选择分区的时候,就举手无措,只能每次按照默认的配置来选择,但是并不似每个默认的选择都适合自己的需求。可以看到一个磁头在盘片上进行转动,就像留声机运行时候的样子,所以在我们进行拷贝大文件的时候,会听到主机有很大的声音就是这里盘片快速转动,磁头在疯狂进行读写的操作。

2022-10-19 10:29:45 5321

原创 MySQL的三层架构(连接认证、解析优化和存储引擎)

对于数据库的认识,相信很大一部分人像我一样只停留在写各种SQL、优化各种查询语句以及索引的建立之上,只是停留在“会用”的基础上。但是如果想要充分发挥MySQL的性能,就必须要了解其作为最流行的关系型数据库背后的各种优秀设计思想和特点,只有这样才能更好的使用它。目前最普遍的认识是将MySQL分为三层,正如标题所写的连接认证,解析优化和存储引擎。每一层的作用各不相同,但是各个之间是相互协同,相互依存的关系。可以先看下图的各个组件协同工作的架构图,然后再来深入分析各层之间的作用。一、连接认证 ..

2022-03-15 11:27:33 1740 2

原创 设计模式之单例模式(指令重排,DCL)

虽然单例模式被认为是设计模式中最简单的一种模式,但是在面试的时候也是最容易被问到的知识点。单例模式属于创建型设计模式中的一类,专注于提供一种专属类自己负责创建对象的一种方式。之所以有这种方式,是因为有的场景下需要整个运行环境中只存在一个对象,例如Redis的连接、Mysql的发号器(全局生成唯一ID)以及我们常用Windows的任务管理器。实现单例模式方式也很简单,主要分为两步骤——私有化构造函数以及提供获取单例的方法。但是具体实现中又分为两类——饿汉模式和懒汉模式。两者...

2022-03-08 17:15:26 819

原创 SpringSecurity中的集群会话Session存在的问题以及解决方案(保持、复制、共享)

在初步了解Session的时候,我们就知道Session通常是保存在服务器的内存当中的。每一次客户访问都会携带SessionId,然后在服务器的内存中寻找。虽然这种方式简单快捷,但是仍存在比较明显的缺点。服务器的内存是有限的,所以留给Session的空间不多,因此一旦用户的访问量比较多时内存就会捉襟见肘。而且因为session是存在内存当中,并不是持久化存储,就算服务器性能特别好,但是也不免存在服务器的异常停止和重启,这个时候就会导致会话状态的丢失。

2021-12-21 11:48:44 3014

原创 Spring Security中的会话【Session】管理与防御以及会话的并发控制

众所周知,HTTP本身是没有任何关于当前用户状态的内容,也就是两个HTTP请求之间是没有任何的关联可言,用户在和服务器交互的过程中,站点无法确定是哪个用户访问,也因此不能对其提供相应的个性化服务。Session的诞生就是为了解决这一个难题,提供了无状态的HTTP请求实现用户状态维持的方案——服务器和用户之间约定每个HTTP请求携带一个ID信息【代表当前用户信息】 服务器通过与用户约定每个请求都携带一个id类的信息,从而让不同请求之间有了关联,而id又可以很方...

2021-12-17 10:48:54 3662 1

原创 SpringSecurity的记住登录实现过程———【RememberMeServices】分析过程

在上一篇文章《SpringSecurity的认证流程分析(各个组件之间的关联)》介绍认证的基本流程时,其中的AbstractAuthenticationProcessingFilter有这样一个属性——RememberMeService引起我的注意,虽然从字面上很容易理解这个属性是和记住登录有关。但是其中的实现过程又是如何不深入还真不清楚,所以秉着学习的态度专门了解一下Security中对这个功能的实现。 在了解之前,先要清楚为什么会需要这个类来实现?当我们在很多网站上注册...

2021-12-09 10:35:45 1368

原创 SpringSecurity的认证流程分析(各个组件之间的关联)

我一开始对于SpringSecurity也不是很熟悉,但是Security 作为一个Spring家族中的安全管理框架,而且每个项目都有授权、认证、鉴权等功能,所以很有必要对Spring Security了解清楚。在说明各个流程之前,找了一张关于它的架构,我只截取了其中关于认证这一部分的内容。由上图可以清楚的看到在Security 认证的过程涉及到的对象,以及各个对象之间的关联。对于刚入门Java Web开发的时候,Filter作为JavaWeb的三大组件之一给我们留...

2021-11-22 15:13:13 3894 2

原创 Hive的SQL执行效率优化

Hive的优化① 工作中针对数据去重,能使用group by 就不使用distinct。使用group by 会使用多个Reduce进行处理。而distinct,所有的数据会在一个reduce中进行处理。②运行设置在每次运行Hive语句时,运行最开始之前都会输出一段话:Number of reduce tasks not specified. Estimated from input data size: 1In order to change the average load for

2021-05-27 16:29:03 1634

原创 Hive中内部表、外部表、分区、分桶以及SQL的执行顺序

Hive的数据类型以及四种数据模型Hive的数据类型其实和关系型数据库的类型类似,也是包括几种类型,这里只做简单的介绍数值类型:tinyint (枚举值:0,1)、int、integer、bigint(长整型)浮点类型:float、double、decimal(涉及到金融中常用,保证了精度不丢失)时间类型:timestamp、date(字段命名的时候,如果与关键字重叠,必须使用反键号)字符串类型:string(工作常见)、varchar、char复杂类型:maps、structs、u

2021-05-27 15:01:15 632

原创 Hive入门、Hive vs SQL以及Hive的体系结构

HiveHive的本质其实就是MapReduce,是在MapReduce上的更高一层的应用,可以减少MapReduce的编写,之所以要引入Hive是因为有以下几个原因:1)对存在HDFS上的文件或HBase中的表进行查询时,是要手工写一堆MapReduce代码。2)对于统计任务,只能由懂MapReduce的程序员才能确定。3)耗时耗力,更多精力没有释放出来。因此为了解决这些问题,Hive应用而生。...

2021-05-26 10:59:27 2381

原创 Hadoop1.0 VS Hadoop 2.0 Yarn以及Yarn的容错能力

Hadoop 1.0 VS Hadoop 2.0在Hadoop1.0中有两个重要的角色JobTracker和TaskTracker,JobTracker主要负责分配工作和资源的调度,相当于一个管理者。而TaskTracker就是具体干事情的角色。而在Hadoop2.0中这两个角色都被新的三个组件所替换:ResourceManager、ApplicationManager、NodeManager。而今天的主角Yarn,其实就相当于一个分布式操作系统,主要是把Hadoop1.0中JobTracker的资

2021-05-12 11:56:54 281 1

原创 WordCount的理解与MapReduce的执行过程

WordCount的入门WordCount是最常见、最基本的一个需求,例如进行词频统计、用户访问记录统计。如果数据量非常小的情况下,使用单机、批处理的方式就可以很快得到结果。但是如果数据量非常大,数据量可能是10G、100G等等。这种情况下使用单机、批处理的方式就非常低效率。所以这个时候就需要借助于分布式的思想进行处理——使用集群进行处理。就拿词频统计来说,处理的过程步骤如下图。Input就是将需要进行处理的数据输入,输入后会经过Spliting操作,将输入的数据进行切分,将众多的数据划分成不同

2021-05-10 14:12:09 1435 2

原创 开发过程采坑记录_持续更新

UTF8编码占三个字节,而UTF8MB4占四个字节【支持表情】

2021-05-07 16:43:51 70

原创 基于FastDFS的文件管理服务

文件管理是每一个部分不可缺少的一部分,特别是一些相册网站、视频网站登过,文件管理服务是非常重要的一部分。开源的分布式文件系统有很多包括HDFS、MooseFS、FastDFS等,每个分布式系统各有各自的特点,但大体上的功能包括:文件存储、文件访问、文件同步,并且有些系统会帮我们解决大容量存储和负载均衡的问题。在这繁多的分布式系统中,我只了解过HDFS和FastDFS,两者的侧重点不同,HDFS是适合存储和管理大文件,不太适合存储海量的小文件、频繁的修改文件以及大量的随机读,HDFS经常用于大数据分析领域,而

2021-04-09 15:11:25 521

原创 基于Canal实现数据库与Redis缓存中的数据同步问题

在之前文章《如何用Lua脚本基于OpenResty、Redis实现数据的缓存?》中介绍了一种简洁实现数据缓存的一种方式。但是对于数据缓存还有一个重要的事就是可能存在数据的不一致问题。就拿上篇文章中的广告来说,临时更换广告内容或者下架广告的场景下,如果不立刻更新缓存中的数据而是任由其等到失效时间过后重新获取,这就有可能造成很严重的后果。所以要在极短的时间内实现缓存与数据库中的数据相一致。这里又介绍一种有局限性的解决方案——基于Canal。所谓的局限性就是因为Canal本身只是针对于Mysql,所以也只能实现M

2021-04-08 18:20:27 651

原创 如何用Lua脚本基于OpenResty、Redis实现数据的缓存?

也许有人对于OpenResty不太熟悉,但是一说到Nginx,可能都有所了解。作为控制速率和并发量控制的Nginx被很多公司所采用,而OpenResty就是在Nginx的基础上升级的,提供了Lua扩展,大大提升了Nignx对并发的处理能力,可以达到10K~1000K。OpenResty其实和Tengine一样,都是基于Nginx的衍生版本,融入了各自一些业务的新特性。这里用一个例子来说明使用Lua脚本,通过OpenResty和Redis实现业务数据的缓存。一般商城系统都会包括各种各样的广告,对于首页的广

2021-04-08 15:40:11 483

原创 Scala面向对象

所有面向对象的语言,包括了三大特性: 封装:属性、方法都会被封装到类中 继承:父类和子类之间的关系【User extends Person】 多态:父类引用子类对象,这一特性是开发框架的基石所在。构造器在Scala中的构造器分为两种:主构造器、辅助构造器两种。主构造器主构造器是直接跟在Class后面的,与Java的构造器方式是不同的。基本语法如下:object DemoObject { def main(args: Array[Stri...

2021-03-05 13:45:37 107 1

原创 Scala方法与函数

Scala中有方法和函数两种,两者区别很小。Scala方法是类的一部分,而函数是一个对象可以赋值给一个变量。Scala中的函数则是一个完整的对象,Scala中的函数其实就是继承了Trait的类的对象。在Scala中使用val 语句可以定义一个函数,def语句定义方法。class FunctionMethodDemo { // 方法 def method(x: Int, y: Int) = x + y // 函数 val func = (x: Int, y: Int) => x +

2021-03-05 10:18:09 445 1

原创 为什么要用MapReduce以及MapReduce的切片

MapReduce的由来举一个熟悉的例子——WordCount,统计每个单词出现的次数。逻辑也非常简单——将文件中的每一行数据读取出来按照一定规则进行分割,然后把它放到一个HashMap里面,如果存在则value值+1,不存在则put进去并且value为1。实现逻辑很简单,但是数据量一大的话,单机版的实现就不太现实,因为有以下几个问题:1)文件的存储。单机的存储是有限的,而文件的大小可能是无上限的增长,例如日志文件,即使你按照每天输出,但是总的日志文件大小依然在持续增长,大小可能由2T到10T等

2021-02-05 15:43:09 679

原创 HDFS2.0的新特性——联邦机制、HA高可用以及高可用的实现方式

联邦当说起联邦,很容易想起例如美国这样的国家,由州组成了一个联合统一的国家,每个州都有各自的宪法和法律,自己行使自己的权利。我们这里的联邦也是类似这种,有了这种机制HDFS集群中可以使用多个独立的NameNode来进行管理以满足HDFS命名空间的水平扩展,这些NameNode分别管理一部分数据,且共享所有的DataNode的存储资源。通俗的讲就是,一个NameNode管理文件系统命名空间的一部分。例如NameNode1管理/usr目录下的所有文件,NameNode2管理/share目录下的所有文件。

2021-01-26 11:09:48 868 3

原创 HDFS的读写流程

概念入门机架分布式的集群通常包括非常多的机器,通常大型的分布式集群都会跨好几个机架,由多个机架上的机器共同组成一个分布式集群。机架感知所谓机架感知,就是Hadoop用来确定两个结点是否位于同一个机架上。默认情况下,Hadoop的机架感知是没有被启用的。而且,Hadoop的机架感知并非真正智能感知,而是需要人为去告知Hadoop哪台机器属于哪个机架,这样在Hadoop的NameNode启动初始化时,会将这些机器与机架的对应信息保存在内存中,作为写块操作时分配DataNode列表时选择DataNod

2021-01-25 14:08:30 139

原创 HDFS中Fsimage的更新过程

在说Fsimage的更新操作之前,先了解一下为什么要进行Fsimage的更新?HDFS是以主从模式运行,其中的主就是我们的要讲的重点——NameNode。NameNode主要是管理文件系统的命名空间,它维护着文件系统树以及整棵树内所有的文件和目录。这些信息以两个文件形式永久的保存在本地磁盘上——命令空间镜像文件Fsimage、编辑日志文件edits。这两个文件是NameNode节点的核心文件。当NameNode启动时会首先读取Fsimage文件,并将目录树信息装载到内存中。而edits存储的是日志信息,

2021-01-21 13:42:59 761

原创 初识Hadoop

按照官网的介绍,Hadoop能在计算机集群上使用简单的计算模型来分布式处理大量的数据集。可以看出Hadoop是一个适合大数据的分布式存储和计算的平台。是公认的一套行业大数据标准开源软件,在分布式环境下提供了海量数据的处理能力。具有高容错、高可靠性、高扩展性等特点。特别适合写一次,多次读的场景。

2020-12-31 10:09:30 99

原创 消息队列那些事——MQ的选择

在说如何选择消息队列之前?首先要明白一个问题,那就是为什么要使用消息队列?可不可以将消息队列用其他的技术代替? 为什么使用消息队列? 对于为什么使用消息队列可以从三个方面来看,也就是从消息队列的三个核心特点来看:解耦、削峰、异步。解耦对于耦合性,可以先来看这么一例子:现在有A、B、C、D四个系统,其中A系统要分别向BCD三个系统发送消息,进行相应的操作。刚一开始这样的场景是O...

2020-04-10 16:21:27 1204 2

原创 G1杂谈

在之前的文章中提到了四种垃圾回收器:SerialGC、ParallelGC、CMS和G1。对于这四种垃圾回收器垃圾在新生代和老年代在不足时触发的垃圾回收却有所不同。SerialGC新生代内存不足发生的垃圾回收:Minor GC。老年代内存不足发生的垃圾回收:Full GC。ParallelGC新生代内存不足发生的垃圾回收:Minor GC。老年代内存不足发生的垃圾回...

2020-03-25 22:04:29 104

原创 Garbage First——G1垃圾回收器

Garbage First俗称G1,2004年被提出,2006年JDK6体验,2012年JDK7.0官方支持,再到2017年JDK9默认的垃圾回收器。在JDK9中废弃了CMS垃圾回收器,从而说明G1取代了CMS垃圾回收器。G1同时注重吞吐量和低延迟,也属于并发的垃圾回收器。G1也适合超大堆内存,将堆内存划分为多个大小相等的Region,每个区域都是1、2、4、8M的大小,每个区域都可以独立的作...

2020-03-24 22:35:19 301

原创 垃圾回收器

垃圾回收器可以分为三类:串行的垃圾回收器、吞吐量优先的垃圾回收器和响应时间优先的垃圾回收器。串行的垃圾回收器,底层是一个单线程的垃圾回收器,也就是说在进行垃圾回收时,其他的线程会暂停。使用场景是堆内存较小的时候,适合个人电脑(CPU个数少)。而吞吐量优先的垃圾回收器和响应时间优先的垃圾回收器,则是一个多线程的垃圾回收器,适合堆内存较大,需要多核CPU来支持。显然多核CPU都是服务器,即多用在服...

2020-03-23 22:49:52 160

原创 垃圾回收案例——GC分析

GC 分析首先运行一段空的代码,并设置虚拟机参数:“-Xms20M -Xmx20M -Xmn10M -XX:+UseSerialGC -XX:+PrintGCDetails -verbose:gc” 。public class Demo { private static final int _512KB = 512*1024; private static final...

2020-03-18 22:08:28 580

原创 垃圾回收——分代回收

分代垃圾回收在《垃圾回收算法》中介绍了三种垃圾回收算法,但实际的JVM虚拟机它不会单独采用某一种算法,它结合前面的三种算法协同工作,具体的实现就是虚拟机中称之为分代的垃圾回收机制,它把我们的堆内存整个区域划分了两块,一个叫新生代,一个叫老年代。新生代又进一步划分为伊甸园、幸存区From和幸存区To。为什么要做这样的一个区域划分?主要是因为在Java中有的对象是需要长时间使用,长时间使用的对...

2020-03-17 21:50:27 301

原创 垃圾回收算法

在上一篇文章《Java知识学习——垃圾回收》中写到了如何判断一个对象是否可以被回收,但是具体的回收还是要依赖回收方面的算法。常见的有三种:标记清除、标记整理和复制。标记清除算法分为两个阶段。第一阶段先标记,看看哪些对象可以是垃圾,第二步就是清除操作,所谓的清除就是把这个垃圾对象所占用的空间给它释放,释放并不是将整个内存每个字节进行清零操作,它只需要把对象占用内存起始结束地址记录下来,放入一个空...

2020-03-17 00:01:22 72

原创 Spring中的IOC和DI

IOC与DIIOC(Inversion of Control)——控制反转。即将设计的对象交给容器管理,而不是由我们手动在对象里面控制。通俗的说就是,在一个XML配置文件中,配置对象的名字、属性等内容,然后通过程序由容器自己创建。对于IOC其实并不是一门技术,而是一种思想,将各种统一管理,其实现的基本依靠就是反射。IOC的核心代码DI(Dependency Injection)——依...

2020-03-06 17:57:10 240

原创 Java知识学习——垃圾回收

如何判断对象是否可以回收?判断对象是否可以回收,有两种方法:引用计数法和可达性分析算法。引用计数法,是指只要一个对象被其他对象引用,就让这个对象的计数加一,如果引用了两次就让这个计数加二,如果某一个变量不在引用它,就让其计数减一,当计数变为0的时候,就说明没有再被引用,就可以作为垃圾被回收。但是引用计数法存在了一个重要的弊端,也就是循环引用的问题,现有两个对象A和B,对象A在引用B,B的计...

2020-03-03 00:42:13 110

原创 Java知识学习——直接内存

对于直接内存,前面在说JVM内存结构的时候,并没有一个区域叫做直接内存,都是方法区、堆和栈。直接内存并不是属于JVM的内存管理,而是属于系统的内存管理,即直接内存是操作系统的内存。对于直接内存定义如下:常见于NIO操作时,用于数据缓冲区 分配回收成本较高,但读写性能高 不受JVM内存回收管理在NIO有一个经常用的类——ByteBuffer,就是直接使用的直接内存,通过ByteBuffer...

2020-02-27 23:54:13 347

原创 Java知识学习——方法区(三)

StringTable在上一篇文章中我们了解了StringTable,也很清楚地了解StringTable具有下面的几大特性:常量池中的字符串仅是符号,第一次用到时才变为对象。 利用串池的机制,来避免重复创建字符串对象。 字符串变量拼接的原理是StringBuilder(1.8)。 字符串常量拼接的原理是编译期间的优化。除此之外,StringTable还具有可以使用intern方法...

2020-02-24 22:46:02 105

原创 Java知识学习——方法区(二)

运行时常量池一个二进制字节码文件包括了三个部分:类的基本信息、常量池、类方法定义(包括了虚拟机指令)。如果想查看一个类的二进制字节码的信息,可以使用Javap -v 字节码文件 来查看相应的信息。下面就是一个简单的Helloword的Java Demo对应的二进制字节码信息。Classfile /F:/JavaProject/day_12/src/_01Calender/SayHello...

2020-02-23 23:35:37 83

原创 Java知识学习——方法区(一)

什么是方法区?前面了解了JVM内存结构中的程序计数器、虚拟机栈、本地方法栈和堆之后,还有最后一个内存结构——方法区。方法区从名字上看与我们类的方法有关,确实如此,但是还不是很完整的概括,对于方法区的定义各有千秋,但在JVM规范中是这样定义的。从其定义,首先可以得到,方法区是所有线程共享的区域。其次,在方法区中存放了跟类结构的相关信息(运行时常量池),包括成员变量、方法数据,成员方法...

2020-02-23 22:00:11 182

原创 Java知识学习——堆

前面所了解的程序计数器、虚拟机栈、本地方法栈都有一个共同的特点,那就是线程私有的。而今天了解的堆和本地方法区都是线程共享的区域。堆(Heap),通过new关键字,创建的对象都会放在堆内存中,有两大特点:线程共享,所以堆中的对象都需要考虑线程安全问题,之前说的虚拟机栈中的局部变量都是线程私有的,只要局部变量不逃出方法的作用范围,它就是线程安全的。但是堆则是不一样的,堆中的对象都需要考虑线程安全的...

2020-02-20 22:26:51 130

原创 Django服务器的部署(Nginx+uwsgi +Ubuntu)

概述在本地开发好自己的一个Django项目之后,然后将其部署到服务器上面以便更多的人访问。前期准备部署网站,需要服务器和域名。两者缺一不可,我使用的阿里云的ECS云服务器,也是在阿里云上购买的域名。对于域名,如果没有特别用处的地方,可以自己根据自己的想法购买,名字之类的都可以,域名的后缀常见的是.com(公司),.org(组织),.gov(政府),.edu(教育),如果是作为自己的博客...

2020-02-20 21:08:04 255

原创 Java知识学习——虚拟机栈与本地方法栈

虚拟机栈,顾名思义,与我们熟知的数据结构——栈一样。虚拟机栈就是线程运行时所需要的空间,每一个栈内又是以多个栈帧所构成,什么是栈帧?一个栈帧对应了一次方法的调用,即每个方法运行时所需要的内存就是栈帧,方法运行时方法参数、局部变量、返回地址这些都需要占用空间的。栈和栈帧是怎么联系的呢?例如一段代码在执行的时候调用第一个方法,就会给第一个方法分配一个空间并压入栈中,当第一个方法执行完成之后,就会把这个...

2020-02-19 23:40:36 279

豆瓣高分图书Top100.zip

基于Requests、Lxml和Fake_userAgent实现豆瓣图书TOP100的书籍爬取。附件含fake_useragent对应Json文件,拷贝本地临时文件夹即可使用。

2021-09-15

Python Django小学英语在线刷题网站.zip

基于LayUI+BootStrap的学生考试系统,功能包括:班级管理、学生管理、试卷管理、题库管理等。

2021-01-20

C#版学生信息管理系统

在c#中用oracle数据库来建立一个学生学籍管理系统

2016-09-29

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

TA关注的人

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