闫++
码龄5年
关注
提问 私信
  • 博客:38,332
    38,332
    总访问量
  • 72
    原创
  • 2,174,463
    排名
  • 24
    粉丝
  • 0
    铁粉

个人简介:当无法抉择时,就走最难的那条路。

IP属地以运营商信息为准,境内显示到省(区、市),境外显示到国家(地区)
IP 属地:广东省
  • 加入CSDN时间: 2019-09-12
博客简介:

yanchenzhi的博客

博客描述:
一步一步,脚踏实地。
查看详细资料
个人成就
  • 获得27次点赞
  • 内容获得5次评论
  • 获得67次收藏
创作历程
  • 73篇
    2020年
成就勋章
TA的专栏
  • 力扣
    6篇
创作活动更多

如何做好一份技术文档?

无论你是技术大神还是初涉此领域的新手,都欢迎分享你的宝贵经验、独到见解与创新方法,为技术传播之路点亮明灯!

342人参与 去创作
  • 最近
  • 文章
  • 代码仓
  • 资源
  • 问答
  • 帖子
  • 视频
  • 课程
  • 关注/订阅/互动
  • 收藏
搜TA的内容
搜索 取消

考古题—剑指offer67:字符串转整数

以一个考古题开始新的一天,训练一下自己的代码能力,题意就不贴了,说下注意点吧:先除去开始的空格判断正负开头的0舍去溢出判断我做了两个,第一段代码没有经过优化,一遍ac,但是问题很多,所以优化了一下成了第二段代码,其中还是有class Solution {public: int strToInt(string str) { int len=str.length(); if(len==0) return 0; in
原创
发布博客 2020.10.29 ·
321 阅读 ·
0 点赞 ·
1 评论 ·
0 收藏

用户态和内核态—>虚拟地址映射

什么是内核态和用户态这是程序运行的两种状态。要理解这两个状态首先要理解用户空间和内核空间。Linux有4GB的地址空间,其中,0-3G是属于用户空间,3-4G是内核空间。用户空间一般运行应用程序,内核空间一般运行操作系统和驱动程序。两者之间自然不能简单地使用指针传递数据,这是后话,地址映射的关系了。回到我们的内核态和用户态。内核态和用户态的定义就从这里出发:用户空间下执行的程序状态叫用户态,执行在内核空间时叫内核态。状态区分两种状态其实就是两种操作系统的运行level。一般来说,以intel c
原创
发布博客 2020.09.24 ·
1837 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

supervisor是什么?

简介supervisor是python开发的通用进程管理程序,可以将普通的命令行进程变成后台daemon,监控进程状态,当进程异常退出时可自动重启。原理通过fork/exec来把被管理进程当作自己的子进程来启动,只需将supervisor的配置文件加上进程可执行文件路径即可。当子进程异常后,父进程可以准确获取子进程挂掉的信息,可以选择自己启动和报警。安装yum install supervisor使用主要是配置文件的修改,supervisor和子进程均需修改。具体参数可自己查阅supervi
原创
发布博客 2020.08.13 ·
2449 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

二叉树的最大深度——基础题复习系列

力扣原题分析:要二叉树的深度,那么就要往深度方向递归,每深一层,就将层数++,由于左右子树的存在,所以我们要将左右进行比较,max的加1。递归法:深度优先/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), rig.
原创
发布博客 2020.07.28 ·
180 阅读 ·
1 点赞 ·
0 评论 ·
0 收藏

手撕一个shared_ptr吧

智能指针的优点不多赘述,前面的文章已经说过。这次直接手撕一个智能指针的代码顺便帮助自己理解一下智能指针的使用。首先,智能指针有几个注意点:智能指针适用于各类型参数,所以要用T模板;智能指针有引用计数,所以在构造和析构的时候要进行引用计数的加减;需要重载指针的“->”“*”功能,使其能像正常指针一样使用;主要是析构函数的不同之处在于加个条件判断好,那我们开始吧:class Shared_mptr {public: //空类构造,count,ptr均置空 Shared_mptr()
原创
发布博客 2020.07.26 ·
1200 阅读 ·
2 点赞 ·
0 评论 ·
8 收藏

最长连续子序列(揭开乱序数组的统一思路)

题目:输入两行,第一行包括一个整数n(1≤n≤10^5 ),第二行包含n个整数,分别代表arr[i]。输出一个整数,代表最长连续子序列的长度。思路:所要的是连续的子序列。比如第一个里面是1、2、3、4,那既然是连续的子序列,排序就可以了。然后顺序遍历一遍找到连续的长度就可。这个解法属实普通,在面试的时候面试官一般还会让继续优化。重点来了重点来了重点来了重要的话说三遍,当数组问题的时间复杂度一般是nlgn,如果此时需要继续优化,那就是n。能完成On时间复杂度的数据结构首选哈希表。所以,此处我们
原创
发布博客 2020.07.22 ·
1052 阅读 ·
2 点赞 ·
0 评论 ·
0 收藏

go语言中=和:=的区别—带例子步步详解

在初学go语言的时候发现有时候用var声明变量类型,但有时候代码又经常直接用变量,不声明,让c++选手很是困惑,这是什么操作。因此我对比了下代码中的异同,发现:“=”的使用与其他语言相同,赋值操作,但是此处的变量必须提前声明好类型,或者在声明的同时赋值。“:=”的使用则类似于c++中的auto操作,自动匹配变量类型,省去了声明变量类型操作,也就是你可以不声明,在赋值使用的时候多加个冒号就可以了。尽信书不如无书,自己来做个测试:=package mainimport "fmt"func
原创
发布博客 2020.06.27 ·
2971 阅读 ·
5 点赞 ·
1 评论 ·
11 收藏

socket的那些事-字节序及网络下相关类转换函数整理(atoi,htons)

网络编程api中socket是一个很好用的工具,但是从字符或者数值到网络可以使用中间还是要有转换的。所以这一章用来总结一下socket编程中的那些转换函数。atoi最简单的一个函数,常见于:int port = atoi( argv[2] );atoi的作用很简单,其原型如下:int atoi(const char* str);很明显,就是将str所指字符串转换为int型整数。主机字节序和网络字节序首先解释一下这两个是什么:网络字节序(Network byte order):按从高到
原创
发布博客 2020.06.12 ·
682 阅读 ·
2 点赞 ·
0 评论 ·
5 收藏

来写一个shell脚本吧(入门级,步步深入)——文末有统计CPU占用率

昨晚突然有亲密人士要求帮我弄个统计程序CPU占用率的东西。于是乎,就查啊查,pidstat什么的,都没有很好用。于是自己写了个脚本,于是系列的记录下脚本的写法。啥是脚本首先他是个脚本,这不是废话。别急,我的意思是他不是专门的编程语言。还是在shell下执行某些命令而已,套了个脚本的新名字。脚本的出现是为了方便操作人员。我们在运维程序时,有时候会执行一些shell命令来查看程序运行情况,top之类的。但当一个程序运行时间较长,或者需要定时/经常查看运行情况,(是不是有点像上一篇makefile的说辞,两
原创
发布博客 2020.05.31 ·
759 阅读 ·
0 点赞 ·
0 评论 ·
3 收藏

muduo整体架构

muduo整体架构
转载
发布博客 2020.05.28 ·
209 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

makefile简易版-快速理解并上手

简介软件开发中,make通常被视为一种软件构建工具。它通过makefile/Makefile的文件来实现自动化构建。以target来查找相关文件之间的依赖关系(对比文件的修改时间来实现)。来一步步看我们假设要生成一个yan的执行程序,有一份main主程序,其次是123代码和一个头文件yan.h。gcc -o yan main.c yan1.c yan2.c yan3.c在开发和调试过程中,我们需要不断键入此命令。这样的话有两个缺点:一是耗时,需要不断重复这一个命令;二是如果我们修改了某个文件,此
原创
发布博客 2020.05.25 ·
334 阅读 ·
1 点赞 ·
1 评论 ·
1 收藏

数学来辅助做题——乘积最大子数组

多的不说了,和前几天的差不多,直接上题。给你一个整数数组 nums ,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。示例 1:输入: [2,3,-2,4]输出: 6解释: 子数组 [2,3] 有最大乘积 6。示例 2:输入: [-2,0,-1]输出: 0解释: 结果不能为 2, 因为 [-2,-1] 不是子数组。暴力:class Solution {public: int maxProduct(vector<int>
原创
发布博客 2020.05.21 ·
238 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

蛮特殊的动态规划——和为k的子数组

之前已经讲过不少动态规划,无非就是申请一个数组记录之前的结果。今天的每日一题之前虽然做过,但是复习的时候发现忘了思路。于是单独摘出来进行记录。先看题吧,一个很朴素的题。给定一个整数数组和一个整数 k,你需要找到该数组中和为 k 的连续的子数组的个数。题目:示例 1 :输入:nums = [1,1,1], k = 2输出: 2 , [1,1] 与 [1,1] 为两种不同的情况。思路:题目越短,思路越简单,优化越难。来看这道题,就是找连续子数组的和满足k就好了。最简单的方式,暴力遍历所有数组。
原创
发布博客 2020.05.17 ·
501 阅读 ·
1 点赞 ·
0 评论 ·
0 收藏

二叉树的层序遍历——bfs和dfs起始章节

在很多问题中,我们都要对所有情况进行遍历,二叉树是其中的一项,再比如矩阵类。正好每日一题做到了,就顺便拿出来总结一下遍历。概念性的东西我就不说了,直接说我的理解,bfs就是从此点往四周遍历,就像水波往外扩散,特点就是先近后远,适合最短距离这种的。怎么实现?队列,先进先出,离得近的先进,近的下一个进,循环。上本题。题目:给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。示例:二叉树:[3,9,20,null,null,15,7],3/ 9 20/
原创
发布博客 2020.05.14 ·
415 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

muduo网络库学习(三)

这章是做一个聊天服务器,聊天功能是一个最基础也最常见的功能。虽然简单,但是基本的设计思想和问题还是很全面的,我们来一步步分析。TCP分包TCP字节流协议上做应用层分包是网络编程的基本需求。分包在发送一个消息或者一帧数据的时候,通过一定的处理,让接收方能从字节流中识别并截取出一个个消息。其实就可以理解为标点符号,一堆文字不加标点符号(我今天不想出门去写了一个博客就不知道后面写什么了完全就是演...
原创
发布博客 2020.05.09 ·
227 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

最低票价——死磕动态规划系列

题目在一个火车旅行很受欢迎的国度,你提前一年计划了一些火车旅行。在接下来的一年里,你要旅行的日子将以一个名为 days 的数组给出。每一项是一个从 1 到 365 的整数。火车票有三种不同的销售方式:一张为期一天的通行证售价为 costs[0] 美元;一张为期七天的通行证售价为 costs[1] 美元;一张为期三十天的通行证售价为 costs[2] 美元。通行证允许数天无限制的旅行。 ...
原创
发布博客 2020.05.08 ·
314 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

验证二叉搜索树——递归与循环的转换思想

题目给定一个二叉树,判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征:节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。思路既然是二叉搜索树,那么我们比较的其实就是左右子树和根的值。上上篇文章我们说过链表的考虑,由于是单项指针,所以我们要记住上一个的节点值,才能在之后进行比较。很简单的思想就是递归,递...
原创
发布博客 2020.05.06 ·
176 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

怎么使用动态规划——最大子序和(leetcodeT53)

怎么样才能较快的用出动态规划,做了力扣的每日一题,复习一遍动态规划。任何情况下,暴力法都是最简单和最直接的思路。任何解题技巧或优化,都是在暴力的基础上进行优化。所以,如果不是很熟悉优化解法,不要一开始就直接想动态规划怎么做这个题。先用暴力想出来问题,然后优化时间空间。从下面这个题来解释。题目:给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大...
原创
发布博客 2020.05.03 ·
223 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

指针在链表中——合并两个有序链表(链表头结点)

本来是个简单的题目,但是温故而知新,从指针的角度来重分析一下此题。题目:将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4思路:链表和二叉树是最常见的指针题,说到底无非就是指针指向问题。在实际的应用中,指针...
原创
发布博客 2020.05.01 ·
413 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

muduo网络库学习(二)

这章开始,正式进入网络库代码的学习。TCP示例作者举了五个TCP例子,用来讲解上章提到的三个半事件,以及muduo的编程思路。为方便,将上章所述的三个半事件摘了过来。连接的建立,服务端接受和客户端发起,连接后两者即对等,可以互收发数据。连接的断开,消息传递完毕的主动断开和被动断开。消息到达,文件描述符可读。对此事的处理就是网络编程性能的区别所在。也许应该是3.5,消息发送完毕。数据写...
原创
发布博客 2020.04.30 ·
260 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏
加载更多