自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(83)
  • 资源 (1)
  • 收藏
  • 关注

原创 【亲测有效】Windows下ndk工具编译curl库生成.a文件

libcurl版本:7.73.0ndk版本:好像是最新版本编译android版本:arm64-v8a / all编译步骤:1. 新建jni文件夹,把libcurl源码所有文件拷贝到jni文件夹2. 在jni目录添加以下两个mk编译文件Android.mkLOCAL_PATH:= $(call my-dir)CFLAGS := -Wpointer-arith -Wwrite-strings -Wunused -Winline \-Wnested-externs -..

2020-11-20 15:46:46 59

原创 android实现天气预报App(1)——全国省、市、县三级列表

前期准备工作首先创建XXXWeather项目,具体的我就不多说这里使用LitePal来管理App的数据库我们在app/build.gradle文件中增加App需要用到的依赖 implementation 'com.google.android.material:material:1.0.0' implementation 'org.litepal.android:core:1.4.1'...

2019-09-30 11:39:14 8942 8

原创 android实现天气预报App(0)

首先来看看目录结构activity:主要是天气预报的各个页面db:存放省、市、县三种数据的实体类gson:存放获取的天气相关的json实体类service:天气等数据更新相关代码的存储utils:存放的是一些网络请求,数据存储等相关工具类相关功能本天气预报App主要是在看郭霖大神的《第一行代码》时,顺便写一个练练手的,同时也有自己的一些改变。先看看图吧:基本功能如图所示...

2019-09-30 10:08:47 11569 20

原创 记录问题——Session 'app': Install failed.

发现问题在使用百度地图SDK时,在AndroidManifest.xml中增加了几个权限,和标签,又注册了LBS SDK中的服务,结果出现以下问题在网上搜了好多方法都不行,查看Event LogFailed to commit install session 2087392238 with command cmd package install-commit 2087392238. Err...

2019-09-29 11:15:08 1892 1

原创 解决方案----Android中出现 Cannot resolve symbol XXX

话不多说,直接上图解决方案1:然后点击解决方案2:1.哪个Jar包有问题就把该配置注释掉,比如下面这个:dependencies { //implementation 'com.android.support:appcompat-v7:28.0.0-alpha3' //implementation 'com.android.support:desig...

2019-09-02 19:48:42 828

原创 解决方案----标题栏使用 setSupportActionBar(toolbar) 后报错

标题栏使用 setSupportActionBar(toolbar) 后报错This Activity already has an action bar supplied by the window decor.Do not request Window.FEATURE_SUPPORT_ACTION_BAR and set windowActionBarto false in y...

2019-09-02 19:40:28 1018

原创 C++:堆栈溢出问题?

堆栈溢出的原因1.函数调用层次太深。函数递归调用时,系统要在栈中不断保存函数调用时的现场和产生的变量,如果递归调用太深,就会造成栈溢出,这时递归无法返回。再有,当函数调用层次过深时也可能导致栈无法容纳这些调用的返回地址而造成栈溢出。2.动态申请空间使用之后没有释放。由于C语言中没有垃圾资源自动回收机制,因此,需要程序主动释放已经不再使用的动态地址空间。申请的动态空间使用的是堆空间,动态空...

2018-09-21 18:31:09 1833

原创 C++:while(cin>>tmp)无法结束

有这样一段代码:int tmp;vector<int> arr;while (cin >> tmp){ arr.push_back(tmp);}for (int i = 0; i < arr.size(); i++){ cout << arr[i] << ' ';}运行输入:结果是无法结束,怎么回事呢?...

2018-09-14 20:25:46 1943

原创 解决:CentOS 7下yum install mysql-server无包可用

在Linux下安装mysql,同时要把mysql-server安装完成,但是使用yum安装会出现以下问题解决方法 如下:首先输入以下命令 wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm然后输入ls 进入目录会发现有安装包输入以下命令rpm -ivh mysql-communi...

2018-09-08 10:07:48 3278 1

原创 面试题:虚函数与纯虚函数的区别

1.虚函数和纯虚函数可以定义在同一个类中,含有纯虚函数的类被称为抽象类,而只含有虚函数的类不能被称为抽象类。2.虚函数可以被直接使用,也可以被子类重载以后,以多态的形式调用,而纯虚函数必须在子类中实现该函数才可以使用,因为纯虚函数在基类有声明而没有定义。3.虚函数和纯虚函数都可以在子类中被重载,以多态的形式被调用。4.虚函数和纯虚函数通常存在于抽象基类之中,被继承的子类重载,目的是提供...

2018-09-03 17:21:11 1360

原创 Struct和Class的区别

一、c++最初被称为“c with class”,足见class在c++中的地位。在c++中我们可以用class自定义用户数据类型,然而它还存在一个类似的——struct,他们似乎有着太多的相同的特点与功能。C++中的struct对C中的struct进行了扩充,它已经不再只是一个包含不同数据类型的数据结构了,它已经获取了太多的功能。最本质的一个区别就是默认的访问控制,体现在两个方面:   ...

2018-09-03 17:13:07 629

原创 STL之迭代器&&迭代器失效

1.说说设计模式?(迭代器模式)        迭代器模式作为STL的六大组件之一,通俗来讲,它就是用来遍历容器的,对容器进行一定的操作。我们通常使用的容器vector、list、map、set、multimap、multiset、deque,内部是实现有顺序表、链表、红黑树。如果我们遍历这些容器就要明白它们的底层构造,相当不方便。iterator被定义出来就是不需要了解这些容器的底层实现,来...

2018-08-11 19:59:59 292

原创 C++四种强制类型转换的机制与功能

C++四种强制类型转换1.static_cast(编译时处理)用于两个相关的类型的转换,属于静态转换(非多态类型转换)2.const_cast(编译时处理)删除已有变量的const属性,方便赋值,但是修改的话还是要加上volatile关键字只能对指针或者引用去除或者添加const属性,对于变量直接类型不能使用const_cast; 不能用于不同类型之间的转换,只能改变同种...

2018-08-09 11:29:19 366

原创 C++11新特性之一

1.初始化方式C++11扩大了用大括号括起的列表(初始化列表)的使用范围,使其可用于所有的内置类型和用户自定义的类型,使用初始化列表时,可添加等号 (=),也可不添加。vector<int> v;v.pushback(1);...vector<int> v{1,2,3,4,5};...map<string,string> dict{{"in...

2018-08-09 01:33:30 126

原创 访问空指针程序崩溃的底层剖析

在C/C++程序中,我们访问空指针,产生“不可预料”的错误,导致程序崩溃,那为什么程序会崩溃呢? 访问指针的时候虚拟地址就会向物理地址映射,此时页表会去查看这块地址,而这块地址被存放在只读区,当页表发现地址是无效的,就会反映给操作系统,操作系统就会发送11号信号终止此进程,所以进程异常终止程序崩溃在 Linux 系统中:访问空指针会产生 Segmentation fault 的错误。...

2018-08-04 18:53:59 1146

原创 正则表达式

shell编程之正则表达式部分正则表达式简介 正则表达式是用于描述字符排列和匹配模式的一种语法规则。它主要用于字符串的模式分割、匹配、查找以及替换操作。正则表达式与通配符这里归纳一下:正则表达式:主要用来匹配文件内容,如greo包含匹配通配符:主要用来匹配文件名,如find完全匹配基础正则表达式字符截取命令cut [选项] 文件...

2018-08-01 17:24:21 137

原创 shell编程之条件判断与流程控制

shell编程之条件判断语句与流程控制简单点来说就是if,for,case,where之类的判断语句,然后结合一些shell命令来达到简化一些操作。下面的内容是重点,是条件判断的重点!!!刚开始不理解也没关系,下面有实例演示。按照文件类型判断判断格式 [ 需要进行判断的语句 ]按照文件权限进行判断两个文件之间进行比较两个整数之间比较字符串的判断...

2018-08-01 17:20:17 438

原创 shell运算符

declare [+/-][选项] 变量名-表示给变量设定类型属性+表示取消掉设定的类型属性选项:a 数组类型i 整数类型x 设为环境变量r 将该变量设定为只读属性,设定后无法被unset取消掉,无法修改其中的内容p 显示指定变量的被声明类型整数类型例子x=1y=2declare -i result=$x+$yecho $result#结果是3,不是之...

2018-08-01 17:08:36 83

原创 shell变量

shell编程简介shell编程目的主要是为了简化管理人员的管理操作,算是为偷懒找了一个好的办法。变量定义 变量是计算机内存的单元,其中存放的值可以改变。 变量让你能够把程序中准备使用的每一段数据都赋值给一个简短、易于记忆的名字,因此他们十分有用。 变量的命名规则变量名必须以字母或下划线打头,名字中间只能由字母、数字和下划线组成。变量名的长度不得超过25...

2018-08-01 17:02:45 106

原创 C语言复习—模拟实现C库函数、atoi

模拟实现C语言库函数str库函数\#include <stdio.h> \#include <stdlib.h> \#include <assert.h> 1.模拟实现strcpy 将源字符串src拷贝赋值到目标字符串dest中char *my_strcpy(char *dest, const char* src){ ass...

2018-08-01 15:40:47 131

原创 n!的末尾0的个数

题目描述: 输入一个正整数n,求n!(即阶乘)末尾有多少个0? 比如: n = 10; n! = 3628800,所以答案为2 。解题思路: 对于这样的问题,我们可以换个思维方式,它要求0的个数,那么0是怎么来的? 是不是一对2*5得到的0,所以我们可以分解这个问题分,把他看作是求整数n分解质因数后,一共有多少组min(2,5),在当然2的个数肯定比5多,所以我们继续往...

2018-07-30 14:24:55 367

原创 动态内存分配、malloc与new的区别

内存分配先看内存的分布状况 一个由C/C++编译的程序占用的内存分为以下几个部分: 1、栈区(stack)— 由编译器自动分配释放 ,存放为运行函数而分配的局部变量、函数参数、返回数据、返回地址等。其操作方式类似于数据结构中的栈。 2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束 时可能由OS回收 。分配方式...

2018-07-29 10:03:27 11933 2

原创 C语言复习—宏与函数、sizeof与strlen区别总结

#define定义的宏和函数的比较程序编译过程 预编译阶段(*.i) —>编译(*.s)—>汇编(*.o)—>链接 预处理在预编译阶段,做一些代码文本的替换工作,主要处理#开头的预编译指令。 C语言提供的预处理功能有: 1)宏定义 2)文件包含 3)条件编译 宏定义的函数和用户自定义的函数的区别及优缺点? 宏的优势 ...

2018-07-27 11:46:42 754

转载 C++面试经典总结

1.    面向对象的程序设计思想是什么?答:把数据结构和对数据结构进行操作的方法封装形成一个个的对象。2.    什么是类?答:把一些具有共性的对象归类后形成一个集合,也就是所谓的类。3.    对象都具有的两方面特征是什么?分别是什么含义?答:对象都具有的特征是:静态特征和动态特征。静态特征是指能描述对象的一些属性(成员变量),动态特征是指对象表现出来的行为(成员函数)...

2018-07-27 09:46:07 1509

原创 C/C++经典面试题总结

面试题3:sizeof和strlen的区别sizeof和strlen有以下区别:     sizeof是一个操作符,strlen是库函数。     sizeof的参数可以是数据的类型,也可以是变量,而strlen只能以结尾为‘\0‘的字符串作参数。    编译器在编译时就计算出了sizeof的结果。而strlen函数必须在运行时才能计算出来。并且sizeof计算的是数据类型占内存的大小,而...

2018-07-27 09:39:37 1131

转载 C语言面试题总结

1 预处理问题1:什么是预编译?何时需要预编译?答:预编译又称预处理,是整个编译过程最先做的工作,即程序执行前的一些预处理工作。主要处理#开头的指令。如拷贝#include包含的文件代码、替换#define定义的宏、条件编译#if等。.何时需要预编译:1、总是使用不经常改动的大型代码体。2、程序由多个模块组成,所有模块都使用一组标准的包含文件和相同的编译选项。在这种情况下,可以将所有包...

2018-07-26 22:07:16 14258

原创 C语言复习—谈谈你理解的指针

指针讲讲你理解的指针 什么是指针呢? 指针实质上就是地址,而地址是内存单元的编号(不能重复),所以说,一个变量可以有两个地址,但是两个变量不能存在同一块地址空间中。指针就是一个存放地址的变量。指针也有大小,在32位平台下是4个字节,在64位平台下是8个字节。指针相减运算求的是两块内存之间的地址差。 为什么要用指针? 1. 可以处理堆中存放的大型数据。 2. 可以...

2018-07-26 18:09:49 361

原创 C语言复习—结构体的内存对齐规则、位段的内存分配、枚举的优点

结构体的内存对齐规则、枚举的优点结构体 如何对齐 1. 将结构体第一个成员放在与结构体偏移量为0的地址处; 2. 其他成员要对齐到对齐数的整数倍处,对齐数 = 编译器默认的一个数字 与 该成员大小的较小值。 3. 结构体的总大小为对最大齐数的整数倍。 对齐原因 1. 栈上存储的数据内存尽可能的在自然边界上对齐。 2. 为了访问未对齐的内存,...

2018-07-26 14:09:36 150

原创 C语言复习—static/const/volatile关键字

static/const/volatile关键字static 先从C语言开始 1- static修饰代码块内部的变量(局部变量),改变了变量的存储类型,变量将从栈区转到静态区,不改变变量的属性和作用域。 2- static修饰局部变量,具有 “记忆性” 的特点,还可以延长它的生命周期。 3- 普通的局部变量是在栈上分配空间,因此每次调用函数时,分配的空间可能都不...

2018-07-26 14:05:29 182

原创 复习—C复习重点总结

C复习重点总结 1.static/const/volatile关键字在C/C++中的作用 2.结构体的内存对齐规则、位段的内存分配、枚举的优点 3.指针 4.前置++,后置++ 5.#define定义的宏和函数的比较 6.sizeof与strlen 7.形参和实参 8.大小端问题 9.指...

2018-07-26 14:01:49 253

原创 冒泡排序的优化

传统的冒泡排序算法我们应该很熟悉,主要的原理是:1.比较相邻的元素。如果第一个比第二个大,就交换他们两个。2.对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。3.针对所有的元素重复以上的步骤,除了最后一个。4.持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。但是此种方法每一趟循环只能找到一个最大或者最小...

2018-07-24 15:12:39 67

原创 二分查找有这么简单?

题目一给定一个有序(非降序)数组A,求任意一个i使得A[i]等于key,不存在则返回-1这个是最原始的二分查找题目,利用数组的有序特性,拆半查找,使得查找时间复杂度为O(logN)。int search(int arr[], int n, int key)  {      int low = 0, high = n-1;      while(low <= high)...

2018-07-19 14:55:45 83

原创 操作系统—进程的退出

进程退出linux下正常的退出方式:1.在main函数中使用了return返回. (return之后把控制权交给调用函数)2.调用exit()或者_exit; (exit()之后把控制权交给系统)异常退出:1.调用abort函数2.Ctrl+c,进程收到某个信号,而该信号是程序中止.不管是哪一种退出方式,最后都会执行内核中的同一代码,这段代码用来关闭进程所用到的已经打开的文件描述符所占用的内存和资...

2018-07-15 18:34:33 243

原创 操作系统—进程PCB浅析

先了解PCB 进程就是一个运行当中的程序. 程序本来是存储在磁盘的,当我们需要执行它的时候,先把他读取到内存当中,再然后放入到寄存器中,最后让cpu执行程序,这个时候程序就变成了一个进程. 但是进程的生命周期其实不是很长,因为程序运行结束之后,进程的生命周期就终止了. 那么每一个进程肯定都是一个独立的个体,那么每个进程与进程直接肯定都拥有自己独有的一份管理自己的单独的任务...

2018-07-15 17:19:48 1926

原创 操作系统—物理内存与虚拟内存

概念解析物理内存,在应用中,自然是顾名思义,物理上,真实的插在板子上的内存是多大就是多大了。而在CPU中的概念,物理内存就是CPU的地址线可以直接进行寻址的内存空间大小。比如8086只有20根地址线,那么它的寻址空间就是1MB,我们就说8086能支持1MB的物理内存,及时我们安装了128M的内存条在板子上,我们也只能说8086拥有1MB的物理内存空间。同理我们现在大部分使用的是32位的机子,32位...

2018-07-15 17:12:17 7945

原创 操作系统—进程等待

进程等待的基础概念 进程等待就是为了同步父进程和子进程,如把运算放到子进程,赋值放到父进程,可能需要让父进程等待子进程运算结束.一个进程在 终止时会关闭所有的文件描述符,释放在用户空间分配的内存,但他的PCB还保留着,内核在其中保存了一些信息:如果是正常终止则 保存着退出状态,如果是异常退出则保存着导致该进程终止的信号是哪个. 这个进程的父进程可以调用wait或wait...

2018-07-15 09:17:57 762

原创 Python+Selenium基础之常见定位方法

python爬取网页,少不了使用几种网页元素的定位方法。 使用火狐浏览器下载firebug和firepath组件,可以有效快速的获取定位。常见定位方法常见的定位元素、id、class、css、xpath使用方法如下: find_element_by_name find_element_by_xpath find_elemrnt_by_link_text fi...

2018-07-13 17:22:37 206

原创 Python+Selenium基础之访问浏览器

序: 假期在学校安排的实习中,开始对python网络爬虫有了接触。以Eclipse编译器进行配置,来实现python网络爬虫。本文介绍如何初始化一个webdriver实例对象driver,然后打开和关闭浏览器。要用selenium打开Firefox或者Chrome浏览器。 首先需要去下载一个driver插件geckodriver.exe/chromedriver.exe,可自行在网...

2018-07-13 16:39:48 227

原创 网络基础—TCP与UDP之间的区别

TCP与UDP区别 1、TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接 2、TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付 TCP通过校验和,重传控制,序号标识,滑动窗口、确认应答实现可靠传输。如丢包时的重发控制,还可以对次序乱掉的分包进行顺序控...

2018-07-13 15:16:28 132

原创 网络基础—TCP的超时重传、滑动窗口、拥塞控制、快重传和快恢复

TCP超时重传 原理是在发送某一个数据以后就开启一个计时器,在一定时间内如果没有得到发送的数据报的ACK报文,那么就重新发送数据,直到发送成功为止。 影响超时重传机制协议效率的一个关键参数是重传超时时间(RTO,Retransmission TimeOut)。RTO的值被设置过大过小都会对协议造成不利影响。 (1)RTO设长了,重发就慢,没有效率,性能差。 ...

2018-07-13 14:50:05 542

UNIX环境高级编程

    If you are an experienced C programmer with a working knowledge of UNIX, you cannot afford to be without this up-to -date tutorial on the system call interface and the most important functions found in the ANSI C library. Richard Stevens describes more than 200 system calls and functions; since he believes the best way to learn code is to read code,a brief example accompanies each description. Building upon information presented in the first 15 chapters, the author offers chapter-long examples teaching you how to create a database library, a PostScript printer driver, a modem dialer, and a program that runs other programs under a pseudo terminal. To make your analysis and understanding ofthis code even easier, and to allow you to modify it, all of the code in the book is available via UUNET. Advanced Programming in the UNIX Environment is applicable to all major UNIX releases, especially System V Release the latest release of 4.3BSD, including 386BSD. These real-world implementations allow you to more clearly understand the status of the current and future standards,including IEEE POSIX and XPG3.

2017-11-18

空空如也

空空如也

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

TA关注的人 TA的粉丝

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