自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(84)
  • 资源 (3)
  • 收藏
  • 关注

原创 Android 无线调试

1 进入开发者选项模式2 打开USB调试3 打开无线调试4 必须要先使用USB线连接手机,认证后,拔掉USB线5 将电脑和手机连接到同一个局域网内6 使用adb connect ip:port连接手机7 使用adb logcat -g查看日志缓冲区信息8 当然在导日志前可以先清空缓存区9 使用adb logcat可以将日志直接打印在屏幕上10 导出当前缓存区中的日志 adb logcat -d11 默认导出的日志是main system crash kernel12 使用adb logca

2022-06-19 09:26:57 3610 1

原创 Linux adb安装和使用

目录第一步:安装adb工具第二步:使用adb工具我使用的是M1芯片的MAC电脑,在MAC电脑上安装了Linux虚拟机,现在需要从Android手机中导出日志来分析。下面给出了具体的adb工具的安装和使用方法。使用下面的命令安装adb工具。安装好之后,可以用下面的命令来验证是否安装成功。第二步:使用adb工具查看连接的设备结果为空,查了很多资料,都没有作用。Linux 安装android手机驱动_cxlmax的博客-CSDN博客​​​​​​adb linux无法识别手机,adb工具不识别

2022-06-12 11:55:55 9729

原创 工厂模式--C语言实现

工厂模式,其实就是C++中的类的继承,只不过用C语言中的函数指针来实现了。假设现在的需求是公司生产一系列产品,包括椅子,床等,要求先生产产品,然后将生产的产品销售出去。将来可能要增加新的产品,不希望修改现有的核心代码流程,满足开闭原则。/* 工厂模式,其实就是C++中的类的继承,只不过用C语言中的函数指针来实现了*//* 假设现在的需求是公司生产一系列产品,包括椅子,床等,要求先生产产品,然后将 生产的产品销售出去。 将来可能要增加新的产品,不希望修改现有的核

2022-05-30 20:43:50 774

原创 C语言状态机--MP3的事件驱动实现

有些场景下,状态机可以使得我们的程序代码变得简洁,可扩展,可维护。先看下状态迁移图。代码设计分为五个步骤完成状态机。#include <stdio.h>// 第一步:定义两个事件typedef enum { STOP, PLAY_PAUSE, EVE_MAX} EVENT;// 第二步:定义三种状态typedef enum { PLAY_STA, PAUSE_STA, STOP_SAT, STA_MAX}.

2022-05-29 22:38:47 789 2

原创 X_MACRO在架构设计中的应用

比如在代码中要设计一个消息处理模块,代码要尽量简洁,还要做到可扩展。不妨可以试试X_MACRO技巧吧。/* 设计一个消息处理的模块,收到消息调用对应的处理函数*/#include <stdio.h>// 消息表定义,后续增加消息类型,只需在这里增加一行,并增加对应的处理函数即可#define MACROS_TABLE \ X_MACROS(MSG1, msg1_process) \ X_MACROS(MSG2, msg2_p.

2022-05-29 20:11:45 370

原创 ubuntu Docker安装和使用

大家肯定遇到过这种场景,自己开发的程序在开发环境上运行一切正常,但是拿到生产环境上运行时却出现了很多问题。那怎么解决了?要彻底解决这样的问题,就要介绍下我们今天的主角了,Docker!Docker 是一个开源的应用容器引擎,基于Go 语言并遵从 Apache2.0 协议开源。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 ap..

2022-05-27 20:30:25 1289

原创 vim 常用的快捷键

vim是程序员经常使用的文本编辑器,虽然有可能你在开发中使用其他的文本编辑器(比如vscode,notepad),但是不可避免的会在运行环境中要修改一些文本,那时就只能使用vim工具了。因此掌握vim最基本的操作还是有必要的。开个帖子记录下常用的一些操作快捷键。vim分为命令模式,编辑模式和末行模式。一开始使用vim打开一个文件时,就进入了命令模式,在命令模式下有以下几种操作:1 跳转到首行:gg2 跳转到末行:G3 跳转到行首:$4 跳转到行尾:05 移动10行:输入10

2022-05-27 17:57:12 3301

原创 python openpyxl模块操作excel表格

在工作中难免会遇到要对excel文件做操作的场景,如果手工做一些重复的操作会特别的麻烦。虽然有时候可以用excel中的公式来解决,但是某些场景是公式不能解决的。下面是一位朋友工作中遇到的问题,找到我看看能不能用python解决。我给他写了一段程序,很简单的就将他的问题解决掉了,为他节省了1天的工作量。在写程序之前需要安装openpyxl模块,具体安装可以使用下面的命令:pip3 install openpyxl具体的代码如下:from openpyxl import load_wo.

2022-05-25 20:05:09 372

原创 人脸识别开源项目--insightface

1 insightface简介最近人脸识别等机器学习的项目很火,偶然间发现了一个开源的人脸识别的开源项目insightface。人脸识别技术可以准确识别出图像中的人脸和身份,具有丰富的应用场景,譬如金融场景下的刷脸支付、安防场景下的罪犯识别和医学场景下的新冠流行病学调查等等。人脸识别的算法演变经历了以 PCA 为代表的早期阶段,再到以“人工特征+分类器”为主的统计学习方法阶段,近几年,随着大数据及 GPU 算力的爆发,人脸识别进入到深度学习算法为绝对主角的阶段。InsightFace是基于 M.

2022-05-22 21:22:33 15124 7

原创 Flask入门

目录1 引言2 安装Flask框架3 部署网站3.1 建立项目目录3.2 编写server.py的代码3.3运行服务端程序3.4 浏览器访问网站1 引言作为一个通信软件工程师,一直对网站服务很感兴趣。通信软件做的是管道,最终都是为网站等应用来服务的。想着怎么自己能够完成一个网站的开发,找到了Flask框架。什么是Flask框架Flask是一个用Python编写的Web应用程序框架。 它由 Armin Ronacher 开发,他领导一个名为Pocco的国际Pyt..

2022-05-17 23:27:08 437

原创 C++语言程序调用C语言库

目录1 背景2 示例1 背景C语言和C++语言是项目开发中经常用到的语言,在开发过程中经常会遇到C++程序要调用C程序的场景。如果项目代码是C语言写的,而使用的代码测试框架是C++写的,为了测试C项目代码,自然而然就会在C++代码中调用C代码写的函数。在C++代码调用C代码写的函数过程中,遇到的最大问题就是找不到符号,具体原因是因为C语言和C++语言在生成函数符号是有差异的。2 示例比如在foo.c的文件中代码如下:int foo(int x, int y) { r

2022-05-16 21:04:56 1591

原创 linux命令学习简介

目录1 什么是linux命令2 type命令1 什么是linux命令linux 命令是对Linux系统进行管理的命令。对于 Linux 系统来说,无论是中央处理器、内存、磁盘驱动器、键盘、鼠标,还是用户等都是文件,Linux系统管理的命令是它正常运行的核心,与之前的 DOS 命令类似。linux 命令在系统中有两种类型:内置Shell命令和 Linux 命令。首先介绍一个名词“控制台(console)”,它就是我们通常见到的使用字符操作界面的人机接口,例如 dos。我们说控...

2022-05-11 20:10:26 282

原创 反编译探寻汇编

目录1 概述2 反汇编3 反汇编工具3.1 objdump3.2 常用的参数3.3 命令示例4 反汇编示例1 概述前面有一篇博客讲了C语言总是从main函数执行的原由,其实我们还可以进一步通过反编译的手段来分析汇编代码来深入了解下。2 反汇编在传统软件开发模型中,程序员使用编译器,汇编器和链接器中的一个或者几个创建可执行程序。为了回溯编程过程(或对程序进行逆向工程),我们使用各种工具来撤销汇编和编译过程。3 反汇编工具3.1 objdumpobjd

2022-05-11 18:37:45 538

原创 coredump介绍和使用

1 什么是coredumpcoredump是程序崩溃时的内存快照。操作系统在程序发生异常而异常在进程内部又没有被捕获的情况下,会把进程此刻内存、寄存器状态、运行堆栈等信息转储保存在一个文件里。2 如何开启coredump功能ulimit -c 可以设置core文件的大小,如果这个值为0.则不会产生core文件,这个值太小,则core文件也不会产生,因为core文件一般都比较大。2.1 设置core文件的大小的方法:1、ulimit -c unlimited暂时生效2、/etc

2022-05-10 01:00:06 4196

原创 神秘又熟悉的main函数

1 概述学习C语言的同学都知道main函数,并且这是我们接触的第一个函数,但是很少有人去深究C语言为什么都是从main函数执行的。今天我们就来深入了解下。2 程序编译C语言生成可执行文件分为3个阶段:编译、链接、运行。每个编辑单元(例如多个.c源文件)是各自独立编译成目标文件(例如.o),最后由链接器把这些目标文件链接成可执行程序。3 揭开最后的面纱实际上使用gcc进行链接时要调用下面的命令:ld /usr/lib/crt1.o /usr/lib/crti.o main.o -o

2022-05-09 12:27:45 830

原创 同步和异步的那些事

目录1 概述2 进程同步2.1 临界区2.2 互斥锁2.3 信号量1 概述在计算机领域经常会听到同步和异步的概念,首先我们先看下什么是同步和异步。同步:是指一个进程在执行某个请求的时候,若这个请求没有执行完成,那么这个进程将会一直等待下去,直到这个请求执行完毕,才会继续执行下面的请求。异步:是指一个进程在执行某个请求的时候,如果这个请求没有执行完毕,进程不会等待,而是继续执行下面的请求。2 进程同步并发进程之间分为独立关系和交互关系,独立关系的进程分别在自己的..

2022-05-08 21:22:37 394

原创 Parallels虚拟机Linux和Mac之间共享文件夹

目录环境清单共享文件的方法第一种:scp命令第二种:共享文件夹环境清单Macbook Air M1,Mac OS 12.3Parallels虚拟机软件Ubuntu 20.04.3共享文件的方法第一种:scp命令scp filename usrname@IP:targetdirectory可以结合我之前的博客设置免密码登陆,这样就不用每次输入密码了。第二种:共享文件夹第一种方法还是需要用户每次输入命令行进行文件的传输,相对比较繁琐。实际上parall

2022-05-08 00:51:10 6026 1

原创 apt命令概述

目录Linux软件仓库软件源配置apt命令常见的命令如下:常见的用法示例:使用apt安装redis软件Linux软件仓库Ubuntu采用集中式的软件仓库机制,将各式各样 的软件包分门别类地存放在软件仓库中,进行有效地组织和管理。然后,将软件仓库置于许许多多的镜像服务器中,并保持基本一致。这样,所有的Ubuntu用 户随时都能获得最新版本的安装软件包。因此,对于用户,这些镜像服务器就是他们的软件源(Reposity)。说白了,这里的软件仓库就类似于Apple Store

2022-05-08 00:10:20 1638

原创 vscode ssh免密登陆设置

步骤很简单:1 生成公钥,在本地机器上执行ssh-keygen。2 将本地的公钥拷贝到远端机器上,在本地机器上执行ssh-copy-id -i ~/.ssh/id_rsa.pub usrname@ip。3 这样就可以通过ssh命令或者vscode免密登陆远端服务器了。×...

2022-05-03 20:11:09 2408

原创 Linux环境变量浅析

一 先看下面几个常见的环境变量:PATH:指定命令的搜索路径HOME:指定用户的主工作目录(即用户登陆到Linux系统中时,默认的目录)。HISTSIZE:指保存历史命令记录的条数。LOGNAME:指当前用户的登录名。HOSTNAME:指主机的名称,许多应用程序如果要用到主机名的话,通常是从这个环境变量中来取得的SHELL:指当前用户用的是哪种Shell。LANG/LANGUGE:和语言相关的环境变量,使用多种语言的用户可以修改此环境变量。MAIL:指当前用户的邮件存放目录。

2022-05-03 18:57:54 612

原创 c/c++使用redis库

REmote DIctionary Server(Redis) 是一个由Salvatore Sanfilippo写的key-value存储系统。Redis是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。它通常被称为数据结构服务器,因为值(value)可以是 字符串(String), 哈希(Map), 列表(list), 集合(sets) 和 有序集合(sorted sets)等类型。redis官网:R

2022-05-03 17:07:24 600

原创 vscode编写C语言程序

目的:建立文件夹1,对文件夹1进行配置,后续可以在文件夹1中新建子文件夹,在子文件夹中新增C语言代码文件,对该代码文件进行编译调试。具体文件夹如上图所示。主要是在.vscode文件夹中新建tasks.json,如下:{ "tasks": [ { "type": "cppbuild", "label": "C/C++: gcc 生成活动文件", "command": "/usr/bin/gcc",

2022-05-03 12:57:33 7055

原创 使用vscode阅读并单步调试redis

Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。Redis 与其他 key - value 缓存产品有以下三个特点:Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。 Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。 Redis支持数据的备份,即master-slave模式的数据备份。redis官网:Redis中文网git仓库:https:

2022-05-03 12:47:14 2148

原创 四次挥手抓包分析--异常

12865:客户端要结束连接,向服务器发送FIN数据包,Seq=7546,ACK=100812877:服务器端回复ACK数据包,Seq=1008,ACK=7546按照TCP的四次挥手,接下来应该是服务器端将缓存中的数据发送完毕后,向客户端发送FIN数据包,在12879服务器端向客户端发送了加密告警,然后客户端竟然向服务器端直接发送RST数据包直接关闭该TCP连接,不知道为什么客户端这样处理。猜测是因为虽然客户端发送FIN数据包之后理论上还是可以接受服务器端的数据的,但是为了效率的考虑,客户端..

2021-03-07 23:51:26 384

原创 NAT网络地址转换

NAT技术同学们在接触网络的过程中肯定多多少少会了解一些IP相关的知识,知道要在互联网中实现正常的通信就必须具有一个IP地址。这个IP地址相当于现实世界中的门牌号。但是随着对网络的深入了解,肯定会产生这样的疑问:我们手机接入家里的路由器的时候,路由器给手机分配的IP地址都是类似于192.168.1.2这种私有的地址,现实世界中肯定存在大量的手机的IP地址是一样的,那么我们的手机时如何在互联网中遨游的呢?其实这个用到了NAT技术,NAT指的是网络地址转换,其实就是将私有的IP地址转化成了公网的.

2021-03-07 13:26:51 144

原创 ICMP协议实战

ICMP协议实战最近想系统的学习TCP/IP协议,之前都是看书看技术文档,现在准备自动动手实践。根据自己学习3GPP LTE等协议的经验,想要学习一个协议,特别是数据面的协议,一定要实际分析数据协议格式,这样可以快速的掌握协议的精髓。先从简单的协议栈开始,ICMP包,也就是大家熟悉的Ping包。ICMP协议是IP协议的控制部分,主要有两个作用:差错通知; 信息查询。从协议格式上来讲,ICMP协议是IP协议的上层协议,ICMP协议数据是作为IP协议的数据来传输的。具体的协议格式为:

2021-03-07 10:10:39 180

原创 LeetCode 解码方法(DFS,递归,动态规划)

题目:一条包含字母A-Z 的消息通过以下方式进行了编码:'A' -> 1'B' -> 2...'Z' -> 26给定一个只包含数字的非空字符串,请计算解码方法的总数。示例 1:输入: "12"输出: 2解释:它可以解码为 "AB"(1 2)或者 "L"(12)。示例2:输入: "226"输出: 3解释:它可以解码为 "BZ" (2 2...

2019-12-12 23:54:42 180

原创 斐波那契数列新解(动态规划)

斐波那契数列大家都很熟悉了f(n) = f(n-1) + f(n-2)f(0) = 1f(1) = 1如果要用计算机程序来实现这个功能的话,根据上面的递推公式很容易想到使用递归的方式,使用递推的优点是程序员不用考虑具体的计算过程,只要找好递推的明确出口就可以了。int fib(int n){ if (n == 0 || n == 1) { retur...

2019-09-15 17:05:21 620

原创 递归、迭代、动态规划的区别

递归的基本概念:程序调用自身的编程技巧,就是函数自己调用自己;一个函数在定义中直接或者间接调用自身的一种方法,它通常是将一个大型的复杂的问题分解为与之相似的小的问题,可以极大的减少代码量;递归有两个特点:1)函数自身调用自身;2)使用递归时必须要有一个明确的出口;递归分两个阶段:1)递推:把复杂的问题推到比原问题简单的子问题的求解;2)回归:当获取最简单的情况后,逐步返...

2019-09-14 23:48:20 687

原创 二叉树的遍历 前序 中序 后序

二叉树经常会遇到遍历的问题,遍历分为前序,中序,后序,这三种遍历的区别在于根节点的顺序:前序:根 左 右中序:左 根 右后序:左 右 根首先我们看下怎么看下手工列出遍历的顺序:前序:A B C D E F G H K中序:B D C A E H G K F后序:D C B H K G F E A手工写顺序的关键方法是按照前,中,后序的方式写出节点,然后一层一...

2019-08-13 00:37:40 122

原创 grep 使用技巧

grep(global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。1、grep -n -r -l -v --color=auto filename上面的-n是打印行号,-r是递归查找的意思,-l只打印出对应的文件名,-...

2019-08-11 14:08:51 451

原创 重载和重写

最近一直在研究设计模式,主要是针对面向对象的程序来讲的。因此必不可少的会接触面向对象语言的关键字,比如重载和重写,那么什么是重载和重写呢?重载(overload)是一个类中可以定义相同名称的方法,但是方法的入参是不同的,包括入参的顺序不同,这样在写程序的时候可以通过传入不同的参数调用不同的方法功能。最典型的应用场景就是一个类可以有多个构造函数,这些构造函数的名称是相同的,但是参数是不一样的。...

2019-06-27 23:12:31 385

原创 git版本控制工具如何回退上次commit中的某个文件

现在git版本控制工具是当下最流行的版本控制工具,git分为工作区,暂存区以及版本区,如果修改的文件在工作区或者在暂存区,可以使用命令git checkout -- <file>和git reset HEAD <file>进行回退。如果修改的文件已经commit,那如果进行回退呢?...

2019-06-27 22:09:38 1794

原创 编写自动测试c语言程序的shell脚本

目前经常用vim编写一些c语言程序,写好了程序一般都得进行一些测试,当然我们可以进行一些常规的手动测试。心里一想,如果能够用shell脚本编写一个能自动测试c语言程序就好了。为了试一试这样的想法,找了一个c语言程序题目:[一球从 100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10 次落地时,共经过多少米?第10 次反弹多高? ]根据这样

2015-07-10 23:22:14 4687

原创 Linux系统下学习正则表达式的心得

一直对正则表达式云里雾里的,今天认真的看了《鸟哥的linux私房菜》一书并在网络上查询了相关方面的资料,现在对正则表达式有了一定的了解。首先正则表达式指的是用特定的字符串来筛选符合一定要求的字符串,我们在Linux系统下经常用到的命令grep,这个命令时用来选取符合一定要求的字符串所在的一行,其实这个很简单,举个简单的例子,我们想在某个目录下去查找一下是否存在newfile这个文件,我们可以使

2015-07-05 21:36:51 414

原创 使用MacBook air 11.6第一记

纠结了很长时间买到了我心仪的苹果笔记本电脑了,从之前在macbook pro和air之间的纠结发展到了后来的air11和air13之间的纠结,终于到了昨天我下了最后的决心,买了一台2015款的macbook air 11。当时在买11的时候还是在犹豫的,犹豫怕拆封了看到11.6寸的小屏幕时候会后悔,但是还是下了狠心拆封了,打开了电脑,顿时觉得好像真的有点小。拿回了家,用着用着觉得11.6寸的屏幕感

2015-07-03 18:30:34 975

原创 IP地址的转换

今天遇到一个题目:将十进制的IP地址转化成二进制,然后将二进制串起来成为32的数,再按照十进制将这个数读出来。这个问题有种解决方案:1. 可以用乘法操作;2. 可以用移位操作;3. 可以使用联合体定义解决;下面我就移位操作和利用联合体来进行代码的编写:#include using namespace std;#define COUNT 4union IP{ str

2014-12-24 14:45:22 483

原创 内存对齐总结

今天参加了入职前的小小的培训,培训中老师讲到了关于内存对齐的只是,以前接触过,但是没有深究,今天老师讲了,回来便查了查资料,下面便是我对内存对齐的理解。内存对齐对于大部分的软件工程师来说都可以说是透明的,内存对齐应该是编译器去管理的,C语言的特点就是强大灵活,他允许你对内存进行操作。如果你想对深层次的更加底层的东西要加以理解,就必须对内存对齐要有一定的了解。首先是为什么我们需要对内存对齐:

2014-12-15 21:34:43 458

原创 windows下如何配置实现命令行编译c++程序

大家知道在linux下编译c++代码的那种命令式的编译方式,想不想在windows下实现这样的功能?今天我就使用了我的windows台式电脑和笔记本电脑实现了这样的命令式的c++代码的编译。首先你需要的工具就是:1. 一台windows下的电脑(当然是安装了c++编译器的电脑)2. 下载安装一个文本编辑器的软件(比如notepad等等)下面是实现这样的功能的具体的步骤:

2014-12-03 15:36:24 655

原创 win7专业版激活方案

今天给我的台式机重装了win7系统,但是发现一个蛋疼的事情,就是不能正常激活win7系统了。我主要使用了一下几种激活电脑的方式:1. 使用以前的激活程序进行系统的激活;2. 使用学校购买的正版系统进行激活,这也遇到了问题,出现密钥不能使用的情形;3. 在网上搜索能用的win7正版的密钥进行激活,但是还是不行;最后没有办法,就进行了百度寻找解决方案,发现一款激活工具还是比

2014-11-24 15:07:49 8970

c语言深度解剖

本书是作者对大师们智慧的解读。本书并不是从头到尾讲解c语言的基础知识,所以,本书并不适合c语言零基础的人。本书知识要比一般的c语言书讲的深的多,其中很多问题是各大公司的面试或者笔试的题目。所以本书的读者应该是中国光大的计算机系的学生和初级程序员。如果本书上面的问题能真正明白80%,作为一个应届毕业生,恐怕没有一家大公司会拒绝你。

2014-10-09

IT公司面试题总结

这里面包含了100道经典的c++面试笔试题目,掌握这100道等于你一只脚已经跨进了大公司的大门。

2014-10-08

空空如也

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

TA关注的人

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