自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C++ 继承同一个的基类的所有派生类使用同一个全局变量的三种方式

-

2022-07-27 15:00:17 518 1

转载 根据字节大小分割字符串(java)

public List<String> strSplit(String src, int bytes){ try { if(src == null){ return null; } List<String> splitList = new ArrayList<String>(); int startIndex = 0; //

2022-04-15 14:20:37 1132

原创 Android Handler,HandlerThread,Looper的使用实例

public class Demo{ private static final String TAG = "Demo"; private HandlerThread mHandlerThread = null; private Handler mHandler= null; public void init() { // start CallBackThread mHandlerThread = new HandlerThread("tcpHanler"

2022-03-10 21:00:51 1493

原创 AndroidStudio如何将proto文件转为java代码

将proto文件放置在$projectDir/src/main/proto目录下在工程的build.gradle中配置buildscript { repositories { google() mavenCentral() } dependencies { classpath "com.android.tools.build:gradle:7.0.2" // 配置如下 classpath 'com.

2022-03-10 20:51:55 2521

原创 Android Http client如何跳过证书校验

public class HttpClientDemo { public static final String TAG = "HttpClientDemo"; // 用于跳过证书校验 private TrustManager[] mTrustManagers; public HttpClientDemo() { mTrustManagers = new TrustManager[]{ new X509TrustManager() {

2022-03-10 20:43:46 2479

原创 Android http client实例

package com.iauto.scenarioenginelite;import android.util.Log;import org.json.JSONArray;import org.json.JSONObject;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.IOException;import java.io.InputStream;import java.io.In

2022-03-10 20:41:30 897

原创 Android mqtt客户端实例

build.gredle中配置dependencies{api 'org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.1.0'}代码实例package com.example.mqtt;import android.util.Log;import org.eclipse.paho.client.mqttv3.MqttCallbackExtended;import org.eclipse.paho.client.mqttv3.Mqtt.

2022-03-10 20:36:20 1137

原创 Android如何设置Activity不显示界面

在AndroidManifest.xml中配置<application android:theme="@android:style/Theme.NoDisplay"/>在MainAcivity中onCreate末尾调用finish(),或者在onResume中调用也可@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanc.

2022-03-10 20:27:22 3249

原创 Android如何启动service

启动service的两种方式1. 通过StartService启动Service通过startService启动后,service会一直无限期运行下去,当外部调用了stopService()或stopSelf()方法时,该Service才会停止运行并销毁当系统资源不足时, 会回收一些不重要的service,service被系统回收也会停止运行并被销毁生命周期onCreate()1.如果service没被创建过,调用startService()后会执行onCreate()回调;2.如果

2022-03-10 20:08:48 16157 1

原创 Android启动流程

init启动流程当按下Power键,引导芯片加载bootloader并将系统OS拉起来,然后启动Linux内核,当内核完成系统设置,会寻找init文件,进而启动root进程或者Linux用户空间的都一个进程,也就是启动init进程init进程是Android的第一个启动进程,进程号为1init进程主要工作包括以下几点:创建并挂载设备解析两个配置文件,init.rc 文件, 另一个是与硬件平台相关的配置文件init.bravo.rc启动zygote初始化并启动属性服务(在adb命令中可以使用g

2022-02-24 14:12:47 947

转载 c++ 十进制转十六进制字符串(0x***)格式

init是一个进程,确切地说,它是 Linux 系统中用户空间的第一个进程。由于Android 是基于Linux 内核的,所以 init 也是 Android 系统中用户空间的第一个进程,它的进程号是1

2022-02-21 15:46:22 2302

原创 ubuntu下载android11源码

1. 下载repo确保你的主目录中有一个 bin/ 目录,并且它包含在你的路径中mkdir ~/binPATH=~/bin:$PATH下载 Repo 启动器,赋予可执行权限:curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repochmod a+x ~/bin/repo2. 下载源码mkdir android11cd android11repo init -u https://and

2022-02-17 16:59:47 1760

原创 深入理解JNI

概述JNI是一种本地编程接口。它允许运行在JAVA虚拟机中的JAVA代码和用其他编程语言,诸如C语言、C++、汇编,写的应用和库之间的交互操作java层使用1. 加载jni库static { try { System.loadLibrary(“demo_jni”); } catch (SecurityException ex) { Log.e(TAG, “System.loadLibrary SecurityException “ + ex); } catch (NullPointer

2022-02-15 20:27:08 1070

原创 算法入门(LeetCode)——位运算

常用位运算与(&)运算1. 运算法则两个二进制数进行与&运算,如果对应位都为1则结果为1,否则为0.0&0=0; 0&1=0; 1&0=0; 1&1=1;2. 技巧及用途根据二进制常识,尾数为1则为奇数,反之为偶数n&1 = 1, n 是奇数;n&1 = 0, n 是偶数二进制表示中最低位n > 0; n&(n-1) == 0, 说明n的二进制中只有一位是1,即n是2的幂;n >0; n&

2021-12-30 16:40:54 240

原创 算法入门(LeetCode)——动态规划

关于动态规划理解可以参考 https://www.sohu.com/a/149075950_68444570. 爬楼梯1. 题目假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。输入: 2输出: 2解释: 有两种方法可以爬到楼顶。1. 1 阶 + 1 阶2. 2 阶爬楼梯2. 代码class Solution {public: int climbStairs(int n)

2021-12-29 20:54:44 93

原创 算法入门(LeetCode)——递归/回溯

21. 合并两个有序链表1. 题目将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的合并两个有序链表2. 代码struct ListNode { int val; ListNode *next; ListNode() : val(0), next(nullptr) {} ListNode(int x) : val(x), next(nullptr) {} ListNode(int x, ListNode *next

2021-12-28 14:07:51 412

原创 算法入门(LeetCode)——深度优先搜索/广度优先搜索

733. 图像渲染1. 题目有一幅以二维整数数组表示的图画,每一个整数表示该图画的像素值大小,数值在 0 到 65535 之间。给你一个坐标 (sr, sc) 表示图像渲染开始的像素值(行 ,列)和一个新的颜色值 newColor,让你重新上色这幅图像。为了完成上色工作,从初始坐标开始,记录初始坐标的上下左右四个方向上像素值与初始坐标相同的相连像素点,接着再记录这四个方向上符合条件的像素点与他们对应四个方向上像素值与初始坐标相同的相连像素点,……,重复该过程。将所有有记录的像素点的颜色值改为新的颜色

2021-12-24 18:31:58 1545

原创 算法入门(LeetCode)——滑动窗口

3. 无重复字符的最长子串1. 题目给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。输入: s = "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。无重复字符的最长子串2. 代码c++#include <stdio.h>#include <unordered_set>#include <math.h>#include <iostream>class Solut

2021-12-21 17:27:22 793

原创 算法入门(LeetCode)——双指针

977. 有序数组的平方1. 题目给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序输入:nums = [-4,-1,0,3,10]输出:[0,1,9,16,100]解释:平方后,数组变为 [16,1,0,9,100]排序后,数组变为 [0,1,9,16,100]有序数组的平方2. 代码#include <stdio.h>#include <math.h>#include <vector&gt

2021-12-17 16:19:27 440

原创 算法入门(LeetCode)—— 二分查找

1. 题目给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1输入: nums = [-1,0,3,5,9,12], target = 9输出: 4解释: 9 出现在 nums 中并且下标为 4题目链接2. 代码c++class Solution {public: int search(vector<int>& nums, int target

2021-12-13 20:25:09 348

原创 多线程编程std::promise,std::future, std::shared_future, std::packaged_task, std::async

std::promise 和 std::future简介  std::promise 和 std::future 是 C++ 进行单向数据传递的一种方式。std::promise 是数据的输入端,std::future 是数据的输出端使用在线程1中创建一个std::promise对象std::promise<int> promise;线程1之前从promiseObj获取std::future对象std::future<int> future = promise.get

2021-12-07 20:36:58 737

原创 Android实现Tcp client端(java)

TCPClient .javapackage com.example.testtcp;import android.util.Log;import org.json.JSONArray;import org.json.JSONObject;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.net.InetSocketAddress;import j

2021-12-03 15:59:38 4559

原创 使用mosquittopp实现Mqtt通信client端

简介  libmosquittopp.so是对C库libmosquitto.so的C++封装库,提供了相比libmosquitto.so更简介方便的接口和使用方式。接口介绍connect连接Mqtt服务器disconnect断开Mqtt连接loop_start启动一个线程来处理网络通信loop_stop  调用此函数一次可停止以前使用loop_start创建的网络线程。对于要结束的网络线程,必须事先调用disconnect或将force参数设置为truetls_opts_set

2021-12-03 14:40:53 3662

原创 使用libcurl实现http通信——post上传数据并获取response

接口释义使用libcurl实现http通信——get获取response代码实现size_t responseStr(void* ptr, size_t size, size_t nmemb, void *userdata) { if (ptr == NULL || userdata == NULL || size == 0) { return 0; } size_t realSize = size*nmemb; std::string *str = (

2021-12-02 21:17:57 3410

原创 Vscode 使用常用快捷键

正则表达式移除空格正则表达式移除行首空格:\s*^正则表达式移除行尾空格:\s*$正则表达式移除多余空行:^\s*(?=\r?$)\n选中多处同时编辑选中一段文字,按shift+alt+i,可以在每行末尾出现光标alt+shift+鼠标左键:多行选择ctrl+shift+右箭头:光标后移并选中ctrl+shift+左箭头:光标前移并选中ctrl+shift+上箭头:向上出现多行光标ctrl+shift+下箭头:向下出现多行光标代码跳转及返回ctrl+鼠标左键:

2021-12-02 17:16:35 429

原创 数值与对象之间的类型转换

数值转对象 class MyClass { private: int mValue; public: MyClass(int value) { mValue = value; } }; int main(int argc, const char * argv[]) { int n = 33.3; MyClass myClass(30); // 将int类型的值转换为MyClass对象 return 0;

2021-11-02 21:28:17 346

原创 c++ 友元函数

友元函数使用规则在类(结构体)中需要定义友元函数的原型(前面加friend)friend只能在友元函数的原型加,不能在友元函数的实现部分加friend尽管友元函数的原型在类中定义,但不能像调用类成员方法一样调用友元函数实现类中定义的操作符函数自定义数据类型默认放在左边, MyClass operator*(int right) { return MyClass(mValue * right); }如果想要实现MyClass operator*(int l

2021-11-02 21:21:59 603

原创 操作符重载

操作符重载操作符重载实现#include <iostream>using namespace std;class MyClass{private: int mValue;public: int getValue(); void setValue(int value); MyClass(int value); MyClass operator+(MyClass c) { MyClass myClass(0); myClass.mV

2021-11-02 20:58:05 595

转载 Binder机制

Binder是Android系统提供的一种IPC机制,用于进程间通信原理IPC  每个Android的进程,只能运行在自己进程所拥有的虚拟地址空间。对应一个4GB的虚拟地址空间,其中3GB是用户空间,1GB是内核空间,当然内核空间的大小是可以通过参数配置调整的。  对于用户空间,不同进程之间彼此是不能共享的,而内核空间却是可共享的。  Client进程向Server进程通信,是利用进程间可共享的内核内存空间来完成底层通信工作  Client端与Server端进程往往采用ioctl等方法跟内核空

2021-07-30 14:33:06 631

原创 使用libcurl实现http通信——get获取response

在基于LibCurl的程序里,主要采用callback function (回调函数)的形式完成传输任务,用户在启动传输前设置好各类参数和回调函数,当满足条件时libcurl将调用用户的回调函数实现特定功能调用流程 curl_global_init(): 初始化libcurl  只能用一次,如果这个函数在curl_easy_init函数调用时还没调用,它讲由libcurl库自动调用,所以多线程下最好主动调用该函数以防止在线程中curl_easy_init时多次调用。  注意:虽然libc

2021-07-22 13:46:09 1025

原创 wav文件解析

简介wav文件采用RIFF(Resource Interchange File Format)文件格式结构。通常用来保存PCM格式的原始音频数据,所以通常被称为无损音频。但是严格意义上来讲,WAV也可以存储其它压缩格式的音频数据。WAV文件遵循RIFF规则,其内容以区块(chunk)为最小单位进行存储。WAV文件一般由3个区块组成:RIFF chunk、Format chunk和Data chunk。另外,文件中还可能包含一些可选的区块,如:Fact chunk、Cue points chunk、Pla

2021-07-21 21:21:57 4745

原创 jni java->c++传递对象, c++->java传递list

java->c++传递对象java 定义封装类package com.example;public class TestInfo { public boolean bool; public char ch; public double dou; public int in; public byte[] array; public String str; public TestInfo (boolean bool, char ch, double do

2021-07-21 20:15:29 240

原创 c++ 代码优化知识点

头文件尽量不要在头文件include,头文件中前向声明cpp文件中include参见: 减少与关联模块的耦合技巧(c++)函数作为void*回调函数传入,void *user可以传入this,回调函数中可以使用this指针调用类中成员函数新开线程中一定要注意使用sleep,不休眠会导致线程占用CPU过高,可能导致函数调用不到...

2021-07-05 20:49:06 62

原创 减少与关联模块的耦合技巧(c++)

尽量避免c++ 头文件中include关联模块头文件,可以使用前向声明B.hclass A;class B {public: B(A* a) : mA(a) {} ~B() {}private: A *mA;}B.cpp#include <A.h>如果在B.h引用关联模块的头文件(A.h),A.h中include的头文件,B文件也会引用,这就导致两个模块之间耦合度高,A模块所做的修改可能会影响到B模块,简单举例,A.h中引用了C.h, 在编译文件中包含了C.h所在路

2021-07-02 14:28:59 541

原创 c++函数——decltype关键字

decltype使用场景template<typename T1, typename T2>void templateFun(T1 x, T2 y){ // 当传入值 x:int, y:double时候 T1 sum = x + y; // 报错,因为 x + y 为double类型,T1 为int 类型 // 可以使用decltype关键字解决这个问题 decltype(x + y) sum = x + y; // 使用auto关键字也可以解决

2021-06-16 20:08:18 476

原创 c++函数

几种特殊函数内联函数  所谓“内联函数”就是将很简单的函数“内嵌”到调用他的程序代码中,只样做的目的旨在节约下原本函数调用时的时空开销  使用内联函数时,应注意的问题:  1)内联函数的定义性声明应该出现在对该函数的第一次调用之前。  2)内联函数首先是函数,函数的很多性质都适用于内联函数,如内联函数可以重载。  3)在内联函数中不允许使用循环语句和switch结果,带有异常接口声明的函数也不能声明为内联函数。inline void fun(int a, int b){ cout &

2021-06-09 20:04:26 76

原创 c++指针函数

// 计算阶乘int factorial(int n){ if(n == 0 || n == 1) { return 1; } else { return factorial(n - 1) * n; }}typedef int (*JC)(int n);int main(int argc, const char * argv[]){ // 函数指针 int m = factorial(5);

2021-06-08 19:27:16 119

原创 c++条件语句——容易忽略的冷知识

1. 宏定义中包含多条语句,最好使用do…while(0)语句#define PROCESS do{ cout<<"process"<<endl; cout<<"test" <<endl;}while(0)2. 逻辑表达式中的短路问题短路是指并未执行完条件判断语句就结束执行int m = 10;int n = 20;if(m == 10 || n == 11) {} //执行完m==10,不再继续执行n==11if(m != 10 &&

2021-06-07 19:58:43 117

原创 c++循环

forfor(init_expr; test_expr; update_expr)1. init_expr:使用C++的风格,只能初始化同一类型的一个或多个变量,使用C风格的初始化方式可以初始化多个类型的变量2. test_expr:通常是一个逻辑表达式,但是可以是任何的表达式。不过如果表达式是非逻辑表达式,系统会认为表达式返回truefor循环会进入死循环。如果要插入多个表达式,中间用逗号分隔,系统会用最后一个表达式的值做为整个test_expr的返回值。3. update_expr:通常

2021-05-24 19:53:21 260

原创 c++复杂数据类型——多维数组、多级指针、 数组模板、 vector(动态数组)

多维数组 // 一维数组 int codes1[10] = {1,2,3}; // 二维数组 int codes2[5][10] = {{1,2},{4,5},{},{},{1,2,3,4,5,6,7,8,9,200}}; //{1,2,3,4,5,6,7,8,9,0,123/*codes2[1][0]*/};*/ cout << "codes2[1][0] = " << codes2[1][0] << endl; //4

2021-05-18 20:46:48 337

qnx编译流程及使用.xlsx

qnx编译流程, makefile使用, common.mk使用

2021-05-10

空空如也

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

TA关注的人

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