自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Skynet入门(二)

在配置文件的luaservice配置项中增加service的路径。

2025-04-12 17:02:12 50

原创 lua学习(三)

确保某些数据是符合预期的,避免影响最终结果。:assert(条件语句,报错信息)当条件语句为true时,assert语句不会有任何行为,但是当为false时,assert会将报错信息弹出,并中断程序的执行。:由于断言只在调试模式下有效,因此在生产环境中通常会被禁用,以避免影响程序性能‌。

2025-03-15 16:30:36 575

原创 Skynet入门(一)

skynet 是一个为网络游戏服务器设计的轻量框架。但它本身并没有任何为网络游戏业务而特别设计的部分,所以尽可以把它用于其它领域。

2025-03-01 15:37:12 1128

原创 lua学习(二)

该参数是可选的指定函数是全局函数还是局部函数,未设置该参数默认为全局函数,如果你需要设置函数为局部函数需要使用关键字。指定函数名称。函数参数,多个参数以逗号隔开,函数也可以不带参数。函数体,函数中需要执行的代码语句块。函数返回值,Lua语言函数可以返回多个值,每个值以逗号隔开。

2025-03-01 10:05:04 478

原创 lua学习(一)

Lua 是一种轻量级、可扩展的脚本语言,设计目标是为了嵌入到其他应用程序中,以提供灵活的脚本功能。

2025-02-26 12:14:19 1116

原创 Django——安全机制学习

允许攻击者在受害者浏览器上执行未经授权的脚本,从而窃取 cookie、会话令牌或破坏页面内容。

2025-02-13 15:26:59 301

原创 go--并发学习

指当一个goroutine尝试获取一个已经被其他goroutine持有的锁时,它会进入一种持续检查锁状态的状态,而不是立即进入阻塞状态。这种机制被称为自旋锁(Spinlock)工作原理当一个goroutine请求自旋锁时,如果锁已被其他goroutine占用,那么当前goroutine会不断检查锁的状态,直到锁被释放,而非立即休眠。优点自旋线程数量上限为GOMAXPROCS(P的数量),避免CPU空转浪费。自旋锁避免了阻塞和上下文切换,从而减少了系统开销‌。

2025-02-04 17:29:16 765

原创 go——panic学习

panic一般跟recover、defer结合使用。当panic触发异常,当前函数会停止执行,然后执行当前函数中所有的defer。如果没有捕获panic的报错,程序会崩溃并输出堆栈信息。

2025-02-02 09:52:13 418

原创 GO——垃圾回收机制学习

白色:未被访问的对象(待回收)。灰色:已访问但子对象未检查。黑色:已访问且子对象已检查。

2025-01-31 11:16:24 923

原创 python垃圾回收机制学习

python自动回收内存中的不再使用的对象,它的目的是避免常见的内存泄漏问题。

2025-01-28 23:50:35 681

原创 python面试题收集(持续更新)

B+树索引就是mysql结合B树和索引顺序升级开发的一种平衡搜索树。实际底层实现跟B树没有关系。特点是非叶子节点只存储索引,而叶子结点存储实际的数据。所有叶子结点都是由一个双向链表管理和连接的,数据都是排好序的。因为这些特点,索引B+树适合进行范围查询。答:回表就是使用非聚簇索引搜索时,索引字段不包含搜索所需的字段,那么就要通过主键去查找完整数据的过程。往往会带来随机I/O操作,使得查询慢。

2025-01-23 11:56:39 1069

原创 JMeter学习记录

从使用上,该控制器其实就是自动帮你拼接引用字段,例如数据库输出变量是mobilephone,然后ForEach中填写的开始字段startidx代表从startidx+1开始拼接,获得mobilephone_1,mobilephone_2…如何获取返回的token,并在后续请求中使用,在获取token的http请求后面添加一个后置处理器——正则表达式提取器。匹配数字:代表获取返回数组中第几个数据,-1代表全部,0代表随机,1代表第一个。模板:$$对应提取器类型,-1代表全部,0代表随机,1代表第一个。

2025-01-21 10:49:57 980

原创 python并发编程学习——asyncio

Python在处理I/O密集型任务时遇到的问题。传统的多线程编程模型在处理大量I/O操作时,由于线程创建和管理的开销,效率较低。为了解决这个问题,Python从3.4版本开始引入了asyncio库,它能够在单个线程内实现并发,避免了多线程带来的开销,从而提升了性能并降低了复杂度。

2025-01-15 20:08:44 457

原创 python——元类学习

super(Mymeta, self).__init__(class_name, class_bases, class_dic) # 重用父类的功能raise TypeError('类名%s请修改为首字母大写' %class_name)raise TypeError('类中必须有文档注释,并且文档注释不能为空')pass。

2025-01-11 18:12:30 262

原创 巩固生成器和迭代器的认识

本文主要记录一些学习生成器和迭代器过程中不理解的细节,一些基础的实现代码就不在此讲解。

2024-12-29 17:12:44 676

原创 drf-序列化器和解析器

传入的是列表,里面包含整数假如像上图一样返回999和990,那么保存到数据库的就是如果希望存储的是tag对象,那么就要在钩子函数中获取数据库中是否有对应的tag对象,然后返回queryset。

2024-08-04 16:05:46 794

原创 Django:drf实现简单认证、权限管理、限流功能

目的:在原来的request对象基础中再进行封装一些drf中需要用到的值。比如认证、权限管理、限流。由上面的代码可知drf将Django原生request对象封装成Request对象,并且初始化authenticators参数,该参数正是认证功能。那么一个请求到达后台后,Django和drf的执行顺序是如何的呢?

2024-07-19 17:06:58 434 1

原创 牛客网刷题 词频统计

牛客网刷题 词频统计1.这道题我一开始的思路就是使用hashmap存放每个单词出现的次数,但是我在最后返回结果的时候,没有判断word是否在hashmap中存在,就直接使用map.get(word),结果导致空指针异常,所以我在最后需要判断一下是否存在word,若没有则返回0,有则返回word的数量。HashMap<String,Integer> map = new HashMap<>(); for(int i = 0;i<n;i++){

2020-10-14 10:40:49 201

转载 leetcode刷题记录 二叉树的最近公共祖先

leetcode 二叉树的最近公共祖先解题思路:根据以上定义,若 rootroot 是 p, qp,q 的 最近公共祖先 ,则只可能为以下情况之一:p和 q在 root的子树中,且分列 root的 异侧(即分别在左、右子树中);p = root,且q在root的左或右子树中;q = root,且p在root的左或右子树中;考虑通过递归对二叉树进行后序遍历,当遇到节点 p 或 q 时返回。从底至顶回溯,当节点 p, q 在节点 root 的异侧时,节点 root即为最近公共祖先,则向上返回

2020-10-08 16:19:44 138

转载 leetcode刷题记录 填充每个节点的下一个右侧节点指针

leetcode 填充每个节点的下一个右侧节点指针解题思路:1.层次遍历,此方法效率一般,但可以解决此题。代码: public Node connect(Node root) { if(root==null) return null; Queue<Node> queue = new LinkedList<>(); queue.add(root); while(!queue.isE

2020-10-08 12:25:48 145

原创 leetcode刷题记录 106 从中序与后序遍历序列构造二叉树

leetcode 106 从中序与后序遍历序列构造二叉树我们可以根据后序遍历确定根结点的值,然后在中序遍历里面确认左右子树的范围。利用递归构建左右子树。优化:可以使用hashMap存储中序遍历中的值,增加查询速率。class Solution { int[]postorder; int[]inorder; int root_index; HashMap<Integer,Integer> map = new HashMap<>(); pu

2020-09-23 11:09:43 231

原创 leetcode刷题记录 剑指offer 从上到下打印二叉树 Ⅲ

leetcode 剑指offer 从上到下打印二叉树 Ⅲ解题思路:这道题我们可以按照层序遍历的思路做,但是需要注意的是每一层的遍历顺序有所不同,通过观察,假设根结点在第0层,我们可以知道当为奇数层时,是从右往左遍历;偶数层时,是从左往右遍历。那么我们不妨使用BFS+双端队列的方法进行编程。当为偶数层,我们使用addLast将元素添加到队列尾部;奇数层时,用addFirst将元素添加到队列头部。class Solution { public List<List<Integer&gt

2020-09-18 16:11:13 118

转载 leetcode刷题记录 543 二叉树的直径

leetcode 543 二叉树的直径解题思路:题中直径就是找出最长路径。假设我们知道对于该节点的左儿子向下遍历经过最多的节点数 L(即以左儿子为根的子树的深度) 和其右儿子向下遍历经过最多的节点数 R(即以右儿子为根的子树的深度),那么以该节点为起点的路径经过节点数的最大值即为 L+R+1 。我们记节点 node 为起点的路径经过节点数的最大值为 dnode,那么二叉树的直径就是所有节点 dnode的最大值减一。最后的算法流程为:我们定义一个递归函数 depth(node) 计算 dnode,函数

2020-09-13 10:31:12 125

转载 leetcode刷题记录 1008 先序遍历构造二叉树

leetcode 1008 先序遍历构造二叉树解题思路:我们使用递归的方法,在扫描先序遍历的同时构造出二叉树。我们在递归时维护一个 (lower, upper) 二元组,表示当前位置可以插入的节点的值的上下界。如果此时先序遍历位置的值处于上下界中,就将这个值作为新的节点插入到当前位置,并递归地处理当前位置的左右孩子的两个位置。否则回溯到当前位置的父节点。算法将 lower 和 upper 的初始值分别设置为负无穷和正无穷,因为根节点的值可以为任意值。从先序遍历的第一个元素 idx = 0 开始构

2020-09-11 14:00:25 160

原创 leetcode刷题记录 919 完全二叉树插入器

leetcode 919 完全二叉树插入器解题思路:构造器:声明两个成员变量head(头结点)和队列deque,head指向传进来的树的头结点,然后使用两个双向队列,deque用来存放孩子结点为0或者1的结点,queue用来存放每一层的结点;**插入:**取出deque的第一个结点node即为最左边第一个插入的点,将要插入的结点插入deque最后,以便以后的插入。然后按照从左到右判断node结点的孩子结点是否为空,为空就插入;返回头结点:直接返回头结点head。class CBTInserte

2020-09-11 11:59:42 156

原创 leetcode刷题记录 637 二叉树的层平均值

leetcode 637 二叉树的层平均值解题思路:1.可以采取广度遍历,用两个queue存放结点,一个存放第i层的结点,另外一个存放下一层节点。然后遍历完一层就计算其平均值,存入list中。class Solution { public List<Double> averageOfLevels(TreeNode root) { Queue<TreeNode> queue = new LinkedList<>(); List

2020-09-09 00:55:02 118

原创 leetcode刷题记录 894 所有可能的满二叉树

leetcode 894 所有可能的满二叉树解题思路:令 F(N)作为所有含 N 个结点的可能的满二叉树的列表。每个满二叉树 T含有 3 个或更多结点,在其根结点处有 2 个子结点。这些子结点 left 和 right 本身就是满二叉树。因此,对于 N≥3,我们可以设定如下的递归策略:F(N) = [对于所有的 x,所有的树的左子结点来自 F(x) ,而右子结点来自F(N−1−x)]。此外,通过简单的计数参数,没有满二叉树具有正偶数个结点。最后,我们应该缓存函数F之前的结果,这样我们就不必在递归

2020-09-08 16:54:53 136

原创 leetcode刷题记录 1305 两颗二叉搜索树中的所有元素

leetcode 1305 两颗二叉搜索树中的所有元素解题思路:我们知道二叉搜索树的中序遍历是升序排列的,所以说我们这道题可以这样做:1.先中序遍历两个二叉树,将遍历的结果分别存放到list1和list2中。2.使用归并排序将两个排好序的list合并,即为我们所求的结果。class Solution { public List<Integer> getAllElements(TreeNode root1, TreeNode root2) { List<In

2020-09-08 15:50:15 172

原创 leetcode刷题记录 623 在二叉树中增加一行

leetcode 623 在二叉树中增加一行解题思路:根据题目我们要分两种情况进行讨论。1.当插入的位置为根结点,则我们直接创建一个结点,并让它的左子树连接根结点。2.当插入的位置不是根结点,那我们需要找到插入层的前一层,例如我要插入第三层,那么我需要找到第二层的结点,让其连接新插入的结点,再让新结点连接之前第三层的结点。这个过程我们通过递归遍历二叉树的左右子树,直到depth = n-1时执行上面所说的操作。class Solution { public TreeNode addOneR

2020-09-08 11:23:08 143

转载 Mybatis学习笔记

Mybatis学习笔记1. 入门使用1.1创建数据库和表来存储接下来要查询的数据。1.2接着导入Mybatis所需的jar包。1.3创建实体类用于映射表,需与数据库中的表的数据一一对应。1.4配置mybatis-config.xml文件,其作用主要是:①提供连接数据库用的驱动,数据库名称,编码方式,账号密码;②给后续配置文件中使用resultType的时候,可以直接使用实体类的名称,而不必写全实体类所处的完整的路径;③配置映射。以下是例子:<?xml version="1.0" enco

2020-09-08 10:46:31 80

原创 leetcode刷题记录 124 二叉树中的最大路径和

leetcode 124 二叉树中的最大路径和首先这道题第一个难点就是如何理解题意,题目中路径可以由任意结点出发,即不一定是由根结点出发,例如(9->-10->20)也是一条路径。第二个难点就是怎么计算最大路径和呢?既然我们要计算最大路径和,那我们首先要知道以每个结点为根结点的子树中寻找以该结点为起点的一条路径,使得该路径上的结点值之和最大。所以我们可以设计一个函数maxGain来求一个结点的最大贡献值。具体而言,该函数的计算如下。空结点的最大贡献值等于 0。非空结点的最大贡献值等

2020-09-06 20:09:00 227

原创 leetcode刷题记录 121 买卖股票的最佳时机

leetcode 121 买卖股票的最佳时机思路:1.我们买股票肯定想在最低点买入,然后在最高点卖出。那么我们设置两个变量,一个是minPrice来保存最低点的数值,maxPrice来保存最大差值。2.我们通过遍历来寻找最低值,遇到最小值就替换minPrice。3.比较每次求取的差值,若大过之前的最大值,就讲maxPrice替换。class Solution { public int maxProfit(int[] prices) { int maxPrice = 0;

2020-09-04 21:07:19 109

原创 leetcode刷题记录 257二叉树的所有路径

leetcode 257二叉树的所有路径这道题的解题思路可以使用深度遍历或者广度遍历。首先采用深度遍历,在深度优先搜索遍历二叉树时,我们需要考虑当前的节点以及它的孩子节点。1.如果当前节点不是叶子节点,则在当前的路径末尾添加该节点,并继续递归遍历该节点的每一个孩子节点。2.如果当前节点是叶子节点,则在当前路径末尾添加该节点后*将该路径加入到结果中。如此,当遍历完整棵二叉树以后我们就得到了所有从根节点到叶子节点的路径。class Solution { public List<Str

2020-09-04 14:11:18 181

原创 leetcode刷题记录 104 从前序与中序遍历序列构造二叉树

leetcode 104 从前序与中序遍历序列构造二叉树解这道题,我需要了解二叉树中前序遍历和中序遍历的特点。前序遍历的特点就是根结点是其遍历的第一个结点,而中序遍历则是按照左根右的顺序进行遍历,只要知道根结点的位置,我们就可以确定左子树和右子树的区间。所以我们可以从前序遍历中获取根结点,然后在中序遍历中定位到根结点的位置,我们就知道左右子树的长度。这样一来,我们就知道了左子树的前序遍历和中序遍历结果,以及右子树的前序遍历和中序遍历结果,我们就可以递归地对构造出左子树和右子树,再将这两颗子树接到根节点的

2020-09-03 00:32:34 204

原创 leetcode刷题记录 104 二叉树的最大深度

leetcode 104 二叉树的最大深度此题有两个思路:第一个就是递归,向左右子树进行递归,当到达叶子结点的时候返回0,然后比较左右子树的深度哪个大,并返回最大值+1。左子树和右子树的最大深度 ll 和 rr,那么该二叉树的最大深度即为max(l,r)+1。代码如下:class Solution { public int maxDepth(TreeNode root) { if (root == null) { return 0;

2020-09-02 19:53:32 141

原创 leetcode刷题记录 103 二叉树的锯齿形层次遍历

leetcode 103 二叉树的锯齿形层次遍历看到这道题,层次遍历的一般思路是使用队列来存放每一层的结点,然后逐一出队列存放在结果集中。但这道题还需要我们进行锯齿形的遍历,即先从左到右,再从右到左进行下层遍历,交替进行。于是我观察案例,以根结点所在层为0开始,凡是为偶数的,是从左往右遍历,奇数的是从右往左遍历。**所以设置一个level作为当前层,若是偶数层,则将结点通过尾插法放到结果队列后面;若是奇数层,则将结点通过头插法放到结果队列中。**为了实现头插和尾插,我选择LinkedList作为存放结

2020-09-02 17:44:07 172

原创 leetcode刷题记录 94 二叉树的中序遍历

leetcode 94 二叉树的中序遍历首先这道题,一般我们会想到用递归来进行中序遍历。这里就不多说了,代码如下:class Solution { public List<Integer> inorderTraversal(TreeNode root) { List<Integer>list = new ArrayList<>(); if(root==null) return list;

2020-09-01 11:56:43 80

转载 初学AVL树记录(一)

AVL树是为何产生的?对于一般的二叉搜索树,其期望高度(即为一棵平衡树时)为log2n,其各操作的时间复杂度(O(log2n))同时也由此而决定。但是,在某些极端的情况下(如在插入的序列是有序的时),二叉搜索树将退化成近似链或链,此时,其操作的时间复杂度将退化成线性的,即O(n)。我们可以通过随机化建立二叉搜索树来尽量的避免这种情况,但是在进行了多次的操作之后,由于在删除时,我们总是选择将待删除节点的后继代替它本身,这样就会造成总是右边的节点数目减少,以至于树向左偏沉。这同时也会造成树的平衡性受到破坏,

2020-07-21 14:37:08 104

空空如也

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

TA关注的人

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