自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Hexo框架学习——从安装到配置

自定义配置文件的路径,指定这个参数后将不再使用默认的。还接受一个以逗号分隔的 JSON 或 YAML 配置文件列表(无空格),该列表将把这些文件合并为一个文件。自定义当前工作目录(Current working directory)的路径。Hexo 服务器默认运行在0.0.0.0。您可以覆盖默认的 IP 设置。您可以在配置中调整网站的永久链接或者在每篇文章的 Front-matter 中指定。

2024-09-11 18:25:11 1518

原创 《C++语言的设计和演化》读书感悟(一)

写了一百多篇技术文章了,我突然想写一下和技术文搭一点关系的语言发展设计的文章,《C++语言的设计和演化》是我无聊翻自己库存电子书找到了,因为当年看这本书是C++之父写的,所以就保存下来,但是当时主要学习C++,这本书更多是C++之父从本身出发,对C++设计和演化的观点和感想,所以当时就被我扔去吃灰了。现在重拾起来,读起来别有风味。开发语言,虽然很多,但是万变不离其宗,学进去了,无非就是数据类型、控制流程等。所以《C++语言的设计和演化》这本书就给我一种站在万山之巅,向下俯瞰的感觉。

2024-08-27 21:36:33 521

原创 UnrealEngine学习(03):虚幻引擎术语

中包含游戏的所有内容。项目中包含的大量文件夹都在磁盘上,例如Blueprints和Materials。你可以按照自己的意愿命名文件夹并将其整理到项目中。中的面板显示与磁盘上的Project文件夹相同的目录结构。每个项目都有与其关联的.uproject文件。.uproject文件是创建、打开或保存项目的方法。你可以创建任意数量的不同项目,然后并行处理它们。

2024-08-27 09:00:00 976

原创 UnrealEngine学习(02):虚幻引擎编辑器界面详解

好了,以上就是UE界面的整体布局和解释。个人认为基本上懂得各个选项的含义和功能就OK了,主要还是要多做,多动手。t=N7T8UnrealEngine学习(01):安装虚幻引擎https://blog.csdn.net/zuodingquan666/article/details/141539385。

2024-08-26 14:13:17 1391

原创 UnrealEngine学习(01):安装虚幻引擎

一般来说,UE推荐的下载选项基本上可以开发一款游戏了,这里只需要注意,你对应的平台和UE目标平台对齐就好了。注释:Unreal Engine 是开源的,对源码感兴趣的朋友可以去开源网站下载进行研究。这里建议安装到磁盘空间大的地方,因为后续如果开发图像这些的时候,还需要下载额外的资源包的。安装完成后,点击进入Epic,需要创建用户,我们点击创建即可。到了这一步,才开始我们的虚幻引擎安装之路。我们点击图中步骤一即可进行下载。此时此刻,代表你的UE安装成功。

2024-08-26 10:47:28 572

原创 DataX(二):DataX安装与入门

1)将下载好的 datax.tar.gz 上传到 hadoop102 的/opt/software。2)解压 datax.tar.gz 到/opt/module。Python(推荐 Python2.6.X)JDK(1.8 以上,推荐 1.8)

2024-07-27 21:24:59 453

原创 DataX(一):DataX简介

DataX 是阿里巴巴开源的一个异构数据源离线同步工具,致力于实现包括关系型数据 库(MySQL、Oracle 等)、HDFS、Hive、ODPS、HBase、FTP 等各种异构数据源之间稳定高 效的数据同步功能。

2024-07-27 21:20:49 369

原创 JVM原理(二四):JVM虚拟机锁优化

高效并发是从JDK 5升级到JDK 6后一项重要的改进项,HotSpot虛 拟机开发团队在这个版本上花费了大量的资源去实现各种锁优化技术,如适应性自旋( Adaptive Spinning)、锁消除( Lock Elimination)、锁膨胀(Lock Coarsening)、轻量级锁(Lightweight Locking)、偏向锁( Biased Locking)等,这些技术都是为了在线程之间更高效地共享数据及解决竞争问题,从而提高程序的执行效率。

2024-07-09 21:51:01 928 1

原创 JVM原理(二三):JVM虚拟机线程安全的实现方法

互斥同步(MutualExclusion&Synchronization)是一种最常见也是最主要的并发正确性保障手段。。,临界区(Critical Section)、互斥量(Mutex)和信号量( Semaphore)都是常见的互斥实现方式。因此在“互斥同步”这四个字里面,其他名称:阻塞同步、悲观锁。面临的问题主要是进行线程阻塞和唤醒所带来的性能开销。在Java里面,最基本的互斥同步手段就是synchronized关键字,这是一种块结构(Block Structured)的同步语法。

2024-07-09 21:48:48 641

原创 JVM原理(二二):JVM虚拟机线程调度与状态转换

线程调度是指系统为线程分配处理器使用权的过程,调度主要方式有两种,分别是和。:如果使用协同式调度的多线程系统,线程的执行时间由线程本身来控制,线程把自己的工作执行完了之后,要主动通知系统切换到另外一个线程上去。:实现简单,而且由于线程要把自己的事情淦完后才会进行线程切换,切换操作对线程自己是可知的,所以一般没有什么线程同步的问题。:线程执行时间不可控制,甚至如果一个线程的代码编写有问题,一直不告知系统进行线程切换,那么程序就会一直阻塞在那里。:每个线程将由系统来分配执行时间,线程的切换不由线程本身来决定。

2024-07-08 07:54:46 364

原创 JVM原理(二一):JVM虚拟机线程的实现

线程是比进程更轻量级地调度执行单位,线程地引入,可以把一个进程地资源分配和执行调度分开,各个线程即可以共享进程资源,又可以独立调用。Thread这个特别的类所有方法都用Native声明。实现线程的三种方式:使用内核线程实现(1:1实现)使用用户线程实现(1:N实现)使用用户线程加轻量级进程混合实现(N:M实现)

2024-07-08 07:52:27 474

原创 数组算法(二):交替子数组计数

给你一个二进制数组nums。如果一个子数组中两个元素的值的情况,我们称这样的子数组为。返回数组nums中交替子数组的数量。5[0][1][1][1]以及[0,1]。10数组的每个子数组都是交替子数组。可以统计在内的子数组共有 10 个。01。

2024-07-07 08:20:34 195

原创 JVM原理(二十):JVM虚拟机内存的三特性详解

先行发生是Java内存模型中定义的两项操作之间的偏序关系,比如说操作A先行发生于操作B,其实就是说在发生操作B之前,操作A产生的影响能被操作B观察到,“影响”包括修改了内存中共享变量的值、发送了消息、调用了方法等。:被final修饰的字段在构造器中---旦被初始化完成,并且构造器没有把“this"的引用传递出去(this引用逃逸是一件很危险的事情,其他线程有可能通过这个引用访问到“初始化了一半”的对象),那么在其他线程中就能看见final字段的值。这里必须强调的是“同一个锁”,而“后面”是指时间上的先后。

2024-07-07 08:19:37 773

原创 JVM原理(十九):JVM虚拟机内存模型

数据不安全的原因:缓存一致性的问题:在多路处理器系统中,每个处理器都有自己的高速缓存,而他们又共享同一主内存。除了增加高速缓存之外,为了使处理器内部的运算单元能尽量被充分利用,处理器可能会对输入代码进行(Out-Of-Order Execution)优化,处理器会在计算之后将乱序执行的结果重组,保证该结果与顺序执行的结果是一致的,但并不保证程序中各个语句计算的先后顺序与输入代码中的顺序一致,因此如果存在一个计算任务依赖另外一个计算任务的中间结果,那么其顺序性并不能靠代码的先后顺序来保证。

2024-07-07 06:06:21 1035

原创 数组算法(一):矩阵修改

给你一个下标从开始、大小为m x n的整数矩阵matrix,新建一个下标从开始、名为answer的矩阵。使answer与matrix相等,接着将其中每个值为-1的元素替换为所在列的元素。返回矩阵answer。上图显示了发生替换的元素(蓝色区域)。- 将单元格 [1][1] 中的值替换为列 1 中的最大值 8。- 将单元格 [0][2] 中的值替换为列 2 中的最大值 9。上图显示了发生替换的元素(蓝色区域)。

2024-07-06 08:50:29 390

原创 JVM原理(十八):JVM虚拟机的编译器优化技术

在一般应用中,完全不会逃逸的局部对象和不会逃逸出线程的对象所占的比例是很大的,如果能使用栈上分配,那大量的对象就会随着方法的结束而自动销毁了,垃圾收集子系统的压力将会下降很多。在未发生方法调用之前,内联缓存状态为空,当第一次调用发生后,缓存记录下方法接收者的版本信息,并且每次进行方法调用时都比较接收者的版本。线程同步本身是一个相对耗时的过程,如果逃逸分析能够确定一个变量不会逃逸出线程,无法被其他线程访问,那么这个变量的读写肯定就不会有竞争,对这个变量实施的同步措施也就可以安全地消除掉。

2024-07-06 07:49:12 685

原创 JVM原理(十七):JVM虚拟机即时编译器详解

编译器无论在何时、在何种状态下把Class文件转换成与本地基础设施相关的二进制机器码,他都可以视为整个编译过程的后端。后端编译器编译性能的好坏、代码优化质量的高低却是衡量一款商用虛拟机优秀与否的关键指标之一。

2024-07-06 07:45:13 812

原创 JVM原理(十六):JVM虚拟机类型擦除与泛型发展

泛型的本质是或者的应用,即可以将操作的数据类型指定为方法签名中的一种特殊参数,这种参数类型能够用在类、接口和方法的创建中,分别构成泛型类、泛型接口和泛型方法。泛型让程序员能够以针对泛化的数据类型编写相同的算法,这极大地增强了编程语言的类型系统及抽象能力。

2024-07-05 07:14:49 895

原创 JVM原理(十五):JVM虚拟机静态分配与动态分配

本节讲解的分派调用过程将会揭示多态性特征的一-些最基本的体现,如“重载”和“重写”在Java虚拟机之中是如何实现的。

2024-07-05 07:04:00 710

原创 JVM原理(十四):JVM虚拟机运行时栈帧结构

由于局部变量表是建立在线程堆栈中的,属于线程私有的数据,无论读写两个连续的变量槽是否为原子操作,都不会引起数据竞争和线程安全问题。当一个方法被调用时,Java虚拟机会使用局部变量表来完成参数值到参数变量列表的传递过程,即实参到形参的传递。如果执行的是实例方法(没有被static修饰的方法),那局部变量表中第0位索引的变量槽默认是用于传递方法所属对象实例的引用,在方法中可以通过关键字“this”来访问到这个隐含的参数。

2024-07-04 07:49:53 909

原创 JVM原理(十三):JVM虚拟机类类加载器与双亲委派模型

Java虛拟机设计团队有意把类加载阶段中的“通过一个类的全限定名来获取描述该类的二进制字节流"这个动作放到Java虚拟机外部去实现,以便让应用程序自己决定如何去获取所需的类。实现这个动作的代码被称为“类加载器”(Class Loader)。对于任意一个类,都必须由加载它的类加载器和这个类本身一起共同确立其在Java虚拟机中的唯一性,每一个类加载器,都有一个独立的类名空间。

2024-07-04 07:46:05 1220

原创 JVM原理(十二):JVM虚拟机类加载过程

加载阶段与连接阶段的部分动作(如一部分字节码文件格式验证动作)是交叉进行的,加载阶段尚未完成,连接阶段可能已经开始,但这些夹在加载阶段之中进行的动作,仍然属于连接阶段的一部分,这两个阶段的开始时间仍然保持着固定的先后顺序。

2024-07-03 19:20:04 828

原创 JVM原理(十一):JVM虚拟机六种必需对类进行初始化的情况

Java虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这个过程被称作虚拟机的类加载机制。Java天生可以动态扩展的语言特性就是依赖运行期间动态加载和动态链接这个特点实现的。

2024-07-03 19:13:37 620

原创 JVM原理(十):JVM虚拟机调优分析与实战

这是笔者很久之前处理过的一个案例,但今天仍然具有代表性。一个15万PV/日左右的在线文档类型网站最近更换了硬件系统,服务器的硬件为四路志强处理器、16GB物理内存,操作系统为64位CentOS5.4,Resin作为Web服务器。整个服务器暂时没有部署别的应用,所有硬件资源都可以提供给这访问量并不算太大的文档网站使用。软件版本选用的是64位的JDK5,管理员启用了一个虛拟机实例,使用-Xmx和-Xms参数将Java堆大小固定在12GB。

2024-07-02 06:45:03 931

原创 JVM原理(九):JVM虚拟机工具之可视化故障处理工具

JHSDB是一款基于服务性代理实现的进程外调试工具。服务性代理是HotSpot虚拟机中一组用于映射Java虚拟机运行信息的、主要基于Java语言实现的API集合。

2024-07-02 06:40:46 370

原创 JVM原理(八):JVM虚拟机工具之基础故障工具

jstack命令用于生成虚拟机当前时刻的线程快照。线程快照就是当前虚拟机内每一条线程正在执行的方法堆栈的集合,生成线程快照的目的通常是定位线程出现长时间停顿的原因,如线程间死锁、死循环、请求外部资源导致的长时间挂起等,都是导致线程长时间停顿的常见原因。线程出现停顿时通过jstack来查看各个线程的调用堆栈,就可以获知没有响应的线程到底在后台做些什么事情,或者等待着什么资源。JD提功jhat命令与jmap搭配使用,来分析jmap生成的堆转储快照。interval 查询间隔时间。count 查询次数。

2024-07-01 07:42:09 496

原创 JVM原理(七):JVM虚拟机的内存分配与回收策略

Java技术体系的自动内存管理,最根本的目标是自动化解决两个问题:自动给对象分配内存和 自动回收分配给对象的内存

2024-07-01 07:36:50 1024

原创 C++操作系列(二):VSCode安装和配置C++开发环境

上一步我们安装的 C/C++ Extension Pack 插件已经包含了CMake和CMake Tools,所以这一步我们直接跳过。首先我们创建一个文件夹,用来存放VSCode的C++配置信息(后续代码也会存放在这个文件夹中,所以记住创建文件夹的路径)运行代码,显示如下表示你的VSCode配置好了C++的环境。名字一般就叫做.vscode。扩展搜索想要的插件安装即可。

2024-06-30 18:02:54 568

原创 C++操作系列(一):MinGW环境安装与配置(无报错版)

本文选择MinGW作为安装对象。

2024-06-30 16:57:39 214

原创 JVM原理(六):JVM虚拟机未来最具发展力的两款垃圾收集器

衡量垃圾收集器的三项最重要的指标:内存占用、吞吐量、延迟。目前处于实验状态的垃圾收集器:Shenandoah、ZGC可以在任意可管理的对容量下,实现停顿不超过十毫秒这种天方夜谭的话。背景故事:RedHat开发的,被排挤。目标:实现一种能在任何堆内存大小下都可以吧垃圾收集的停顿时间限制在十毫秒以内的垃圾收集器。结构:Shenandoah的结构和G1的结构基本相同。但有三个不同之处:支持与用户线程一起并发的整理算法。默认不使用分代。用“链接矩阵”的全局数据结构替代记忆表来记录跨Region的引用关系,降低伪共享

2024-06-30 12:00:00 914

原创 JVM原理(五):JVM发展至今的七款垃圾收集器

上图展示了七种作用于不同分代的收集器,。图中收集器所在的区域,则表示它是属于。

2024-06-30 09:00:00 856

原创 JVM原理(四):JVM垃圾收集算法与分代收集理论

从如何判定消亡的角度出发,垃圾收集算法可以划分为“引用计数式垃圾收集”和“追踪式垃圾收集”两大类。本文主要介绍的是。

2024-06-29 10:42:06 692

原创 JVM原理(三):JVM对象回收判定机制与回收算法

finalize方法是对象逃脱死亡命运的最后一次机会,如果这时候该对象和GC Root上的引用链连接上了,那么就可以逃脱被回收的命运,不然就会被回收。通过“GC Roots”的跟对象作为起始节点集,从这些结点开始,根据应用关系向下搜索,搜索过程中走过的路径叫做引用链,如果某个对象(或某个对象链)不在引用链上,会被标记为可回收对象(关于是否可以真正回收可以查看3.2.4)。这是一种判断方式,相应的方法就是:如果一个对象被引用,那将被引用的对象中的一个计数器加一,引用失效就减一。

2024-06-29 08:13:42 949 1

原创 JVM原理(二):JVM之HotSpot虚拟机中对象的创建寻位与定位整体流程

遇到new指令时当Java虚拟机遇到一个字节码new指令时。首先会去,并且检查这个符号引用代表的类是否被加载、解析和初始化过。如果没有,那么必须执行类的加载过程(加载、检查、准备、解析、初始化)类加载后?类加载检查通过后,接下来虚拟机会为新生对象分配内存。。如果Java堆中内存是绝对规整的,那么只需一个指针作为分界点的指示器,对象需要多少内存,就移出多少内存。我们称这种方式为。

2024-06-28 19:32:33 764

原创 JVM原理(一):JVM运行时数据区域的分析

程序计数器是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器。在Java虛拟机的概念模型里,字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,它是程序等基础功能都需要依赖这个计数器来完成。

2024-06-28 19:29:43 742

原创 Hive基础知识(二十四):Hive Job 优化

当 input 的文件都很大,任务逻辑复杂,map 执行非常慢的时候,可以考虑增加 Map 数,来使得每个 map 处理的数据量减少,从而提高任务的执行效率。增加 map 的方法为:根据公式, 调整 maxSize 最大值。让 maxSize 最大值低于 blocksize 就可以增加 map 的个数。案例实操:1)执行查询2)设置最大切片值为 100 个字节。

2024-06-27 21:49:57 572

原创 Hive基础知识(二十三):数据倾斜优化

都很快完成,, 这样的现象为数据倾斜现象。一定要和数据过量导致的现象区分开,数据过量的表现为所有任务都执行的很慢,这个 时候只有提高执行资源才可以优化 HQL 的执行效率。综合来看,导致数据倾斜的原因在于按照 Key 分组以后,,也就是说产生数据倾斜的 HQL 中一定存在分组操作,那么从 HQL 的角度,我们可 以将数据倾斜分为。

2024-06-27 21:44:25 439 1

原创 Hive基础知识(二二):优化篇-Hadoop数据底座下的优化

1)通常情况下,作业会通过 input 的目录产生一个或者多个 map 任务。主要的决定因素有:input 的文件总个数,input 的文件大小,集群设置的文件块大小。2)是不是 map 数越多越好?答案是否定的。如果一个任务有很多小文件(远远小于块大小 128m),则每个小文件 也会被当做一个块,用一个 map 任务来完成,而一个 map 任务启动和初始化的时间远远大 于逻辑处理的时间,就会造成很大的资源浪费。而且,同时可执行的 map 数是受限的。

2024-06-26 22:05:11 848

原创 Hive基础知识(二一):优化篇-执行计划与Fetch抓取

1)基本语法2)案例实操(1)查看下面这条语句的执行计划没有生成 MR 任务的有生成 MR 任务的(2)查看详细执行计划(多加一个extends)

2024-06-26 22:00:51 269

原创 Hive基础知识(二十):Hive 文件存储形式与文件压缩对比

存储文件的查询速度测试:

2024-06-25 18:23:27 1225

空空如也

空空如也

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

TA关注的人

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