自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Moons_is_me的博客

Read The Fucking Source Code

  • 博客(48)
  • 收藏
  • 关注

原创 2021-07-18:变位词组

leetCode每日一题面试题 10.02. 变位词组编写一种方法,对字符串数组进行排序,将所有变位词组合在一起。变位词是指字母相同,但排列不同的字符串。示例:输入: [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”],输出:[[“ate”,“eat”,“tea”],[“nat”,“tan”],[“bat”]]说明:所有输入均为小写字母。不考虑答案输出的顺序。来源:力扣(LeetCode)链接:https://leetcode-cn.com/p

2021-07-18 22:29:33 139

原创 Android Service学习心得总结

学习了郭大神关于Service的讲解,顿时醍醐灌顶,豁然开朗,对Service有了更深层的理解,趁热打铁把所学的知识记录下来,也算是一种复习加深记忆的好办法。开发环境:Android Studio 2.3.3一、Service的基础知识Service是Android四大组件之一,主要用于在后台处理一些比较费时间的任务,也可用于前台处理,比如天气的显示在StatusBar中。Service特点:主要

2018-01-19 15:17:38 887

原创 android studio如何安装ndk

来自Android小白的科普小知识,如有错误,欢迎大家指出,虚心接受!!上一篇博文记录如何用android studio生成静态、动态jni库,生成这两种库必须要安装ndk,所以这篇就介绍一下如何安装ndk。1.使用版本:android 2.3.3,NDK:Native Development Kit,本地开发工具2.打开AS,点击SDK Manager按钮,如图:选中ND

2018-01-16 15:40:14 1742

原创 Android中系统应用编译的目录设置方法

最近的工作是整理系统中的apk,关于apk要编译到哪些目录下,这个问题做一下记录。1.主要实施地点:Android.mk2.相关设置属性:LOCAL_MODULE_PATH,LOCAL_CERTIFICATE,LOCAL_PRIVILEGED_MODULELOCAL_MODULE_PATH:目标安装路径,如果设置该属性的就会安装到指定的路径举例:LOCAL_MODULE_PATH:

2018-01-16 15:37:16 1458

原创 如何生成动态jni库

1.准备工作:在app/src/main/目录下创建jni目录,并新建一个.c文件并编写要生成so库的函数。main.c #include #include #include #include #include #include #include JNIEXPORT jstring JNICALL native_OutH

2018-01-12 14:08:51 363

原创 android studio 生成静态jni库

刚步入社会的Android小白,记录如何使用android studio生成静态jni库。1.准备工作:先安装ndk,自己先百度一下,后期博主会专门写一篇博文讲解一下Android Studio 如何安装。新建一个工程JniFirst,在MainAcitvit中声明要用到的方法(so库中的方法)public class MainActivity extends AppCompa

2018-01-12 10:14:15 528

原创 我要开始学习Android

本人已经脱离学生身份5个月了,正式成为一名上班族!!!阴差阳错的与安卓有了不解之缘,所以要开始好好学习安卓啦。入门是《Android 系统源代码情景分析》,所以最近一段时间都会和老罗有关。大家一起学习一起进步吧,加油

2017-12-05 11:01:38 227

转载 Setting添加选项方法

原生android的settings模块的样子(我的Settings截图有些改动) 接下来讨论如何在settings中添加一个类似于wlan/ethernet的模块布局文件位置(默认位置在packages/apps/Settings/res/xml/dashboard_categories.xml) <dashboard-categories 19 xmlns:androi

2017-09-18 16:32:55 1196

原创 汉诺塔问题--递归实现

问题描述: 有一个梵塔,塔内有三个座A,B,C,A座上有若干个盘子,盘子大小不等,大的在下面,小的在上面。目标:将A座上的盘子移动到C座上。移动过程中可以借助B座,但每次只允许移动一个盘子,并且在移动过程中,3个座上的盘子始终保持大盘在下,小盘在上。问题分析:当要移动n 个盘子时,先移动A上的n-1个盘子到B上,再移动第n个盘子到C上;当要移动n -1个盘子时,先移动A上的

2016-09-27 17:44:53 450

原创 一个指针释放后不置空的危害

今天面试碰到这个问题了,可以说这个问题是我回答最冤枉的。我觉得我对这个问题,有很清晰的认识。但是不知道为什么,嘴秃喽了一句内存泄漏,真想打自己一个大嘴巴。内存泄漏的情况的产生是:例如:用int* p=(int*)malloc(sizeof(int));让p重新指向其它,这样用malloc()开辟的空间就找不到了,造成内存泄漏。一个指针释放后不置空的后果:free(p);后p是一个非

2016-09-24 23:47:21 7582 1

原创 面试中遇到的问题:一个指针重复释放会出现什么情况

一个指针重复释放会出现什么情况?我当时的回答是:1.空指针可以重复释放2.非空指针(可能大概)会报错。由于好几天没有写代码,对指针有些生疏了,所以对非空指针的情况不太确定 。所以刚才编写了一个小代码进行了测试:#include int main(){ int *p = (int*)malloc(sizeof(int)* 5); free(p); //p = NULL;

2016-09-24 23:19:35 3267 1

原创 实现函数 double Power(double base,int exponent),求base的exponent次方,不得使用库函数,不用考虑大数问题

//实现函数 double Power(double base,int exponent),求base的exponent次方,不得使用库函数,不用考虑大数问题//base:1. 0; 2. 非0//exponent: 1. 0 2. 负数 3. 正数//0的0次方没有意义//0的负数次方没有意义#include using namespace std;bool g_Invali

2016-09-18 14:19:52 1298

原创 求一个数的二进制中有多少个1的最优解法

#include int NumberOf1(int n){ int count = 0; while (n) { count++; n = n&(n - 1); } return count;}这样的解法不会产生负数陷入死循环的问题,并且循环次数少,有几个1就循环几次。采用这种解法的原因:例:n = 11000100       n-1 = 11000

2016-09-18 10:39:19 478

原创 在一个由升序序列旋转之后的序列中查找最小元素

#include #include using namespace std;int FindMin(int* arr, int length)//(当)关键是找到两个序列的交接处,一个升序序列经过旋转后,两个部分序列仍为升序序列,{ //所以从第一个序列向后找比它大的,从第二个序列向前找比它小的 assert(arr);

2016-09-11 20:52:32 459

原创 求一个数的二进制中有多少个1的两种解法

#include int NumberOf1(int n){ unsigned int flag = 1; int count = 0; while (flag) { if (n & flag) count++; flag = flag << 1; } return count;}int NumberOf1(int n){ int count = 0;

2016-09-06 20:00:54 562

原创 用两个栈实现一个队列以及用两个队列实现一个栈

#include #include #include using namespace std;template //用两个栈实现一个队列class CQueue{public: CQueue(); ~CQueue(); void appendTail(const T& node); T deleteHead();private: stack s1; stack

2016-09-05 22:26:29 270

原创 二叉树的重建

给定二叉树的前序遍历和中序遍历,重建二叉树,并打印后序遍历的序列#include using namespace std;struct BinaryTreeNode{ int _value; BinaryTreeNode* _pleft; BinaryTreeNode* _pright;};BinaryTreeNode* ConstructCore(int* startPreor

2016-09-04 21:30:53 252

原创 通过斐波那契数列分析实现函数时采用递归和循环的利弊

斐波那契数列的递归实现int f(int n){ if (n > 0) { //int a = 1, b = 1, c; if (1 == n) return 1; if (2 == n) return 1; return f(n - 1) + f(n - 2); } return -1;}斐波那契数列的循环实现int f(int n)

2016-09-03 22:09:57 634

原创 关于单链表的尾插,删除,反向打印单链表

#include using namespace std;#include struct ListNode{ int _value; ListNode* _next;};void AddToTail(ListNode** pHead, int value){ ListNode* pNew = new ListNode(); pNew->_value = value;

2016-09-03 21:57:51 526

转载 Linux 信号量使用

semget 函数为获取信号量函数使用格式:int  semget(key_t  _key ,int  _nsems,int _semflg);功能:创建一个新的信号量或获取一个已经存在的信号量的键值。返回值:成功返回信号量的标识码ID。失败返回-1;参数:_key  为整型值,用户可以自己设定。有两种情况:1.       键值是IPC_P

2016-09-02 22:29:27 305

原创 Linux消息队列的使用:实现server和client相互发送消息

comm.hcomm.cserver.cclient.c

2016-09-02 21:02:17 2391

原创 将一个字符串中的所有空格替换为%20的源代码及测试用例

#include #include void ReplaceBlank(char string[],int capacity)//capacity为数组str的总容量{ if (string == NULL || capacity <= 0) return; int length = 0; int blank_count = 0; int i = 0; while (stri

2016-09-02 20:12:20 497

原创 一个10分的C库中的strcpy()函数及其剖析

#include #include using namespace std;char* Mystrcpy(char* dest, const char* src)//src加const保护{ assert((dest != NULL) && (src != NULL));//assert断言,保证dest,src不为空 char* address = dest;

2016-09-02 14:23:36 403

原创 C库中的memmove()函数的实现

#include #include #include using namespace std;void* mymemmove(void* dest, const void* src, const size_t count){ if (0 == count) { return NULL; } if (NULL == dest || NULL == src) { retu

2016-09-01 22:35:36 408

原创 C库中的strstr()函数实现

#include #include char* my_strstr(const char* str1, const char* str2)//在str1中找str2{ assert(str1); assert(str2); if (strlen(str1) < strlen(str2)) { return NULL; } char* s1 = (char*)str1;

2016-09-01 22:26:06 466

原创 求斐波那契数列的第n个数

递归实现:int f(int n){ if (n > 0) { //int a = 1, b = 1, c; if (1 == n) return 1; if (2 == n) return 1; return f(n - 1) + f(n - 2); } return -1;}非递归实现:int f(int n){ int a = 1;

2016-08-31 21:23:12 609

原创 判断大端小端问题

#include using namespace std;int checkCPU(){ union w { int a; char b; }c; c.a = 1; return (c.b == 1);}int main(){ int ret = checkCPU(); return 0;}大端:高位存放在低地址,低位放在高地址小端:高位存放在高地址

2016-08-31 21:17:48 351

原创 static在C和C++里各代表什么含义

C程序中:static用于函数定义时,或用于代码块之外的变量声明时,static关键字用于修改标识符的链接属性,从external改为internal,但标识符的存储类型和作用域不受影响。用这种方式声明的函数或变量只能在声明他们的源文件中访问。当static用于代码块内部的变量声明时,static关键字用于修改变量 存储类型,从自动变量修改为静态变量,但变量的链接属性和作用域不受影响。用这种方

2016-08-14 16:17:15 1197

原创 对一个行列都是升序的二维数组中查找一个数字

0361025911571013681418#include using namespace std;bool Find(int* arr, int rows, int columns, int key)//传值要将行列都传进来{ bool sign = false;//定义一个标志 if (arr != NULL && rows > 0 && columns > 0) { in

2016-08-13 21:53:38 558

原创 epoll的优点

epoll既然是对select和poll的改进。在此之前,我们先看一下epoll和select和poll的调用接口上的不同,select和poll都只提供了一个函数——select或者poll函数。而epoll提供了三个函数,epoll_create,epoll_ctl和epoll_wait,epoll_create是创建一个epoll句柄;epoll_ctl是注册要监听的事件类型;epoll_w

2016-08-09 11:29:27 993

转载 linux进程描述符task_struct详解

大家都知道进程,可是知道linux是怎么管理其进程的吗?每一个进程都有一个进程描述符,具体是task_struct结构体存储相关的信息,在linux/sched.h文件里定义,那么我们先看看linux内核3.0版本的task_struct结构体的定义吧(删除了不必要的字段,只保留了重要的字段)。同时欢迎大家转载和交流。struct task_struct {//这个是进程的运行时状

2016-08-08 19:50:01 891

原创 端口号的分类

1)公认端口(Well Known Ports):从0到1023,它们紧密绑定(binding)于一些服务。通常这些端口的通讯明确表明了某种服务的协议。例如:80端口实际上总是HTTP通讯。   (2)注册端口(Registered Ports):从1024到49151。它们松散地绑定于一些服务。也就是说有许多服务绑定于这些端口,这些端口同样用于许多其它目的。例如:许多系统处理动态端口从102

2016-08-07 21:52:38 413

原创 为什么TCP协议需要三次握手?

A是主动发起,A最后还有发送一次确认,主要是为了防止已失效的连接请求报文段突然又传送到了B,因而产生错误。所谓“已失效的连接请求报文段”是这样产生的。A发出连接请求,但因为连接请求报文丢失而未收到确认。于是A再重传一次连接请求。后来收到了确认,建立了连接。数据传输完毕后,释放连接。如果A第一次发的连接请求没有丢失,而是因为网络节点长时间滞留了,以致延误到连接请求报文段后,就误认为是A又发送了一

2016-08-04 08:42:10 325

原创 路由表的建立

路由表是如何建立的?路由表:指路由器或者其他互联网网络设备上存储的一张路由信息表,该表中存有到达特定网络终端的路径,在某些情况下,还有一些与这些路径相关的度量。静态路由算法:(1) Dijkstra算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。(2) 扩散法:事先不需要任何网络信息;路由器把收到的每

2016-08-04 08:40:37 2450

原创 计算机网络IP数据包的3个标志位以及IP数据报的分片和重组过程

1.3个标志位是哪3位?目前只有两位有意义标志位中的最低位记为MF(More Fragment)。MF=1即表示后面"还有分片"的数据报。MF=0表示这已是若干数据报片中的最后一个。标志字段中间的以为记为DF(Don't Fragment)。意思是"不能分片"的数据报。只有当DF=0是才允许分片。2.描述数据报的分片和组装过程分片和重新组装的过程对传输层是透明的,其

2016-08-04 08:36:44 8836

原创 将博客搬CSDN

我要将博客搬到CSDN

2016-08-02 19:38:37 435

原创 将博客搬至CSDN

将博客搬至CSDN

2016-08-02 19:38:35 224

原创 学习C++中的多态

一、概念  多态是面向对象程序设计的三大特征之一。封装性是基础,继承性是关键,多态性是补充,而多态又存在于继承的环境之中。多态性的含义就是多种状态。C++语言中支持两种多态性。一种是函数重载和运算符重载,又被称为静态多态,另一种是动态联编和虚函数,被称为动态多态。在这里主要讨论第一种和第二种的虚函数。1.函数重载    函数重载简单的说就是给一个函数名多个含义。C++语言中允许在相同的作用域内以相

2016-08-02 19:38:32 260

原创 C++中继承的性质

继承机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类性质的基础上进行扩展,增加功能。继承的定义的格式:class 派生类名:继承类型 基类名继承类型包括有:public(公有继承)                private(私有继承)                protected(保护继承)继承关系基类的public成员基类的private成员基    类  

2016-08-02 19:38:29 433

原创 初学C++遇到的引用头文件问题

我以 求自然数1—10之和 这个自然数为例。第一种:直接将std整个拿过来。第二种:是用哪一个标识符就用std定义。第三种:是在用标识符的时候直接定义。#include using namespace std;void main(){ int i = 0, sum = 0; while (i <= 10) { sum += i; i++; } cout << "sum=" 

2016-08-02 19:38:26 291

空空如也

空空如也

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

TA关注的人

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