- 博客(74)
- 收藏
- 关注
原创 【Tars-go】腾讯微服务框架学习使用03-- TarsUp协议
尽管Protobuf和Tars在技术性能上有优势,JSON在易用性、灵活性和广泛支持等方面的优势使其成为大多数HTTP接口首选的数据格式。对于需要高性能和高效数据编码的内部系统或微服务间通信,Protobuf和Tars仍然是非常合适的选择。
2024-04-13 22:05:13
1207
2
原创 【Tars-go】腾讯微服务框架学习使用02-- http 服务
简单来说就是将http根据配置实例化-》再注册Sever-》这代码很好理解。官方文档说http这里是在net/http原生包的基础上做了修改。注册到tars框架中作为servant就可以启动http服务。并加入了上报状态信息、计算耗时等基本服务器功能。这里改了,其他的和tars服务没啥区别。注册到tars框架中作为。配置文件配置servant。可以看到 在初始化了。
2024-04-13 21:02:07
1079
原创 【Tars-go】腾讯微服务框架学习使用01--初始化服务
在 Tars 中,每个服务都可以通过一个管理接口进行控制,这包括服务的部署、启动、停止等操作。Admin_imp.go 文件中通常包含了这些管理操作的具体实现代码。这意味着,当 Tars 管理系统发出指令(如停止服务、查询服务状态等)时,这些指令会被路由到 Admin_imp.go 中相应的函数进行处理。中依赖文件会被编译但是因为是同一包下,没有显式依赖,所以。GoModuleName: go.mod 的模块名称。服务端的对外提供的tars协议生成go文件。文件不能有- ,我把服务名换成了。
2024-04-11 21:03:40
1070
2
原创 Curl- go的自带包 net/http实现
application/x-www-form-urlencoded url编码方式提交。发送请求的步骤:1. 创建客户端 2. 发送请求 3. 接受响应。multipart/form-data 表单方式提交,上传文件。application/json json数据格式提交。的请求体就是字节流。所以制定编码方式-》用。接下来就可以往body里放字节流数据。都可以根据这个模版魔改。
2024-01-19 20:24:47
709
原创 Go指针初始化
如果想用第一种让post是一个指针变量并且有空间,应该这样写。声明为指针但是并没有为其分配内存空间,这意味着它的值为。时可以访问到有效的内存空间,而不会导致内存错误。类型的变量,并为其分配了内存空间。创建了一个新的对象,这个对象在内存空间,变量的地址传递给了方法。,并且没有指向有效的。
2023-12-29 00:02:12
1095
原创 Arthas的简单使用
Arthas 是一个开源的 Java 诊断工具,旨在帮助开发者和运维人员更轻松地定位和解决 Java 应用程序的性能问题。则更注重于追踪方法的调用链,帮助理解代码执行流程。在实际使用中,可以根据具体需求选择合适的命令。命令输出的信息可能较为详细,对于频繁调用的方法,可能会导致输出信息过多。对于一个最基本的使用来说,就是记录下当前方法的每次调用环境现场。主要用于监控方法的执行情况,关注方法的入口、执行时间等;线上有一个接口很慢,用trace跟踪。thread -b 死锁线程。看线上的代码与线下有什么不同。
2023-10-30 11:26:59
310
原创 星火大模型AI接口Spring中项目中使用【星火、AIGC】
由官方描述可见,其中 payload.choice.text中的内容就是构造的MsgDto, 根据官方文档给出的接口响应构造XfunReceieveRequest;这样整个星火的AIGC就设计完成,可以随意复用在任意的项目之中,利用XfunListener即可发送消息或获取消息。在项目中使用我们需要一个Config进行全局配置,一个WebListener发送接受请求,还有与星火交互的DTO。详细的数据处理,发送消息,另外写一个AI的Service做具体的处理即可。AiManager运行结果。
2023-10-06 21:29:19
2778
3
原创 2.2比特币(BTC)中的数据结构
这节讲了比特币中两种最基本的结构:区块链和merkle tree,都是用哈希指针来构造的。除了这两种之外,哈希指针还能用另一个方面。只要一个数据结构是无环的(非循环链表),都能用哈希指针代替普通指针。有环的话存在一个问题,他们的哈希值没法计算,没法确定一个哈希值固定的区块。
2022-11-10 15:30:24
1617
原创 4.3 Go中的字符串及派生类型
Go 语言中字符串默认是 UTF-8 编码的 Unicode 字符序列,所以可以包含非 ANSI 字符,比如「Hello, 学院君」可以出现在 Go 代码中。字符串的编码转换是处理文本文档(比如 TXT、XML、HTML 等)时非常常见的需求,不过 Go 语言默认仅支持 UTF-8 和 Unicode 编码,对于其他编码,Go 语言标准库并没有内置的编码转换支持。函数来求取我们的slice的长度和容量(长度就是我们当前slice中存了多少了元素,而容量是slice最大可以容纳的元素数量。
2022-11-09 15:01:15
523
原创 2. Go中的常用命令
go使用包和模块来组织代码,包对应到文件系统,模块就是.go的源文件。一个包有多个模块或子包。参考文档:https://golang.org/doc/cmd。作用:生成exe文件。显示go环境变量信息。搜索mysql这个包。
2022-11-07 19:47:31
418
原创 1.GO语言的第一步
Go(又称Golang)是 Google 的 Robert Griesemer,Rob Pike 及 Ken Thompson 开发的一种静态强类型、编译型语言。Go 语言语法与 C 相近,但功能上有:内存安全,GC(垃圾回收),结构形态及 CSP-style 并发计算。
2022-11-06 20:34:44
349
原创 形式化方法综述
形式化方法是基于严格数学基础,对计算机硬件和软件系统进行描述、开发和验证的技术.其数学基础建立在形式语言、语义和推理证明三位一体的形式逻辑系统之上. 形式化方法已经成功应用于各种硬件设计,特别是芯片的设计.由于软件系统的复杂性和不确定性远远超出硬件系统,形式化方法在软件开发中应用程度并不高.
2022-09-27 18:54:58
2518
原创 《Principles of Model Checking》Chapter 5 Linear Temporal Logic
时间逻辑中时间的本质可以是线性的,也可以是分支的。在线性视图中,每一时刻都有一个单一的后续时刻,而在分支视图中,它有一个分支的树状结构,时间可以分为不同的过程。本章讨论LTL(线性时态逻辑),一种基于线性时间视角的时态逻辑。第6章介绍了CTL(计算树逻辑),这是一种基于分支时间视图的逻辑。LTL的主要优点之一是,强加公平性假设(如强公平性和弱公平性)不需要使用任何新机制:典型的公平性假设都可以在LTL中指定。 本章介绍(命题)线性时序逻辑(LTL),这是一种适用于指定LT属性的逻辑形式。
2022-09-17 19:03:11
366
原创 《Principles of Model Checking》Chapter 4 Regular Properties
本章讨论了一些基本算法,以验证重要的安全性、活性和广泛的其他线性时间特性。我们首先考虑正则安全属性,即其坏前缀构成正则语言的安全属性,因此可以由有限自动机识别。对于给定的有限转移系统TS,检查安全属性Psafe的算法依赖于使用识别Psafe坏前缀的有限自动机对TS的特定乘积构造中的不变检查问题进行简化。,Büchi自动机是有限自动机的一种变体,它接受无限(而不是有限)单词。然后**,我们将这种基于自动机的验证算法推广到一类更大的线性时间属性,即所谓的ω-正则属性。
2022-09-17 18:52:20
332
原创 《Principles of Model Checking》 Chapter 3 Linear time properties (线性时间特性)
为了排除“不切实际”的计算,对TS的轨迹施加公平性假设,并检查TS |=F P,而不是检查TS(无公平性)。但这到底意味着什么?对于互斥算法,“坏”的是不止一个进程处于其关键部分,而对于红绿灯,“坏”的情况是当红灯相位之前没有黄灯相位时。由于检查命题公式Φ的不变量相当于检查Φ在从某个初始状态可到达的每个状态中的有效性,只要给定的转换系统TS是有限的,则对深度优先搜索(DFS)或广度优先搜索(BFS)等标准图遍历算法稍加修改即可。更准确地说,它指出,唯一既安全又活跃的属性是非限制性的,即允许所有可能的行为。
2022-09-15 23:10:59
309
原创 《Principles of Model Checking》 2.2 Parallelism and Communication (并行性和通信)
在2.1中简单的顺序软硬件建模成的转换系统,然而在现实中绝大多数硬件和软件系统在本质上是不连续的,而是并行的,本节描述了几种通过转换模型为并行系统建模的几种机制。这些机制包括简单的机制,其中参与的转换系统之间不发生通信,以及更高级方案,其中消息可以(即通过“握手”)或**异步传输。
2022-09-07 10:59:56
340
原创 《Principles of Model Checking》Chapter 2 Modelling Concurrent Systems 2.1 Transition Systems(转换系统)
模型检查的先决条件是考虑中的系统模型即对系统进行建模。本章介绍了转换系统(transition systems),这是一种(到目前为止)表示硬件和软件系统的标准模型类。讨论了并发系统建模的不同方面,从进程完全自主运行的简单情况到进程以某种方式通信的更真实的情况。 转换系统在计算机科学中经常被用作描述系统行为的模型。它们基本上是有向图,其中节点表示状态,边模型转换,即状态变化。状态描述了系统在其行为的特定时刻的一些信息。例如,交通灯的状态指示灯的当前颜色。类似地,顺序计算机程序的状态指示所有程序变量的当
2022-07-14 10:38:35
380
原创 滑动窗口算法
核心是利用双指针维护一个不断变化的区间(维护一个窗口,不断滑动,然后更新答案)。只需要思考以下几个问题:1、什么时候应该移动 扩大窗口?窗口加入字符时,应该更新哪些数据?2、什么时候窗口应该暂停扩大,开始移动 缩小窗口?从窗口移出字符时,应该更新哪些数据?3、我们要的结果应该在扩大窗口时还是缩小窗口时进行更新?给你一个字符串 、一个字符串 。返回 中涵盖 所有字符的最小子串。如果 中不存在涵盖 所有字符的子串,则返回空字符串 。...
2022-07-05 15:49:47
187
原创 《Principles of Model Checking》Charpter 1 System Verification
The reliability of ICT systems is a key issuein the system design process. --ICT系统的可靠性是系统设计过程中的一个关键问题。系统验证技术正以更可靠的方式应用于ICT系统的设计。本规范规定了系统必须做什么和不做什么,因此构成了任何验证活动的基础。一旦系统不满足规范属性之一,就会发现缺陷。只要系统满足从其规范中获得的所有特性,则认为该系统是“正确的”。因此,正确性总是相对于规范,而不是系统的绝对属性。Software Verif
2022-07-05 11:36:45
317
原创 Java中的Lamda表达式
以极其简略的方式创建一个接口的实例,通常只适用于一个接口中只有一个方法的接口形式具体形式:使用Lambda时,要记住的就两点:这个表达式在干什么?进入PriorityQueue源码观察其构造函数再看这个Comparator接口的源码第二个例子:第三个例子:四种应用型接口此部分转自:https://www.zhihu.com/question/37872003/answer/2546842195使用:2.消费型接口使用:3.断言型接口使用:4.函数型接口使用:...
2022-07-04 15:39:48
305
原创 664. 奇怪的打印机(动态规划)
664. 奇怪的打印机(动态规划)有台奇怪的打印机有以下两个特殊要求:打印机每次只能打印由 同一个字符 组成的序列。每次可以在任意起始和结束位置打印新字符,并且会覆盖掉原来已有的字符。给你一个字符串 s ,你的任务是计算这个打印机打印它需要的最少打印次数。示例 1:输入:s = "aaabbb"输出:2解释:首先打印 "aaa" 然后打印 "bbb"。示例 2:输入:s = "aba"输出:2解释:首先打印 "aaa" 然后在第二个位置打印 "b" 覆盖掉原来的字符 'a'。
2021-05-24 10:47:37
181
原创 872. 叶子相似的树(递归、迭代、中序)
872. 叶子相似的树请考虑一棵二叉树上所有的叶子,这些叶子的值按从左到右的顺序排列形成一个 叶值序列 。举个例子,如上图所示,给定一棵叶值序列为 (6, 7, 4, 9, 8) 的树。如果有两棵二叉树的叶值序列是相同,那么我们就认为它们是 叶相似 的。如果给定的两个根结点分别为 root1 和 root2 的树是叶相似的,则返回 true;否则返回 false 。示例 1:解法一、递归深度优先搜索的顺序就是本题叶值序列的顺序class Solution { List<In
2021-05-10 16:39:40
165
原创 制作 m 束花所需的最少天数(二分)
1482. 制作 m 束花所需的最少天数给你一个整数数组 bloomDay,以及两个整数 m 和 k 。现需要制作 m 束花。制作花束时,需要使用花园中 相邻的 k 朵花 。花园中有 n 朵花,第 i 朵花会在 bloomDay[i] 时盛开,恰好 可以用于 一束 花中。请你返回从花园中摘 m 束花需要等待的最少的天数。如果不能摘到 m 束花则返回 -1 。示例一:输入:bloomDay = [1,10,3,10,2], m = 3, k = 1输出:3解释:让我们一起观察这三天的花开过程
2021-05-10 16:16:54
193
原创 21. 合并两个有序链表(简单迭代、递归)
21. 合并两个有序链表(简单迭代、递归)将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。解法一:遍历(简单迭代)用一个哨兵,遍历l1,l2比较大小,小的接到哨兵后。l1 l2的剩余接到哨兵后。class Solution { public ListNode mergeTwoLists(ListNode l1, ListNode l2) { if(l1 == null) return l2; if(l2
2021-05-06 10:46:41
63
原创 20. 有效的括号(栈)
20. 有效的括号(栈)给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。解法:遍历整个字符串,遇到左括号先入栈,遇到右括号则退栈匹配,此时若栈空或不匹配则返回false。遍历完成后栈空则返回true。class Solution { public boolean isValid(String s) { if(s.length()==1) r
2021-05-06 10:09:19
53
原创 198. 打家劫舍(动态规划)
198. 打家劫舍你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。解法:动态规划1.定义子问题, 偷n个房间,每个房间都可以选择与不偷(有时不能偷,可以强行理解为选择不偷)那么就有f[k][0]表示不偷第k个时的最大金额,f[k][1]表示偷第k个时的最大金
2021-05-06 09:09:50
56
原创 27.移除元素(双指针)
27.移除元素(双指针)给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。说明:为什么返回数值是整数,但输出的答案是数组呢?请注意,输入数组是以「引用」方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。你可以想象内部操作如下:方法一:通用解法设定一个待插入位置j,另一个位置遍历
2021-05-06 09:05:52
118
原创 19.. 删除链表的倒数第 N 个结点(快慢指针、栈、递归)
19. 删除链表的倒数第 N 个结点(快慢指针、栈、递归)给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。**进阶:**你能尝试使用一趟扫描实现吗?解法一、计算链表长度先对链表遍历一遍计算出长度,再遍历到第L-n个结点,这个节点的下一个结点删除就ok了。class Solution { public ListNode removeNthFromEnd(ListNode head, int n) { ListNode dummy = new ListNod
2021-05-06 09:04:50
233
1
原创 1720. 解码异或后的数组
1720. 解码异或后的数组**未知** 整数数组 arr 由 n 个非负整数组成。经编码后变为长度为 n - 1 的另一个整数数组 encoded ,其中 encoded[i] = arr[i] XOR arr[i + 1] 。例如,arr = [1,0,2,1] 经编码后得到 encoded = [1,2,3] 。给你编码后的数组 encoded 和原数组 arr 的第一个元素 first(arr[0])。请解码返回原数组 arr 。可以证明答案存在并且是唯一的。解:由异或运算 a^b
2021-05-06 09:00:12
55
原创 15. 三数之和(排序+双指针)
题目给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。注意:答案中不可以包含重复的三元组。思路首先想到的就是遍历,三重遍历暴力求解不太靠谱,时间复杂度是O(n3n^3n3).很暴力。两数之和双指针的做法:在一个有序数列,若找两数之和为0,用序列中最大(最左边)和最小(最右边)相加,小于0需要增大两数,左指针右移增大,大于0则需要减小两数,右指针左移减小,遇到等于0记录下来就好了。
2021-04-28 22:48:40
115
原创 二分总结
二分法二分查找算法的基本思想 在一个有序序列中,取中值与目标值做对比,从而选取左区间之一,不断重复取值选区间这个过程,直到找到值或者达到边界条件而退出循环。由基本思想可以的到二分的两个关键点:左右区间的选取(包不包含中值)-- 闭区间还是开区间 [left,mid]/[left,mid)/(mid,right]/[mid,right]边界条件的选取 (l<=r或l<r)l<=r 的情况下,循环中的最后一步l==r,此时中值索引是l®,中值与target作比较导致 l+1
2021-04-27 17:29:58
171
原创 173. 二叉搜索树迭代器(中序遍历的递归法与迭代法)
173. 二叉搜索树迭代器(中序遍历的递归法与迭代法)实现一个二叉搜索树迭代器类BSTIterator ,表示一个按中序遍历二叉搜索树(BST)的迭代器:BSTIterator(TreeNode root) 初始化 BSTIterator 类的一个对象。BST 的根节点 root 会作为构造函数的一部分给出。指针应初始化为一个不存在于 BST 中的数字,且该数字小于 BST 中的任何元素。boolean hasNext() 如果向指针右侧遍历存在数字,则返回 true ;否则返回 false 。in
2021-03-28 10:42:08
238
原创 删除排序链表中的重复元素(递归与非递归)
82.删除排序链表中的重复元素(递归与非递归)存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除链表中所有存在数字重复情况的节点,只保留原始链表中 没有重复出现 的数字。返回同样按升序排列的结果链表。解法一、非递归遍历class Solution { public ListNode deleteDuplicates(ListNode head) { ListNode p = head,h = new ListNode(0),ht = h; //虚拟头节点
2021-03-27 13:09:12
245
原创 旋转链表(闭合成环,快慢指针)
61. 旋转链表给你一个链表的头节点 head ,旋转链表,将链表每个节点向右移动 k 个位置。给你一个链表的头节点 head ,旋转链表,将链表每个节点向右移动 k 个位置。解法一、2圈遍历(先成环,再断开) /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(in
2021-03-27 10:49:45
123
原创 长整数(位运算,循环移位)
题目输入一个无符号长整数,将最高字节与最低字节互换,然后输出。将这个长整数中间两个字节循环左移n位(n要输入),然后再输出。将长整数按照二进制输出,每8位输出一个空格。第一部分 最高字节与最低字节互换一.位运算& 与 两者都为1,结果才为1;(1).清零 a&0=0(2).判断某一位是否为1 10000111 & 10000000= 10000000 ; 00000111 & 10000000 = 0(3).取一个数字的指定位 a&
2021-03-22 22:52:20
838
原创 191.位1的个数(位运算)
位1的个数(位运算)编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为汉明重量)。位运算& 与 两者都为1,结果才为1;(1).清零 a&0=0(2).判断某一位是否为1 10000111 & 10000000= 10000000 ; 00000111 & 10000000 = 0(3).取一个数字的指定位 a&0000 1111,取a都后四位 (2)(3)一个意思(4).
2021-03-22 12:26:35
186
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人