- 博客(82)
- 收藏
- 关注
原创 C 结构体链表的一点想法
我觉得这样的作法并不是太好,虽然从实现上是可行的,但这样会使 list 的职责不单一,也就是说结构体中的 list 节点可能是该结构体是一个链表节点,也可能是某个链表的链表头,而且某个结构体会出现多个 list 成员,这样结构体的可读性也不够高。这样的话 list 的职责就单一了,每个结构体只会含有一个 list,每个 list 必然连接的结构体是相同的。如果把另外两个链表头换成另外两个结构体的指针,这样能保证每个结构体都只有一个 list,而且职责单一,保证该 list 一定是表示该结构体是链表成员。
2024-03-21 16:38:26
362
1
原创 vscode java 项目无法运行和显示依赖问题
vscode 运行项目可能会有找不到主类的错误,import 的外部依赖模块无法正常读取和显示,其他一切正常。
2023-07-09 14:05:00
2334
1
原创 哀悼左耳朵耗子陈皓老师
从来没有哪个大佬去世让我这么震撼,我是耗子叔的忠实追随者,从 coolshell 上的每一篇精彩文章,到左耳听风专栏,到 github 上依然在乐此不疲的更新 leetcode 算法,无不让每位热爱技术的人佩服,包括我的网站名 coolsite 也是致敬耗子叔。另外,我在至少45岁前不会出书,因为我觉得在那之前,我是不会沉淀足够的学识,没有资格出书。今天得知了一个噩耗,我最敬重的程序员大佬,左耳朵耗子陈皓老师突发心梗去世了。耗子叔专栏的头像已灰,我的学习进度还没有完成,虽然很多文章都反复读了很多遍。
2023-05-15 15:39:28
315
原创 从 level-ip 源码来看 TCP 如何接收消息
陈硕的书中有说到过网络编程有三个层次:● 读过教程和文档,做过练习● 熟悉本系统 TCP/IP 协议栈的脾气● 自己写过一个简单的 TCP/IP stack个人觉得自己第一层次已经没有什么问题,自己编写过一些经典的的网络编程代码(chat、echo、proxy),能够不错地运行在开发环境;第二层次通过自己开发的 serverlite 网络库也对网络编程和 TCP/IP 的一些坑有所了解,欠缺一些线上调试和解决问题的经验,这个需要多年的工作积累目前尚未达到,所以第二层次算是入门。但经验积累不是一蹴
2023-01-14 15:31:38
691
原创 ros 框架解析-订阅部分
本文从roscpp源码的角度解析ros框架的订阅部分,目的是分析订阅相关的各个类的关系和作用,从而熟悉ros订阅功能底层调用过程,和ros节点之间的通信方式。源码地址是https。
2022-07-24 19:01:18
870
原创 Docker 中修改时区的问题
最近在 Docker 中修改时区遇到了一个问题,就是 python3 启动 apscheduler 时会通过接口去拿系统时区,而我之前 Docker 中的时区是这么改的:然后报错这样:解决方案大概意思是目标的时区配置文件和 /etc/timezone 中的时区名冲突,代码试图去拿 /etc/localtime 软链接指向的文件,而因为我是通过拷贝将 Asia/Shanghai 拷贝到 /etc/localtime,而该文件软链接指向的文件是 UCT,所以导致的错误。正确操作是使用软链接将 软链接到
2022-06-24 17:05:39
2257
2
原创 flask-admin 中显示视图如何修改时区显示
用 flask admin 的时候,有转换显示视图字段的需求,比如修改时区因为可能数据库中存储的字段是utc时间戳,所以显示的时候需要转换为国内时区。假如字段为 update_time,数据类型为 datetime.datetime。我们需要将 update_time 修改为国内时区,并格式化显示。首先解决的问题是如何修改 flask-admin 的视图字段,通过文档可查阅,column_formatters 可以修改字段显示格式。class MyModelView(BaseModelView.
2022-03-24 11:46:19
2009
原创 Nginx 内存池源码解析
内存池是一种节省内存的技术方案,Nginx 实现的内存池代码精炼且实用,值得我们深入学习,一探究竟。Nginx 使用内存池主要有以下原因:内存管理Nginx 通过直接申请一整块内存的方式,来代替开发者主动去堆中申请内存块,开发者主动从堆中申请内存,所以申请的内存可以用内存池统一释放。这样的好处是开发者无需对自己申请的每一块内存都释放,可以由一个地方统一释放,这样能解决大部分的内存泄露问题。内存碎片如果手动从堆中分配内存,且如果分配了大量的小内存块,则有内存碎片的情况。频繁系统调用多
2022-03-14 14:54:13
3189
原创 libevent 实现一个 TcpRelay
libevent 实现一个 TcpRelay前言最近用 libevent 实现了一个 TcpRelay,也叫 TCP 中继器,同时连接客户端和服务端来使双方进行间接的通信。一般是为了解决客户端无法直接访问服务端的情况,可以通过 TcpRelay 来替双方转发消息,是比较简单的网络程序,只需把收到的数据交给另一方就行。使用 libevent 的目的第一个是熟悉这个网络库,抱着学习的态度来使用,也想和最近正在看的 muduo 库做一些比较;其次是熟悉代理服务器的一些实现方法,所以就先从简单的 tcpre
2021-11-07 19:01:56
451
原创 Redis 请求的一次网络旅程
Redis 请求的一次网络旅程Redis 不必多说,可以说是目前互联网使用最广泛的内存数据库,源于其丰富的数据结构、支持数据持久化、集群、高性能的这些特性。本文从 Redis 单线程模式,对于 Redis 客户端从登录到发送消息和收到消息的连续的行为,以 Redis 源码的角度做出解释,详细分析一个 Redis 连接的完整旅程,也作为我在 Redis 学习过程中的一个深入思考的过程。要解释 Redis 连接的完整过程,事实上主要是对 Redis 网络模型进行分析,因此会分为这几个部分(服务端角度)
2021-08-22 21:43:11
423
原创 Docker中配置Git环境
Docker中配置Git环境工作中遇到了需要在Docker环境中操作GitLab仓库的场景,需要事先在Docker中搭好Git环境。由于在Docker中对Git仓库操作是全自动化的,因此需要免密拉取仓库和提交等操作,我这里是使用SSH来进行免密操作。所以首先是配置SSH,其次是配置Docker环境。配置SSH Key先生成SSH key:ssh-agenteval $(ssh-agent -s)ssh-keygen -o -t rsa -b 4096 -C "{username}"ssh-
2021-08-10 15:47:30
8374
原创 一起写一个 Nginx 访问统计模块
前言Nginx 是一款强大的web服务器,是由核心模块和其他的一系列模块一起组成,其高度模块化的设计使得Nginx的扩展和开发十分方便。Nginx提供了web反向代理服务、email邮件服务、负载均衡、web服务器等功能,其核心模块Nginx core提供了通讯、运行环境,是所有其他模块协作的基石。本文将会手撸一个访问统计模块,统计每一个 IP 的页面访问次数,业务并不复杂,只是用来学习 Nginx 模块的编写方法。在这之前,先简单介绍下 Nginx 模块的基本理论。Nginx 模块概述Nginx
2021-07-04 21:00:39
638
3
原创 重读&笔记系列-《深入理解计算机系统》第三章-part3,part4
Machine Programming III: ProceduresMechanisms in ProceduresPassing controlTo beginning of procedure codeBack to return pointPassing dataProcedure argumentsReturn valueMemory managementAllocate during procedure executionMechanisms al
2021-05-27 21:02:38
402
原创 CSAPP实验之Bomb Lab详解
文章目录前言phase 1phase 2phase 3phase 4phase 5phase 6总结和感想前言Bomb Lab来自《深入理解计算机系统》(CSAPP)一书的第三章“程序的机器级表示”的配套实验,该实验的目的是通过反汇编可执行程序,来反推出程序执行内容,进而能够正确破解”密码“,解除“炸弹”。Bomb Lab文件目录如下:├── bomb├── bomb.c└── READMEbomb: 可执行程序,我们需要对其进行反汇编和gdb调试。bomb.c: bomb的主函数mai
2021-05-23 19:12:52
19815
9
原创 重读&笔记系列-《深入理解计算机系统》第三章-part1,part2
Machine Programming IMachine Programming I: BasicHistory of Intel processors and architecturesC, assembly, machine codeDefinitionArchitecture: also ISA instruction set architecture) The parts of a processor design that one needs to understand or wri
2021-05-05 22:39:03
1805
原创 让链表跳起来--SkipList的原理及实现
让链表跳起来–SkipList的原理及实现引言Skip lists are a data structure that can be used in place of balanced trees. Skip lists use probabilistic balancing rather than strictly enforced balancing and as a result the algorithms for insertion and deletion in skip lists ar
2021-04-11 22:42:25
403
原创 重读&笔记系列-《Linux多线程服务端编程》第一章
C++《linux多线程服务端编程》笔记1 线程安全生命期管理析构函数与多线程C++多线程的几种竞态条件:析构时如何保证本对象不正在被执行使用使用对象时如何保证不正在被析构使用对象时本对象是否还活着线程安全class的三个条件:多线程访问能够正确执行多线程执行顺序不会影响程序行为无须额外同步或协调使用 MutexLock 和 MutexLockGuard 封装 mutex。线程安全的Counter(部分):int64_t Counter::value() const{
2021-03-28 23:01:10
281
原创 重读&笔记系列-《深入理解计算机系统》第一章
《深入理解计算机系统》笔记1 计算机系统漫游计算机由系统软件和硬件组成,其内在概念亘古不变。通过对hello world程序的生命期来了解计算机系统。1.1 信息就是位+上下文信息+上下文=信息,不同类型的信息有不同的上下文,上下文就是编码规则。只由ASCII字符构成的文件为文本文件,其他所有文件为二进制文件。C语言成功的因素:Unix由C语言编写、小而简单、为实践目的设计。1.2 程序被翻译成不同的格式预处理阶段(.c->.i):处理#开头的命令,载入头文件,替换宏定义。编译阶
2021-03-26 21:53:25
169
原创 Python3缺少sqlite3或openssl的问题
最近对需要在一台内网环境的服务器上离线手动安装python3,操作系统为ubuntu16.04,遇到的问题特此记录问题描述在python导入模块sqlite3和openssl过程中出现如下错误:手动编译python3过程中出现以下错误:这些错误说明了以下几点:ssl相关的库文件libssl.so.1.1, libcrypto.so.1.1未找到sqlite3等模块相关文件未找到无法安装ssl模块由于库文件无法找到的原因,未能成功安装那么我们一一解决以上问题。1 手..
2021-01-19 10:48:34
1667
原创 awk根据指定字符串内容排序
引言最近需要对一个MarkDown表格进行排序,关键字段是在第一个的两个|中间,如下|8|String to Integer (atoi) | C++|Medium||5|Longest Palindromic Substring | C++|Medium||17|Letter Combinations of a Phone Number | C++|Medium||538|Convert BST to Greater Tree | C++|Medium||1122|Relative Sort
2020-12-19 14:31:00
907
1
转载 从CODE REVIEW 谈如何做技术
https://coolshell.cn/articles/11432.html这两天,在微博上表达了一下Code Review的重要性。因为翻看了阿里内部的Review Board上的记录,从上面发现Code Review做得好的是一些比较偏技术的团队,而偏业务的技术团队基本上没有看到Code Review的记录。当然,这并不能说没有记录他们就没有做Code Review,于是,我就问了一下以前在业务团队做过的同事有没有Code Review,他告诉我不但没有Code Review,而且他认为Cod.
2020-07-08 15:46:07
286
原创 LeetCode - 切割后面积最大的蛋糕
题目链接:https://leetcode-cn.com/problems/maximum-area-of-a-piece-of-cake-after-horizontal-and-vertical-cuts/题目描述矩形蛋糕的高度为h且宽度为w,给你两个整数数组 horizontalCuts 和 verticalCuts,其中 horizontalCuts[i] 是从矩形蛋糕顶部到第 i 个水平切口的距离,类似地, verticalCuts[j] 是从矩形蛋糕的左侧到第 j 个竖直切口的距离。.
2020-05-31 23:25:59
368
原创 LeetCode - 打家劫舍
题目链接:https://leetcode-cn.com/problems/house-robber/题目描述你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。示例1:输入: [1,2,3,1]输出: 4解释: 偷窃 1 号房屋 (金额 = 1) ,.
2020-05-29 16:15:47
225
原创 LeetCode - 和可被 K 整除的子数组
题目链接:https://leetcode-cn.com/problems/subarray-sums-divisible-by-k/题目描述给定一个整数数组 A,返回其中元素之和可被 K 整除的(连续、非空)子数组的数目。示例:输入: A = [4,5,0,-2,-3,1], K = 5输出: 7解释: 有 7 个子数组满足其元素之和可被 K = 5 整除:[4, 5, 0, -2, -3, 1], [5], [5, 0], [5, 0, -2, -3], [0], [0, -2, -.
2020-05-28 18:58:40
383
原创 LeetCode - 点菜展示表
题目链接:https://leetcode-cn.com/problems/display-table-of-food-orders-in-a-restaurant/题目描述给你一个数组 orders,表示客户在餐厅中完成的订单,确切地说, orders[i]=[customerNamei,tableNumberi,foodItemi],其中 customerNamei是客户的姓名,tableNumberi是客户所在餐桌的桌号,而 foodItemi是客户点的餐品名称。请你返回该餐厅的 点菜展示表.
2020-05-24 19:42:40
329
原创 C++的string类型中关于append函数、push_back函数和+=运算符的区别
内容翻译自 https://www.geeksforgeeks.org/stdstringappend-vs-stdstringpush_back-vs-operator-c/?ref=lbp引言C++的string类中,要想在字符串后附加字符,可以使用append函数、push_back函数或者是+=运算符,这些附加字符的方法其实现不尽相同,因此应用场景也不同。首先我们先一窥源码(gcc 4.9.2):basic_string.h: //---------------------------.
2020-05-22 16:19:59
6580
2
原创 LeetCode - 二叉搜索树的最近公共祖先
题目链接:https://leetcode-cn.com/problems/lowest-common-ancestor-of-a-binary-search-tree/题目描述给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。例如,给定如下二叉搜索树: root = [6,2,8,0,4,7,9,n.
2020-05-14 01:34:56
135
原创 LeetCode - 旋转链表
题目链接:https://leetcode-cn.com/problems/rotate-list/题目描述给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数。示例1:输入: 1->2->3->4->5->NULL, k = 2输出: 4->5->1->2->3->NULL解释:向右旋转 1...
2020-03-12 08:11:45
161
原创 LeetCode - 常数时间插入、删除和获取随机元素
题目链接:https://leetcode-cn.com/problems/insert-delete-getrandom-o1/题目描述设计一个支持在平均 时间复杂度 O(1) 下,执行以下操作的数据结构。insert(val):当元素 val 不存在时,向集合中插入该项。remove(val):元素 val 存在时,从集合中移除该项。getRandom:随机返回现有集合中的一项...
2019-11-05 15:19:07
215
原创 LeetCode - 组合总和
题目链接:https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/题目描述给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的数字可以无限制重复被选取。说明:...
2019-10-29 22:09:14
150
原创 LeetCode - 无重复字符的最长子串
题目链接:https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/题目描述给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例1:输入: “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。示例2:输入:...
2019-09-28 17:57:40
130
原创 深信服面经
赶在十月一之前勉强上岸了,发一波之前面深信服的面经其实深信服线上笔试做的挺烂的,竟然收到了面试通知。之前一些大厂笔试做的感觉挺好的却没面试,真是玄学的秋招。深信服一面构造函数能否为虚函数析构函数能否为虚函数呢(看一段电脑上的代码)问输出的内容是啥?(代码内容是有两个类,然后主函数循环输出子类的虚表指向的函数内容,考虚函数表的内存分布)(又给看了一段代码)问其中几个表达式用的是拷贝...
2019-09-28 17:40:55
766
原创 C++原理剖析之虚函数表
最近在看C++的一些相关的机制,再加上刚看了陈皓大神的早期关于虚函数表的博客,便自己动手通过编程了解了下虚函数表的原理。前言c++是通过虚函数来实现多态的的机制。我们可以通过将父类的指针指向子类的实例,如Base b = new Derive(),如此一来,如果子类Derive中重载了父类中的一个函数h(),那么调用b->h()等同于调用Derive d, d->h()。我们这...
2019-09-22 20:04:00
203
原创 腾讯提前批一面面经
关于腾讯提前批话说其实我根本就没投提前批(也没想投,博主双非渣硕),我只是准备多看看基础参加正式批。只是之前投过腾讯实习,但笔试的时候刚好和其他笔试冲突就没参加笔试。没想到提前批被捞,让我异常惊讶,导致接到面试官电话后约我7号晚上7点面试,我都有些觉得不可思议。以至于我又问了一遍:“你好,你刚说明晚是干啥?” “明晚面试,有时间吗?” “有时间,有时间……”。提前批面试是8月7号,对我来说太早了...
2019-08-16 23:02:22
670
1
原创 LeetCode - 两两交换链表中的节点
题目链接:https://leetcode-cn.com/problems/swap-nodes-in-pairs/题目描述给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。示例1:给定 1->2->3->4, 你应该返回 2->1->4->3.我的思路一道比较简单的链...
2019-07-30 23:52:16
148
原创 LeetCode - 交替打印FooBar
题目链接:https://leetcode-cn.com/problems/print-foobar-alternately/题目描述我们提供一个类:class FooBar { public void foo() { for (int i = 0; i < n; i++) { print("foo"); } } public void b...
2019-07-26 00:11:28
500
原创 LeetCode - Z 字形变换
题目链接:https://leetcode-cn.com/problems/zigzag-conversion题目描述将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。比如输入字符串为 “LEETCODEISHIRING” 行数为 3 时,排列如下:·L C I R··E T O E S I I G··E D H N·之后,你的输出...
2019-07-07 21:22:19
3106
13
原创 LeetCode - 子集II
题目链接:https://leetcode-cn.com/problems/subsets-ii/题目描述给定一组可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。说明: 解集不能包含重复的子集。示例:输入: nums = [1,2,2]输出:[[2],[1],[1,2,2],[2,2],[1,2],[]]我的思路是LeetCode...
2019-06-27 15:49:18
202
原创 LeetCode - 盛最多水的容器
题目链接:https://leetcode-cn.com/problems/container-with-most-water题目描述给定 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。说明: 你...
2019-06-25 18:04:14
131
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人