- 博客(68)
- 收藏
- 关注
原创 go语言中的指针详解
指针是什么?答案是指针。指针就是一个存储了其他数据项地址的数据项,或者说指针是一个存储了其他变量地址的变量。在代码中,我们会经常存储或者读取各种数据,这些数据的数据类型可能是字符串、数字类型或结构体等,数据存在内存某个指定位置上,每个内存位置有自己的地址,指针就是专门用存储变量地址的变量,如下图所示:从上面的示意图中可以看出一个指针类型的变量本身也有自己的内存地址。 可以总结为:在编程语言中,指针是一种数据类型,用来存储一个内存地址,该地址指向存储在该内存中的对象。这个对象可以是字符串、整数、函数或者你自定
2024-11-23 15:36:28 747
原创 go的接口详解
首先解释定义行为:接口即一组方法定义的集合,定义了对象的一组行为,就是定义了一些函数,由具体的类型实例实现具体的方法。换句话说,一个接口就是定义(规范或约束),接口并不会实现这些方法,具体的实现由类实现,实现接口的类必须严格按照接口的声明来实现接口提供的所有功能。接口的作用应该是将定义与实现分离,降低耦合度。
2024-11-18 22:19:44 915
原创 求职Leetcode题目(16)
解题思路1:egg 和 add 同构,就意味着下边的映射成立e -> ag -> d也就是将 egg 的 e 换成 a, g 换成 d, 就变成了 add同时倒过来也成立a -> ed -> g也就是将 add 的 a 换成 e, d 换成 g, 就变成了 eggfoo 和 bar 不同构,原因就是映射不唯一o -> ao -> r其中 o 映射到了两个字母思路2:将第一个出现的字母映射成 1,第二个出现的字母映射成 2对于 egge -> 1。
2024-11-14 13:10:30 434
原创 go语言的面向对象详解
Name, StuNum, Address string //批量定义三个String类型stu Student //继承Student 的所有属性Age int //年龄Scores [2]float32 //数组保存语文和数学的考试成绩TopPtr *int //int类型的指针,用于排名SliceIndex []int //int类型的切片,定义学生各项指数,使用的时候需要make。
2024-11-14 11:05:33 817
原创 求职leetcode题目(15)
解题思路:下面我们一步一步地进行讲解。标签:动态规划动态规划方程:dp[n] = MAX( dp[n-1], dp[n-2] + num )由于不可以在相邻的房屋闯入,所以在当前位置 n 房屋可盗窃的最大值,要么就是 n-1 房屋可盗窃的最大值,要么就是 n-2 房屋可盗窃的最大值加上当前房屋的值,二者之间取最大值。
2024-11-11 11:29:47 734
原创 solidity中的继承
/ 这是一个许可证标识符,用于指定代码的许可证类型。MIT许可证是一种宽松的自由软件许可证。// 这行代码指定了Solidity编译器的版本。`^`符号表示与0.8.26版本兼容的最新版本。A / \B C \/ D*/// 这是一个继承树的注释,说明了合约之间的继承关系。A是基类,B和C继承自A,D继承自B和C。// 定义了一个名为A的合约。// 这是一个事件。你可以在函数中触发事件,并将它们记录在交易日志中。// 在我们的例子中,这将有助于追踪函数调用。
2024-11-02 22:12:23 511
原创 solidity中的Error和Modifier详解
从Solidity 0.8.4开始,引入了自定义错误类型,用于节省Gas并提供更加具体的错误信息。// 如果a不大于10,将使用自定义错误类型回滚交易在这个例子中,我们定义了一个名为InvalidNumber的自定义错误类型,它接受一个uint参数。在checkNumber函数中,如果a不大于10,我们使用revert关键字和自定义错误类型来回滚交易,并提供具体的错误信息。自定义错误类型的好处是,它们允许合约的用户更容易地识别和处理特定的错误情况,同时减少了合约的Gas消耗。
2024-11-01 23:50:41 1130
原创 求职leetcode题目(14)
要实现一个 stack,那么我们还能用 java 自带的 stack 吗?这引导我们可以在模拟竖式计算(除法)过程中,使用「哈希表」记录某个余数最早在什么位置出现过,一旦出现相同余数,则将「出现位置」到「当前结尾」之间的字符串抠出来,即是「循环小数」部分。这道题最直接的解法就是我们可以用两个栈,一个栈去保存正常的入栈出栈的值,另一个栈去存最小值,也就是用栈顶保存当前所有元素的最小值。首先可以明确,两个数相除要么是「有限位小数」,要么是「无限循环小数」,而不可能是「无限不循环小数」。
2024-10-21 16:39:43 284
原创 solidity中的mapping以及Memory,Storage & Calldata
本章节三个最重要的,就是Calldata,Memory和Storage,这是一个稍微进阶的知识点,所以,如果你第一次没有完全掌握它,那也完全没关系。
2024-10-12 22:48:03 1119
原创 go语言中的函数详解
/ 函数体// 可以包含一系列的语句和操作return value // 返回值(如果有)func: 关键字用于定义函数。: 函数名,用于唯一标识该函数。: 参数列表,函数可以接收零个或多个参数。每个参数由参数名和参数类型组成,多个参数之间使用逗号分隔。: 参数的类型,指定参数的数据类型。returnType: 返回类型,指定函数的返回值的数据类型。如果函数没有返回值,则返回类型为空。: 可选项,用于返回函数的结果。如果函数定义了返回类型,则需要使用return语句将结果返回给调用者。
2024-10-11 22:40:38 986 2
原创 go语言中的结构体详解
在Go语言中,结构体是一种自定义的数据类型,用于将不同类型的字段组合在一起形成一个新的数据结构。结构体定义了一组字段,每个字段可以有不同的类型,这些字段一起构成了结构体的实例。通过结构体,我们可以将相关的数据进行组织和管理,从而更方便地进行操作和传递。结构体的定义使用关键字type和struct。
2024-09-23 23:47:30 1240
原创 求职Leetcode题目(11)
解题思路:这种方法思维就就比较简单,而且最后的效率也很不错!方法二:对于数组中存在的连续序列,为了统计每个连续序列的长度,我们希望直接,从起点开始遍历每个连续序列,从而获得长度。那么如何获取到每个连续序列的起点呢,或者说什么样的数才是一个连续序列的起点?答案是这个数的前一个数不存在于数组中,因为我们需要能够快速判断当前数num的前一个数num - 1是否存在于数组中。同时当我们定位到起点后,我们就要遍历这个连续序列,什么时候是终点呢?
2024-09-23 19:55:43 672
原创 go语言中的切片详解
在Go语言中,切片(Slice)是一种基于数组的更高级的数据结构,它提供了一种灵活、动态的方式来处理序列数据。切片在Go中非常常用,因为它们可以动态地增长和缩小,这使得它们比固定大小的数组更加灵活。
2024-09-20 00:14:41 1234
原创 go语言中的数组指针和指针数组的区别详解
大家知道C语言之所以强大,就是因为c语言支持指针,而且权限特别大,c语言可以对计算机中任何内存的指针进行操作,这样自然而然也会带来一些不安全的因素,所以在golang中,「取消了对指针的一些偏移,翻转等算术运算」(+、-、++、--)所以使用起来更安全。
2024-09-16 15:19:07 1428
原创 求职leetcode题目(10)
不难发现这满足递归的性质,若当前节点就是叶子节点,那么我们直接判断 sum 是否等于 val 即可(因为路径和已经确定,就是当前节点的值,我们只需要判断该路径和是否满足条件)。假定从根节点到当前节点的值之和为 val,我们可以将这个大问题转化为一个小问题:是否存在从当前节点的子节点到叶子的路径,满足其路径和为 sum - val。观察要求我们完成的函数,我们可以归纳出它的功能:询问是否存在从当前节点 root 到叶子节点的路径,满足其路径和为 sum。记录从根节点到当前节点的路径和,以防止重复计算。
2024-09-12 21:46:41 776
原创 求职Leetcode题目(9)
1、如果s[i]不为0,则可以单独解码s[i],由于求的是方案数,如果确定了第i个数字的翻译方式,那么解码前i个数字和解码前i - 1个数的方案数就是相同的,即f[i] = f[i - 1]。(s[]数组下标从1开始)2、将s[i]和s[i - 1]组合起来解码( 组合的数字范围在10 ~ 26之间 )。如果确定了第i个数和第i - 1个数的解码方式,那么解码前i个数字和解码前i - 2个数的方案数就是相同的,即f[i] = f[i - 2]。(s[]数组下标从1开始)最后将两种决策的方案数加起来,
2024-09-01 02:33:56 965
原创 JAVA中有关锁的详解
在Lock接口出现之前,Java程序是靠synchronized关键字实现锁功能的,而JavaSE 5之后,并发包中新增了Lock接口(以及相关实现类)用来实现锁功能,它提供了与synchronized关键字类似的同步功能,只是在使用时需要显式地获取和释放锁。虽然它缺少了(通过synchronized块或者方法)隐式获取释放锁的便捷性,但是却拥有了锁获取与释放的可操作性、可中断的获取锁以及超时获取锁等多种synchronized关键字所不具备的同步特性。
2024-08-31 01:26:34 306
原创 MySQL中的锁详解
锁是计算机协调多个进程或者线程并发访问某一资源的机制。那么如何保证数据并发访问的一致性、有效性是数据库必须解决的一个问题,锁的冲突也是影响数据库并发访问性能的一个重要因素,所以数据库中锁的应用极为重要,其复杂度也更高。数据库锁是数据库管理系统用来管理对数据库中数据的并发访问的一种机制。锁的存在主要是为了保证数据的完整性和一致性,以及支持事务的原子性。
2024-08-26 22:17:30 1197
原创 求职Leetcode题目(8)
第一种方法,直接暴力手撕算法:解法2:该算法是通过两数相乘时,乘数某位与被乘数某位相乘,与产生结果的位置的规律来完成。具体规律如下:乘数 num1 位数为 M,被乘数 num2 位数为 N, num1 x num2 结果 res 最大总位数为 M+Nnum1[i] x num2[j] 的结果为 tmp(位数为两位,"0x", "xy" 的形式),其第一位位于 res[i+j],第二位位于 res[i+j+1]。
2024-08-26 17:13:31 507
原创 java中位运算在算法中的应用
在Java语言中,提供了7种位运算符,分别是按位与(&)、按位或(|)、按位异或(^)、取反(~)、左移()和无符号右移(>>>)。位运算通常比算术运算更快,原因有以下几点:1. 硬件支持:位运算是直接在硬件层面上执行的,现代CPU有专门的电路来处理位运算,因此执行速度非常快。2. 节省空间:位运算不需要额外的内存空间,操作直接在寄存器中完成。3. 原子性:位运算是原子操作,不会出现像浮点运算那样的精度问题。
2024-08-26 02:02:26 1039
原创 JAVA中的Stream流的使用详解
下面我们来举个例子来感受一下Stream有多优雅Stream的类型我们可以对流进行中间操作或者终端操作。小伙伴们可能会疑问?
2024-08-23 11:09:43 1033
原创 Mysql索引的失效情况
在数据库中,单列索引只基于表中的一个列创建。而复合索引(也称为多列索引或多字段索引)是基于表中两个或更多列创建的索引。例如,对于一个包含 id, name, age 和 city 字段的表,我们可以创建一个基于 (name, age, city) 的复合索引。
2024-08-19 11:24:43 2049
原创 JAVA中的网络编程巨详解(2w字)
在学习 Java 网络编程之前,我们先来了解什么是计算机网络。计算机网络是指两台或更多的计算机组成的网络,在同一个网络中,任意两台计算机都可以直接通信,因为所有计算机都需要遵循同一种网络协议。下面是一张简化的网络拓扑图。
2024-08-18 20:35:52 708
原创 MySQL索引的性能优化
在数据库调优中,我们的目标就是响应时间更快,吞吐量更大。利用宏观的监控工具和微观的日志分析可以帮我们快速找到调优的思路和方式。
2024-08-15 19:03:08 1508
原创 求职Leetcode算法题(7)
这道题要求时间复杂度为o(log n),那么第一时间想到的就是二分法,二分法有个前提条件是在有序数组下,我们发现在这个数组中存在两部分是有序的,所以我们只需要对前半部分和后半部分分别进行二分查找得到目标值就OK了。可以发现的是,我们将数组从中间分开成左右两部分的时候,一定有一部分的数组是有序的。拿示例来看,我们从 6 这个位置分开以后数组变成了 [4, 5, 6] 和 [7, 0, 1, 2] 两个部分,其中左边 [4, 5, 6] 这个部分的数组是有序的,其他也是如此。
2024-08-15 17:15:33 841
原创 全网最详细JAVA中反射详解(1.5w字)
对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。要想解剖一个类,必须先要获取到该类的字节码文件对象。而解剖使用的就是Class类中的方法。所以先要获取到每一个字节码文件对应的Class类型的对象。反射就是把java类中的各种成分映射成一个个的Java对象。例如:一个类有:成员变量、方法、构造方法、包等等信息,利用反射技术可以对一个类进行解剖,把一个个组成部分映射成一个个对象。
2024-08-15 00:25:52 1126
原创 JAVA线程中synchronized的四种锁状态详解
当一个实例方法被声明为synchronize时,锁时当前实例对象(this)。这意味着同一时间只有一个线程可以执行该实例的所有同步实例方法,如果多个线程尝试访问同一个对象的同步实例方法,它们将会被序列化,一个接着一个执行。当一个静态方法被声明为synchronize时,锁时这个类的class类。这意味着同一时间只有一个县城可以执行该类的所有同步静态方法。这与实例方法同步不同,因为他锁定的是类本身而不是类的某个特定的实例。这里介绍一下“临界区”的概念。在上面的例子中,如果。
2024-08-12 00:31:20 1380
原创 JAVA中的volatile和synchronized关键字详解
保证可见性:当一个变量被声明为`volatile`,并且每次使用这个变量时都必须从中读取,。这确保了所有线程看到的变量值都是最新的。a=1;b=a;使用 volatile 关键字修饰共享变量可以禁止这种重排序。怎么做到的呢?
2024-08-08 23:58:16 1258
原创 求职Leetcode题目(5)
我们可以想到,所有的不被包围的 O 都直接或间接与边界上的 O 相连。具体地,我们首先遍历该数组一次,如果某个元素为 0,那么就将该元素所在的行和列所对应标记数组的位置置为 true。那么我们首先要来考虑什么情况下, 'O' 不会被 'X' 包围。那就是这个'O'是在矩阵的边界上或者和矩阵边界上的'O'可达的。本题要求将所有被字母 X 包围的字母 O都变为字母 X ,但很难判断哪些 O 是被包围的,哪些 O 不是被包围的。这道题要将所有被 'X' 包围的 'O' 进行替换。
2024-08-07 00:17:53 673
原创 JAVA中的JMM(Java 内存模型)详解
因为在不同的硬件生产商和不同的操作系统下,内存的访问有一定的差异,所以会造成相同的代码运行在不同的系统上会出现各种问题。
2024-08-05 12:07:02 1614
原创 JAVA线程中的安全性问题详解
在一个单向行驶的道路上,每辆汽车都遵守交通规则,这时候整体通行是正常的。『单向车道』意味着『一个线程』,『多辆车』意味着『多个 job 任务』。如果需要提升车辆的同行效率,一般的做法就是扩展车道,对应程序来说就是『加线程池』,增加线程数。这样在同一时间内,通行的车辆数远远大于单车道。然而车道一旦多起来,『加塞』的场景就会越来越多,出现碰撞后也会影响整条马路的通行效率。这么一对比下来『多车道』就比『单车道』慢多了。防止汽车频繁变道加塞可以在车道间增加『护栏』,那在程序的世界里该怎么做呢?『线程安全问题』
2024-08-03 11:32:04 1043
原创 MySQL中索引详解
除聚簇索引之外的所有索引都称为辅助索引。在中InnoDB,辅助索引中的叶子节点存储的数据是该行的主键值都。在检索时,InnoDB使用此主键值在聚簇索引中搜索行记录。这里以user_innodb为例,user_innodb的id列为主键,age列为普通索引。
2024-08-03 01:31:03 1523
原创 求职Leetcode题目(4)
可定义 boolean[][] dp ,dp[i][j] 代表 s1 前 i 个字符与 s2 前 j 个字符拼接成 s3 的 i+j 字符,也就是存在目标路径能够到达 i ,j;边界 2:if i=0 : dp[0]dp[j] = s2[0-j) equals s3[0,j) 遇到 false 后面可以直接省略。边界 3:if j=0 : dp[i]dp[0] = s1[0-i) equals s3[0,i) 遇到 false 后面可以直接省略。边界 1:dp[0][0] = true;
2024-08-02 16:32:25 634
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人