自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Huangzhen的博客

不积小流,无以成江河。

  • 博客(43)
  • 资源 (11)
  • 收藏
  • 关注

原创 指针和引用

指针和引用结论:引用指针必须初始化可以不初始化不能为空可以为空不能更换目标可以更换目标1、引用必须初始化,而指针可以不用初始化。2、引用不能为空,而指针可以为空。3、引用不能更换目标,而指针可以随便指向任何地方。指针和引用的性能比较:指针与引用之间有没有性能差距呢?这种问题就需要进入汇编层面去看一下。我们先写一个test函数,参数传递使用指针:void test(int* p){ *p = 3; return;}(gd

2020-08-22 17:37:43 684

转载 Apache 架构师的 30 条设计原则

标题Apache 架构师的 30 条设计原则基本原则功能选择服务端设计和并发分布式系统用户体验艰难的问题总结本文作者叫 Srinath,是一位科学家,软件架构师,也是一名在分布式系统上工作的程序员。他是 Apache Axis2 项目的联合创始人,也是 Apache Software 基金会的成员。他是WSO2流处理器(wso2.com/analytics)的联席架构师。Srinath 撰写了两本关于 MapReduce 和许多技术文章的书。他获得了博士学位。来自美国印第安纳大学。Srin

2020-05-19 06:37:27 251

原创 高效工作的三个要素

很多人在工作中都有这样的感觉:每天从早到晚忙不停,能写到月报里的工作成果却没多少;每天倍感疲倦,个人生活总被加班占满,升职加薪却永远轮不到自己。为什么呢?因为我们付出的大量时间和精力,都是无效努力。《别让无效努力毁掉你》一书的作者克里斯·贝利,从过去 10 年中阅读、研究、测试过的数千种所谓高效能方法中,筛选出 25 种高效能方法,并提出高效能的三个要素:时间、能量、注意力。每个人的一天都只有 ...

2020-03-12 05:29:25 780

原创 moalloc/free和new/delete的区别

1、malloc与free是C/C++的标准库函数,new/delete是C++的运算符。它们都可用于申请动态内存和释放内存。2、new/delete是运算符用于对象内存申请和释放,当对象构造和析构的释放调用new/delete。3、malloc/free是库函数,不在编译的控制范围内。不能把对象的构造和析构强加于malloc/free上。看如下例子:#include <iostre...

2020-01-30 15:18:46 261

原创 Linux经典好文

聊聊Linux IO:https://0xffffff.org/2017/05/01/41-linux-io/聊聊原子变量、锁、内存屏障那点事:https://0xffffff.org/2017/02/21/40-atomic-variable-mutex-and-memory-barrier/Linux环境下多线程C/C++程序的内存问题调试https://0xffffff.org/2...

2020-01-27 14:51:50 122

原创 Linux下性能分析

Linux下性能分析一、CPU分析1、Linux查看CPU信息:lscpu:二、IO分析三、内存分析四、网络分析

2019-07-01 22:30:12 184

原创 简单实现二分法

1、简单实现二分法int binarySearch(int a[], int len, int key){ int low = 0; int heigh = len-1; int n = 0; while(low <= heigh){ n++; int mid = (low + heigh) / 2;

2019-07-01 22:28:42 433

原创 链表操作

链表操作#include <stdio.h>#include <stdlib.h>#include <string.h>/* 结构体 */typedef struct node{ int data; struct node *next;} NODE_S;/* 创建一个节点 */NODE_S* create_node(in...

2019-06-26 08:08:40 201

原创 Linux C++提升知识图谱

2019-04-04 07:41:03 325

原创 内核两个经典宏剖析:offsetof和container_of

1、宏:offsetof#ifndef offsetof#define offsetof(TYPE, MEMBER) ((size_t)&(TYPE*)0)->MEMBER)#endif2、宏: container_of#ifdef container_of#define container_of(ptr, TYPE, MEMBER) ({ const typeof(...

2019-03-19 00:22:53 136

原创 Linux系统编程之进程

1、进程控制块=进程描述符(PCB)进程状态(4/5种):就绪(初始化),运行,挂起(=等待), 停止 PBC成员: 1、进程id 2、进程状态 3、进程切换需要保存和恢复的CPU寄存器 4、描述虚拟地址空间信息 5、描述控制终端的信息 6、当前工作目录 7、umask掩码 8、文件描述符 9、信号相关的信息 10、用户和用户组id 11、会话(session)和进程组...

2018-04-18 13:46:08 397

转载 C++简单实现C/S模型

Server.c#include <stdio.h>#include <unistd.h>#include <sys/types.h>#include <sys/socket.h>#include <strings.h>#include <string.h>#include <ctype.h>#include <arpa/inet.h>#define SERV_PORT 9988int

2018-04-11 19:53:08 3264 1

原创 fprintf和sprintf的区别

fprintf和sprintf的区别1、fprintf:格式化输出到流(stream)文件中,返回值是输出的字符数,发生错误时返回一个负值. #include &lt;stdio.h&gt; int fprintf( FILE *stream, const char *format, ... );2、sprintf:格式化输出发送到buffer(缓冲区)中.返回值是写...

2018-03-28 20:04:47 4525

原创 Linux下安装ffmpeg

1、官网下载ffmpeg http://www.ffmpeg.org/download.html API文档入口:http://www.ffmpeg.org/doxygen/2.0/index.html2、安装和验证:./configure --enable-shared --prefix=/xxx/ffmpegmakemake install 出现如上错误的...

2018-03-27 17:17:52 8289

转载 【转】一文了解Socket

原文链接:https://segmentfault.com/a/1190000013712747 什么是Socket? Socket的中文翻译过来就是“套接字”。套接字是什么,我们先来看看它的英文含义:插座。 Socket就像一个电话插座,负责连通两端的电话,进行点对点通信,让电话可以进行通信,端口就像插座上的孔,端口不能同时被其他进程占用。而我们建立连接就像把插头插在这个插...

2018-03-16 15:11:31 306

原创 C语言简单实现atoi()函数

直接看代码:#include #include int my_atoi(const char *in){ int tmp = 0; int ret = 0; int sign = 0; //符号标记 if(in[0] == '-'){ //是否为负数 sign = -1; } whil

2018-01-31 15:51:46 373

原创 C++基础之构建String类

C++构建String类: 举个例子如下:#include #include #include using namespace std;class String{public: //String的构造函数 String(const char *str = NULL) { cout "构造函数!" << endl; if(N

2018-01-12 09:32:47 1000

原创 GCC编译和GDB调试

一、编译1、gcc编译器 gcc编译器(GNU CC)是GNU项目中符合ANSI C标准的编译系统,是一个强大的编译器。能够编译C/C++,Objective-C等。2、编译流程 1)预处理(Pre-Processing) 对处理头文件(#include)、宏定义(#define、#ifdef)等进行处理。 gcc -E xx.c -o xx.i2)编译(

2018-01-09 14:20:12 297

原创 C++基础之深拷贝浅拷贝

1、拷贝构造当一个已构造了的对象要构造新的对象时,拷贝构造函数被调用。也就是对象需要拷贝时,拷贝构造函数就被调用。如一下几个情况: 1)对象以值传递方式传入函数体。 2)对象以值传递方式从函数体返回。 3)新对象要通过一个已构造完成的对象进行构造。 在C++里面都有一个默认的拷贝构造函数。默认的拷贝构造函数是浅拷贝,一般无法满足实际的需求。2、浅拷贝和深拷贝浅拷贝:如果一个

2018-01-05 14:28:41 185

原创 内存和野指针问题

1、内存溢出和内存泄露的区别1、内存溢出(out of memory)指程序在申请内存时候,没有足够的空间供其使用;例如说申请了一个int类型的内存,但是给他存入long型的数据,此时就产生溢出。 2、内存泄露(memory leak)指程序在申请内存后,无法释放已申请的内存空间,一次内存泄露危害可以忽略,长久以往内存就被占光了。2、内存分配方式内存分配有三种方式: 1、全局存

2018-01-04 18:11:23 443

原创 C++基础之构造函数

1、构造函数 构造函数的作用: 类对象被创建时,编译系统对象分配内存空间,并自动调用该构造函数,由构造函数完成成员的初始化工作,故:构造函数的作用:初始化对象的数据成员下面看个简单经典的例子: 如下代码分别输出的结果是什么?#include using namespace std;class A{public: A() { cout

2018-01-04 16:00:56 177

原创 Ubantu建立Samba服务

1、安装samba服务sudo apt-get install samba2、修稿samb配置文件: 在默认目录下:/etc/samba 下文件名为:smb.conf#vim smb.conf#在配置文件的末尾增加如下的配置:[code]path=/home/usrname/cxx #samba服务的路径writeable=yes

2017-12-12 22:24:11 212

原创 python连接数据库

1、安装mysql:(Ubantu下安装不撰述)。 2、安装Python版本的mysql开发包:sudo apt-get install python-mysqldb3、编写Python代码:#!/usr/bin/python# -*- coding: UTF-8 -*-import MySQLdb #引入mysqldb包# 打开数据库连接db = MySQLdb.connect(

2017-12-12 10:33:32 168

原创 C++连接Mysql

1、安装mysql(Ubantu环境下):sudo apt-get mysql-server mysql-client 同时把mysql的客户端和服务端同时安装。安装server时会弹出图形界面,让你设置初始密码。 安装完毕后登陆数据库:mysql -u root -p 输入密码,出现上图则表示登陆成功。2、创建数据库和表: 创建一个数据库:create database test; --

2017-12-08 16:39:12 365

原创 IOS-GCD多线程

同步 & 异步:区别在于会不会阻塞线程:同步会等待当前任务结束再去执行下一个任务;异步是同时进行执行任务。串行 & 并行: dispatch_get_main_queue -->主线程的队列 dispatch_get_global_queue -->全局线程的队列(全局并发的)简单的例子:dispatch_async(dispatch_get_global_queue(0,0), ^{

2017-10-06 16:12:42 875

原创 C++基础之格式化输出

在C语言里面,使用printf()函数格式化输出。例如printf(“%d-%f-%2.5f”,a,b,c); 但是在C++里面就尴尬了,cout 在C++里面也提供了格式化输出的方法,但是方法比C语言稍微麻烦。C++格式化输出需要引入头文件:#include ,里面提供的方法基本功能与printf()一样,如下两者的对比: 序号 内容 C++ C语言

2017-09-29 16:44:57 779

转载 AES加解密-IOS与ANR对比

1、AES加密介绍AES是开发中常用的加密算法之一。然而由于前后端开发使用的语言不统一,导致经常出现前端加密而后端不能解密的情况出现。然而无论什么语言系统,AES的算法总是相同的, 因此导致结果不一致的原因在于 加密设置的参数不一致 。于是先来看看在两个平台使用AES加密时需要统一的几个参数。密钥长度(Key Size) 加密模式(Cipher Mode) 填充方式(Padding) 初始向量

2017-09-18 13:54:56 842

原创 C++信号处理

C++信号处理0、信号分类: 信号分类 描述 SIGABRT 程序的异常终止,如调用 abort。 SIGFPE 错误的算术运算,比如除以零或导致溢出的操作。 SIGILL 检测非法指令。 SIGINT 接收到交互注意信号。 SIGSEGV 非法访问内存。 SIGTERM 发送到程序的终止请求。1、signal() 函数/*C++ 信号处理

2017-07-05 10:01:35 563

原创 pthread线程和线程锁

pthread线程和线程锁线程创建: #include <pthread.h> int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), void *arg);其中: pthread_t *thread表示:线程ID pthread_at

2017-06-30 13:07:31 680

原创 android系统属性问题

1、SystemProperties报错问题: import android.os.SystemProperties;首先选择工程,点击右键,点击Properties,出现如下图片: 2、adb 查看系统属性:在Android系统中,它的根文件系统下有几个用于启动系统时需要的配置文件:/init.rc /default.prop /system/build.prop 查看系统属性的

2017-06-19 10:36:12 439

原创 C语言简单实现字符串截取

#include <stdio.h>#include <stdlib.h>#include <string.h>typedef char T[64];void mySplit( char *sStr, char *delims, T t[]){ int i = 0; char *result = NULL; result = strtok( sStr, delims

2017-06-19 10:19:26 3115

原创 C/C++的sizeof('a')和sizeof(char)

#include <stdio.h>int main(){ char b = 'a'; printf("a === %d\n",(int)sizeof('a')); printf("b === %d\n",(int)sizeof(b)); return 0;}猜猜结果是如何:a === 4 b === 1

2017-06-08 18:23:43 1915

原创 BOOST-lexical_cast

BOOST-lexical_cast强大的数据转换:lexical_cast(*argv)#include <iostream>#include <boost/lexical_cast.hpp>#include <vector>int main(int argc, char * argv[]){ using namespace std; using boost::lexical

2017-05-27 14:22:08 246

原创 BOOST库安装

BOOST安装1,解压 tar xzvf boost_1_60_0.tar.gz2,进入执行 ./bootstrap.sh,3,执行 ./b2 cxxflags="-std=c++11" 4,执行 sudo ./b2 install5,编辑vi ~.profile 增加以下内容:LD_LIBRARY_PATH=$LD_LIBRAR

2017-05-27 13:48:41 256

原创 简单的弧度角度转换

简单的弧度角度转换就是这简单:#include <stdio.h>#define M_PI 3.14159#define RAD2DEG(x) ((x)*180./M_PI) //弧度转角度 #define DEG2RAD(x) ((x)*M_PI/180.) //角度转弧度int main(){ printf("RAD2DEG(3.14) = %f\n",RAD2DE

2017-05-27 10:38:20 9276

原创 Linux系统设置开机程序自启动

在Linux下有些程序我们也需要像Window一样开机自启动。下面介绍一个超级简单的方法,立马设置程序开机自启动。首先在根目录下寻找一个隐藏文件夹: .config/autorestart目录 在这个目录下,把想要的可执行文件放下该目录下。 下次启动时,系统会自动地去执行这个文件夹里的可执行程序。

2016-09-18 19:26:08 295

转载 登录记住密码问题

登录 记录已登录用户步骤,存入偏好设置中存储放入一个数组。 具体存储 1:存储用户到偏好设置中,其中用户是一个数组向服务器响应客户端后的一些操作 (如果响应数据成功)其中用户和密码是一一对应的1.1先从沙盒中偏好设置中读取对应的用户集合 读取用户名: NSMutableArray *AccArys = [NSMutableArray arrayWithArray:[[NSUserDe

2016-08-09 17:26:56 297

原创 好用的 Linux 命令—alias

1、alias 命令的别名配置 别名的配置问价有两个地方: (1) /etc/profile –>该文件是root用户的,涉及到系统的启动项,不建议修改。 (2) ~/.bashrc –>属于某个用户的,可以修改。 打开文件:vim ~/.bashrc在文件的末尾添加你需要的别名,如下:alias proj="cd /home/huang/Project"alias mn

2016-07-14 21:39:29 340

原创 递归那些事儿

#include<stdio.h>#include<stdlib.h>#include<string.h>#include<assert.h>//求阶乘int fac(int n){ if(n==1 || n<=0) { n = 1; return n; } if(n>1) { return n

2016-07-12 22:46:48 197

原创 函数指针

1、函数与函数指针返回值类型 ( * 指针变量名) ([形参列表]);声明函数:int func(int x);函数指针的声明:int (*fp)(int x);fp = func; //可以将函数首地址付给函数指针fp = &func; //或者:取函数的收地址注意:赋值时函数func不带括号,也不带参数,由于func代表函数的首地址,因此经过赋值以后,函数指针fp就

2016-07-10 16:49:57 280

深入分析Linux内核源码.pdf

Linux内核源码的学习最佳文档,带书签,内容详尽丰富。

2019-07-15

linuxtools-rst.zip

各种各样的Linux工具,里面应有尽有,内容丰富,Linux学习的好帮手。

2019-07-12

网络编程帮助文档及源码

UNP网络编程(卷1)图书配套的源码,chm帮助文档。内容详尽,但是CHM是英文版本,可以提高英语阅读能力。

2019-01-05

Linux系统编程-线程

Linux系统编程-线程

2018-11-04

华为C++编程规范

编程规范文档

2018-11-02

shell编程入门教程

Linux下shell编程入门编程,内有详细例子,入门学习最佳选择。

2018-11-02

linux系统编程-进程间通信

linux系统编程-进程间通信:详细讲述进程的概念,进程间互相通信的各个方式。值得你学习。

2018-04-19

Linux网络编程-网络基础-socket编程-高并发服务器

Linux网络编程-网络基础-socket编程-高并发服务器,非常详细的资料,值得你学习。

2018-04-11

ADB工具win+mac+linux.zip

ADB工具win+mac+linux,在各个平台下ADB的工具包,内含有工具包,ADB配置步骤,官方下载链接。

2018-01-11

JNI编程指南中文版

JNI编程指南

2017-06-13

C++ API接口文件

C++ API,详细完整。

2017-06-01

空空如也

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

TA关注的人

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