- 博客(370)
- 问答 (3)
- 收藏
- 关注
原创 02C#基本结构篇(D3_内部类-代码块-数据类型-变量-常量-字面量-运算符-流程控制语句)
/ 可以访问外部类的私有成员// 方法体,包含多条语句的代码块方法调用时,虽然不直接涉及代码块,但方法的执行实际上是在其内部定义的代码块中进行的。MyMethod();// 调用方法,执行其内部代码块中的代码。在C#中,变量的作用域由其声明的地方决定。{ // 开始一个新的作用域或代码块int x = 10;// x在这个代码块内可见和可用。// 输出 x 的值。} // x 在这个作用域外不再可见。尝试访问 x 会导致编译错误。
2025-03-11 08:17:23
1011
4
原创 02C#基本结构篇(D4_注释-访问修饰符-标识符-关键字-运算符-流程控制语句)
访问修饰符] [返回类型] 方法名([参数列表])// 方法体访问修饰符:如publicprivateprotectedinternal等,控制方法的访问权限。返回类型:方法返回的数据类型,如果是void则表示不返回任何值。方法名:标识符,遵循C#的命名规则。参数列表:括号内包含一个或多个参数,每个参数由类型和名称组成,参数间用逗号分隔。方法体:包含执行任务的代码块。从C# 6.0开始,可以使用表达式体来定义简单的只返回一个表达式结果的方法。// 相当于 { return a * b;
2025-03-10 01:31:54
788
原创 02C#基本结构篇(D2_命名空间 - 类 - 抽象类 - 接口 - 继承 - 多态性)
命名空间(Namespace)在于提供一种清晰、高效的方式,将一组名称与其他名称进行分隔,确保在不同命名空间里即便声明了相同名称的类,也不会引发冲突,恰似计算机系统里的文件夹架构,同一文件夹中严禁同名文件存在,可不同文件夹下的文件即便重名也相安无事。命名空间的定义是以关键字namespace// 代码声明fc.func();sc.func();在C#中,你同样需要首先定义一个命名空间,并在其中声明你的类。// 类的成员函数实现通过合理使用using。
2025-03-09 00:59:14
1120
1
原创 02C#基本结构篇(D1_基本语法)
C# 是一种面向对象的编程语言。在面向对象的程序设计方法中,程序由各种相互交互的对象组成。相同种类的对象通常具有相同的类型,或者说,是在相同的 class 中。例如,以 Rectangle(矩形)对象为例。它具有 length 和 width 属性。根据设计,它可能需要接受这些属性值、计算面积和显示细节。实例// 成员变量Width: 3.5。
2025-03-09 00:56:59
907
原创 05类加载机制篇(D7_类加载及执行子系统的案例与实战)
代码编译的结果从本地机器码转变为字节码,是存储格式发展的一小步,却是编程语言发展的一 大步。
2025-03-04 23:47:55
1095
3
原创 05类加载机制篇(D6_方法调用和方法执行)
1、Class文件的编译过程中不包含传统编译中的连接步骤,所有方法调用中的目标方法在Class文件里 面都是一个常量池中的符号引用,而不是方法在实际运行时内存布局中的入口地址。2、在类加载的解析阶段,会将其中的一部分符号引用转化为直接引用,这类方法(编译期可知,运行 期不可变)的调用称为解析(Resolution)。主要包括静态方法和私有方法两大类,前者与类型直接关联,后者在外部不可被访问,这两种方法各自 的。
2025-03-04 23:36:55
944
原创 05类加载机制篇(D5_虚拟机字节码执行引擎)
代码编译的结果从本地机器码转变为字节码,是存储格式发展的一小步,却是编程语言发展的一 大步。执行引擎是Java虚拟机核心的组成部分之一。“虚拟机”是一个相对于“物理机”的概念,这两种机 器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理器、缓存、指令集和操作系统层 面上的,而虚拟机的执行引擎则是由软件自行实现的,因此可以不受物理条件制约地定制指令集与执 行引擎的结构体系,能够执行那些不被硬件直接支持的指令集格式。
2025-03-04 00:59:30
961
原创 05类加载机制篇(D4_虚拟机类加载机制)
什么时候开始加载,虚拟机规范并没有强制性的约束,对于其它大部分阶段究竟何时开始虚拟机规范也都没有进行规范,这些都是交由虚拟机的具体实现来把握。所以不同的虚拟机它们开始的时机可能是不 同的。但是对于初始化却严格的规定了有且只有四种情况必须先对类进行“初始化”(加载,验证,准 备自然遇到 new 、 getstatic 、 putstatic 和 invokestatic 这四条指令时,如果对应的类没有初始 化,则要对对应的类先进行初始化。
2025-03-04 00:46:47
1156
原创 05类加载机制篇(D3_深入理解Class)
JVM会将某个Java 类中所有使用到了的类的完全限定名 以二进制形式的完全限定名 封装成CONSTANT_Class_info结构体中,然后将其放置到常量池里。CONSTANT_Class_info 的 tag 值为 7。其结构如下Tips:类的完全限定名和二进制形式的完全限定名在某个Java源码中,我们会使用很多个类,比如我们定义了一个 ClassTest的类,并把它放到。
2025-03-02 00:21:30
873
原创 05类加载机制篇(D2_字节码指令(二))
类型转换:i2l,i2f,i2d,l2f,l2d,f2d(放宽数值转换) i2b,i2c,i2s,l2i,f2i,f2l,d2i,d2l,d2f(缩窄数值转换)有条件转移:ifeq,iflt,ifle,ifne,ifgt,ifge,ifnull,ifnonnull,if_icmpeq,if_icmpene,操作数栈管理:pop,pop2,dup,dup2,dup_xl,dup2_xl,dup_x2,dup2_x2,swap。astore_1 将引用类型或returnAddress类型值存入局部变量1。
2025-03-02 00:20:41
1027
原创 05类加载机制篇(D2_字节码指令(一))
Java字节码对于虚拟机,就好像汇编语言对于计算机,属于基本执行指令。Java虚拟机的指令由一个字节长度的、代表着某种特定操作含义的数字(称为操作码,Opcode)以及跟随其后的零至多个代表此操作所需参数(称为操作数,Operands) 而构成。由于Java 虚拟机采用面向操作数栈而不是寄存器的结构,所以大多数的指令都不包含操作数,只有一个操作码。由于限制了 Java虚拟机操作码的长度为一个字节(即0~255),这意味着指令集的操作码总数不可能超过256条。
2025-03-01 00:59:44
839
原创 05类加载机制篇(D1_类文件结构)
代码编译的结果从本地机器码转变为字节码,是存储格式发展的一小步,却是编程语言发展的一大步。我们知道:“计算机只认识0和1,所以我们写的程序需要被编译器翻译成由0和1构成的二进制格式才能被计算机执行。”由于最近十年内虚拟机以及大量建立在虚拟机之上的程序语言如雨后春笋般出现并蓬勃发展, 把我们编写的程序编译成二进制本地机器码(Native Code)已不再是唯一的选择,越来越多的程序语 言选择了与操作系统和机器指令集无关的、平台中立的格式作为程序编译后的存储格式。
2025-03-01 00:58:01
1125
原创 06排序 + 查找(D1_排序(D1_基础学习))
所谓排序,就是整理表中的数据元素,使之按元素的关键字递增/递减的顺序排列。排序(Bubble Sort)是一种简单的排序算法,它的基本思想是通过不断交换相邻两个元素的位置,使得较大的元素逐渐往后移动,直到最后一个元素为止。冒泡排序的时间复杂度为 O(n^2),空间复杂度为 O(1),是一种稳定的排序算法。从序列的第一个元素开始,对相邻的两个元素进行比较,如果它们的顺序错误就交换它们的位置,即将较大的元素往后移动,直到遍历到序列的最后一个元素。对剩下的元素重复上述步骤,直到整个序列都已经有序。
2025-02-23 12:51:56
1299
2
原创 04性能监控与调优篇(D6_调优案例分析与实战)
XX:MetaspaceSize: 指定元空间触发Fullgc的初始阈值(元空间无固定初始大小), 以字节为单位,默认是21M,达到该值就会触发。2.5)Survivor 0/Survivor 1(S0和S1区):括号内的3.938M表示最大容量,1.188M表示 当前容量,之后的值是当。它包括老年代(图中Old区域)和新生代(图中Eden/S0/S1 三个统称新生代,2.7)Perm Gen(永久代):括号内的256.000M表示最大容量,105.250M表示当前容 量,之后的105.032M表示。
2025-02-23 12:10:44
1003
原创 04性能监控与调优篇(D2_JVM调优⼯具)
通过上⼀章讲解我们对JVM调优有了整体的认知,接下来我们对在调优过程中所使⽤的⼯具逐⼀介绍。MAT是⼀个强⼤的内存分析⼯具,可以快捷、有效地帮助我们找到内存泄露,减少内存消耗分析⼯ 具。MAT是Memory Analyzer tool的缩写,是⼀种快速,功能丰富的Java堆分析⼯具,能帮助你查找内存泄漏和减少内存消耗。很多情况下,我们需要处理测试提供的hprof⽂件,分析内存相关问题,那么MAT也绝对是不⼆之选。找到最⼤的对象,因为MAT提供显示合理的累积⼤⼩(retained size)
2025-02-23 10:31:25
950
原创 04性能监控与调优篇(D8_让Java性能提升的JIT深度剖析)
在服务端模式下是 10000 次(我们用的都是服务端,java –version查询),可通过 -XX: CompileThreshold 来设定。Ø 第 2 层:也称为 C1 编译,开启Profiling,仅执行带方法调用次数和循环回边执行次数 profiling 的 C1 编译;在 HotSpot 虚拟机中的热点探测是 JIT 优化的条件,热点探测是基于计数器的热点探测,采用这种方法的虚拟机。Ø 第 1 层:可称为 C1 编译,将字节码编译为本地代码,进行简单、可靠的优化,不开启 Profiling;
2025-02-19 00:46:33
927
1
原创 04性能监控与调优篇(D7_JVM调优实战及常量池详解)
/字符串常量池:"计算机"和"技术" 堆内存:str1引用的对象"计算机技术"//堆内存中还有个StringBuilder的对象,但是会被gc回收,StringBuilder的toString方法会new String(),这个String才是真正返回的对象引用String str2 = new StringBuilder("计算机").append("技术").toString();//没有出现"计算机技术"字面量,所以不会在常量池里生成"计算机技术"对象//true。
2025-02-19 00:45:50
1202
原创 04运维实用篇(D6_热部署)
简单说就是你程序改了,现在要重新启动服务器,嫌麻烦?不用重启,服务器会自己悄悄的把更新后的程序给重新加载一遍,这就是热部署。使用开发者工具可以为当前项目开启热部署功能使用构建项目操作对工程进行热部署自动热部署要开启自动构建项目自动热部署要开启在程序运行时自动构建项目通过修改项目中的文件,你可以发现其实并不是所有的文件修改都会激活热部署的,原因在于在开发者工具中有一组配置,当满足了配置中的条件后,才会启动热部署,配置中默认不参与热部署的目录信息如下/resources/static。
2025-02-17 00:14:06
1129
原创 04运维实用篇(D5_监控)
在说监控之前,需要回顾一下软件业的发展史。最早的软件完成一些非常简单的功能,代码不多,错误也少。随着软件功能的逐步完善,软件的功能变得越来越复杂,功能不能得到有效的保障,这个阶段出现了针对软件功能的检测,也就是软件测试。伴随着计算机操作系统的逐步升级,软件的运行状态也变得开始让人捉摸不透,出现了不稳定的状况。伴随着计算机网络的发展,程序也从单机状态切换成基于计算机网络的程序,应用于网络的程序开始出现,由于网络的不稳定性,程序的运行状态让使用者更加堪忧。
2025-02-17 00:12:26
1034
原创 04运维实用篇(D4_日志)
编程期调试代码运营期记录信息记录日常运营重要信息(峰值流量、平均响应时长……)记录应用报错信息(错误堆栈)记录运维过程数据(扩容、宕机、报警……)基于lombok提供的@Slf4j注解为类快速添加日志对象日志输出格式设置规则日志信息显示,记录已经控制住了,下面就要说一下日志的转存了。日志不能仅显示在控制台上,要把日志记录到文件中,方便后期维护查阅。对于日志文件的使用存在各种各样的策略,例如每日记录,分类记录,报警后记录等。这里主要研究日志文件如何记录。
2025-02-17 00:09:35
994
原创 04运维实用篇(D3_多环境开发)
多环境开发需要设置若干种常用环境,例如开发、生产、测试环境yaml格式中设置多环境使用---区分环境设置边界每种环境的区别在于加载的配置属性不同启用某种环境时需要指定启动时使用该环境可以使用独立配置文件定义环境属性独立配置文件便于线上系统维护更新并保障系统安全性properties文件多环境配置仅支持多文件格式作为程序员在搞配置的时候往往处于一种分久必合合久必分的局面。开始先写一起,后来为了方便维护就拆分。
2025-02-17 00:08:26
1030
原创 04性能监控与调优篇(D4_JVM优化)
jvm的标准参数,一般都是很稳定的,在未来的JVM版本中不会改变,可以使用java -help 检索出所 有的标准参数。用法: java [-options] class [args...] (执行类) 或 java [-options] -jar jarfile [args...](执行 jar 文件)其中选项包括:-d32 使用 32 位数据模型 (如果可用)-d64 使用 64 位数据模型 (如果可用)
2025-02-16 20:50:15
980
原创 04性能监控与调优篇(D3_JVM参数)
在JVM调整过程中,主要是对JVM参数做的调整,以下我们介绍主要参数。JVM参数有很多,其实我 们直接使⽤默认的JVM参数,不去修改都可以满⾜⼤多数情况。但是如果你想在有限的硬件资源下,部 署的系统达到最⼤的运⾏效率,那么进⾏相关的JVM参数设置是必不可少的。下⾯我们就来对这些JVM参数进⾏详细的介绍。JVM参数主要分为以下三种:标准参数、⾮标准参数、不稳定参数。
2025-02-16 20:49:35
648
原创 04性能监控与调优篇(D1_学习前言)
本章主要通过JVM基础、调优层次、调优指标、何时JVM调优、JVM调优⽬标、JVM调优原则以及JVM调优步骤介绍,以达到对JVM调优有个整体上的认识,后续通过具体的案例结合理论来看下如何进行调优。
2025-02-15 22:42:37
1012
原创 08模拟法 + 技巧 + 数学 + 缓存(D4_缓存)
缓存算法是编程中的基本算法,用于解决缓存的更新和替换问题,通过合理地选择缓存中数据的存储位置,可以提高系统的访问速度和性能。本文介绍几个通用的缓存算法,这些算法适用于多种应用场景的缓存策略,其目标是在限定的缓存空间内,最大化缓存命中率,同时最小化缓存淘汰率。随机替换 (Random Replacement,RR):随机选择一个数据项淘汰。先进先出(First In First Out, FIFO):根据数据项进入缓存的时间先后,淘汰最早进入缓存的数据项。
2025-02-14 01:10:01
1584
2
原创 07贪心 + 动态规划(D1_基础学习)
贪心算法是一种思路简单、实现较为容易、效率较高的算法。它的核心思想是:每一步都选择当前局部最优解,并且期望通过不断的选择来达到全局最优解。贪心算法主要分为两个部分:选择策略和优化问题。选择策略指的是,每一步如何从多个选项中选择一个局部最优解,而优化问题指的是,当已经选择了一个局部最优解后,如何把问题规模缩小,以便下一步仍然能够找到局部最优解。(1)动态规划算法与分治法类似,其基本思想也是将待求解问题分解成若干个子问题(2)经分解得到的子问题往往不是互相独立的,有些子问题被重复计算多次。
2025-02-12 18:09:38
1118
原创 05并查集 + 散列表 + 布隆过滤器 + 跳表 + 自动机(D3_布隆过滤器)
以下定义来自百度百科:布隆过滤器(Bloom Filter)是1970年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都比一般的算法要好的多,缺点是有一定的误识别率和删除困难。布隆过滤器是由很长的二进制向量(即可以理解成很长的0、1数组)与一系列随机映射函数(Hash函数)构成。布隆过滤器的作用是检索一个元素是否存在我们的集合之中。优点是空间效率和查询时间都比一般的算法要好的多;
2025-02-12 17:44:07
631
原创 06排序 + 查找(D2_查找(D1_基础学习))
查找是在大量的信息中寻找一个特定的信息元素,在计算机应用中,查找是常用的基本运算,比如,我们常见的数组,链表,符号表,树,图等等斐波那契数列的前几个数是:0, 1, 1, 2, 3, 5, 8, 13, 21, …
2025-02-10 23:10:03
845
原创 05并查集 + 散列表 + 布隆过滤器 + 跳表 + 自动机(D2_散列表(D2_刷题练习))
【代码】05并查集 + 散列表 + 布隆过滤器 + 跳表 + 自动机(D2_散列表(D2_刷题练习))
2025-02-08 02:06:37
539
原创 05并查集 + 散列表 + 布隆过滤器 + 跳表 + 自动机(D2_散列表(D1_基础学习))
哈希表(Hash Table),又叫散列表,是能够通过给定的关键字的值直接访问到具体对应的值的一个数据结构。也就是说,把关键字映射到一个表中的位置来直接访问记录,以加快访问速度。通常,我们把这个关键字称为 Key,把对应的记录称为 Value,所以也可以说是通过 Key 访问一个映射表来得到 Value 的地址。而这个映射表,也叫作散列函数或者哈希函数,存放记录的数组叫作散列表。其中有个特殊情况,就是通过不同的 Key,可能访问到同一个地址,这种现象叫作碰撞。
2025-02-08 02:05:49
957
原创 05并查集 + 散列表 + 布隆过滤器 + 跳表 + 自动机(D1_并查集(D2_刷题练习))
【代码】05并查集 + 散列表 + 布隆过滤器 + 跳表 + 自动机(D1_并查集(D2_刷题练习))
2025-02-07 01:53:00
491
原创 05并查集 + 散列表 + 布隆过滤器 + 跳表 + 自动机(D1_并查集(D1_基础学习))
中,我们需要记录沿途的所有节点,在查找结束后,我们将沿途的这些节点,在fatherMap中的进行修改,直接。这里是创建一个 sizes 的数组,来存放每一个集合中的元素的数量,初始化时,每个集合的数量都是 1 个。下面在合并函数中,判断两个集合中的元素数量大小,小的集合合并到大的集合中,最重要的是,合并之后要更。基于rank 的优化,在一定程度上保证树的相对平衡,但是在不断的合并过程中,整个树的高度是。参考树的结构,把元素挂到父节点下,若两个元素的父节点相同,则是同一块区域,两个元素的父。
2025-02-07 01:52:06
1144
原创 01C#入门篇(D1_C#入门前的认知)
C#(读作“C Sharp”)是一种现代、面向对象的编程语言,由微软公司开发,旨在为.NET框架提供支持。它结合了C语言和C++的特点,同时吸取了Java等语言的优点。
2025-02-07 00:44:07
1114
原创 09网络深入连贯篇(D1_彻底理解长连接 & 短连接(一))
业务心跳 + TCP KeepAlive 一起使用,互相作为补充,但 TCP 保活探测周期和应用的心跳周期。长连接, 如果用短连接频繁的通信会造成socket错误,而且频繁的socket 创建也是对资源的浪。如果两端的 TCP 连接一直没有数据交互,达到了触发 TCP 保活机制的条件,那么内核里的 TCP。有数据传送的情况下,TCP 层将发送相应的KeepAlive探针以确定连接可用性,探测失败后重试。这个keepAlive只是保证系统层面上的保活,是由内核完成的,即保证tcp连接不断,但不能保证。
2025-02-06 15:14:53
1088
1
空空如也
为什么最后e=0,逻辑上应该e=30啊,不是代码块改变了静态变量值?
2021-10-08
求帮解!这个到底该往哪改啊!
2021-06-28
谁能帮我解决这个BUG啊!我知道是个空的,但是不会解决啊!
2021-06-25
TA创建的收藏夹 TA关注的收藏夹
TA关注的人