自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(150)
  • 收藏
  • 关注

原创 访问者设计模式

访问者设计模式:##被访问者:有一些稳定的结构对象,提供accept方法供访问者进行访问##访问者:一些访问者,有一个visitor方法实现对对象的访问,不同的对象会做出不同的反应!##应用公司年终奖考核:被访问者有:程序员,产品经理(accept(Visitor))访问者:CEO,CTO(visit(…))CEO可能只会关注KPI,CTO可能只会关注程序员的KPI+代码量,产品...

2019-07-15 13:29:35 220

原创 Cmake杂记

解决什么问题:很多make工具有不同饭标准和规范,不支持跨平台,如果想跨平台就的为每个平台都写一份makefile,cmake就是用来可以跨平台的编译工具使用步骤:1.编写Cmakelist.txt2.执行make PATH生成Makefile3.使用make命令进行编译安装:编译源码下载二进制文件命令行操作需要:CMAKE常用语法://指定最小支持的Cmake版本cmak...

2019-07-06 10:24:44 330

原创 OpenGL ES绘制流程理解

OpenGL ES绘制流程理解

2019-06-04 23:55:20 685

原创 IM自定义消息协议安全--密钥协商过程

秘钥协商流程IM消息自定义消息体设计时要考虑到可能产生的安全问题,如果消息体没有进行加密措施,很容易被抓包截取,消息加密要考虑到各个流程的可能出现的安全性问题! 下面是IM消息加密设计的密钥协商过程: C S(public key)P1,K1(AES) p1(k1)---> (private k...

2018-06-11 10:29:26 1332

原创 SparseArray实现原理

SparseArraySparseArray原理: SparseArray采用两个数组,用来存放key以及value值的,核心思想是通过折半查找来找到key对应的位置,然后取出值,或者插入值!二分查找static int binarySearch(int[] array, int size, int value) { int lo = 0; int hi = si...

2018-06-07 16:03:57 3377

原创 YV12,YU12,NV12,NV21,YVU420,I420,YUV420P,YUV420SP

最近在做手机相机视频采集,需要采集视频数据然后转换成相应的格式进行传输,对一些存储格式做了一些了解,总结如下:WHY YUV RGB类似,YUV也是一种颜色编码方法,主要用于电视系统以及模拟视频领域,它将亮度信息(Y)与色彩信息(UV)分离,没有UV信息一样可以显示完整的图像,只不过是黑白的,这样的设计很好地解决了彩色电视机与黑白电视的兼容问题。并且,YUV不像RGB那样要求三个...

2018-05-21 22:41:53 4965

原创 SQL 高级语法

复制表数据复制表结构以及数据: create table new as select * from old复制数据到一个相同的表: insert into sametable select * from old只复制表结构: create table new as select * from old where 1 = 2 树形结构表查询查询某...

2018-05-03 18:12:22 654

原创 SQL 常用操作

SQL语句关键字DISTINCT用来返回唯一不同的列 select distinct name from student;where有条件的选取数据,对于文本值,使用单引号,数值不用引号! select * from person where age=20 select * from person where name='jonh'ins...

2018-05-03 16:43:52 743

原创 leetcode 二叉树遍历

二叉树遍历二叉树遍历:前序,中序,后序遍历,层序遍历,可以用递归或者队列,栈来实现!层序遍历/** * 102. Binary Tree Level Order Traversal * 利用队列实现层序遍历二叉树 * 思路: * 1.将根节点入队列 * 2.如果队列非空,执行以下步骤: * a.出队列取得队列的节点,访问该节点 * b.如果左子树非空,将左子树...

2018-03-27 16:10:52 456

原创 leetcode 二叉树相关

求根节点到叶节点的数字之和/** * 129. Sum Root to Leaf Numbers * 求根节点到叶节点的数字之和 * 递归出口,叶节点 * @param root * @return */public int sumNumbers(TreeNode root) { return sumTree(root,0);}public int sumTre...

2018-03-27 15:50:43 199

原创 leetcode 二分搜索树

二分搜索树二分搜索树势一颗典型的二叉树,二分搜索树根节点的值大于左孩子节点的值,小于右孩子节点的值,插入/删除/查找的时间复杂度都是log(n)二叉搜索树的创建,插入,删除创建,插入 /** * 思路: * 首先初始化第一个节点,然后第二个节点要插入树中需要找到要插入位置的根节点, * 有一个查找的过程,然后根据值的大小分别放在左右子树 * @param a * ...

2018-03-27 11:48:55 219

原创 状态模式/Android状态机/微信多人语音

最近在做类似微信多人语音,视频聊天功能,用到了Android的状态机,借此写写自己的理解状态模式对状态模式的理解:不同的状态对应不同的行为,当一个对象的状态改变了,那么该对象的行为也随之改变!通过将状态封装成一个类,然后去控制对象的行为,这就是状态模式!解决什么问题:一个事物有很多种状态,如果不使用状态模式,那么在执行具体的操作的时候,就会有很多的if/else 或者swit...

2018-03-18 12:04:03 704

原创 图片显示不完整

记录一个bug最近遇到一个非常难搞的问题,花了蛮长的时间才算解决了,这里记录一下自己的解决过程!图片显示一半我们的APP里面偶尔出现图片只加载了一部分的问题,但是其他用户显示是正常的,也不算必现,就是偶尔听用户报一下,之前也没有太过关注这个bug了,没有及时去处理,作为了一个遗留问题,延后解决! 随着时间的流逝,突然一个大boss直接将这个bug反馈到我们研发,而且还是比较重要的

2018-01-15 20:24:45 5872 1

原创 Glide使用及踩坑日记

Glide使用及踩坑日记背景项目中使用的是之前的ImageLoader,这个图片加载库很久没有维护了,决定使用Glide替换掉ImageLoader使用GlideGlide的优点1.Glide的API使用非常的方便,支持链式调用,支持各种形式源的图片2.默认使用RGB-565,内存使用更小,滑动更加平滑3. Glide支持和Glide的生命周期同步4.可以支持

2018-01-14 14:05:59 1217

原创 JNI DETECTED ERROR IN APPLICATION: java_object == null

记录一个问题,在调用一个j ni方法的时候报了一个错误,错误日志如下:01-02 10:29:26.288 20617-20617/? A/art: art/runtime/java_vm_ext.cc:470] JNI DETECTED ERROR IN APPLICATION: java_object == null01-02 10:29:26.288 20617-20617/? A/art:

2018-01-02 15:29:31 17836

原创 LRUCache源码解析

LruCache源码解析LruCache通常用来做图片缓存,通过LRU算法来缓存图片,我们来看源码是怎么实现!构造方法public LruCache(int maxSize) { if (maxSize <= 0) { throw new IllegalArgumentException("maxSize <= 0"); } this.maxSize = ma

2018-01-02 01:04:01 235

原创 微信的bug

记录一个微信的bug(请允许我说一段废话)Android是基于Linux的一个开放,开源的系统,使得成千上万的开发者投入其中,开源的一个弊端就是开发商对Android系统做了各种各样的定制,对我们开发者来说,有可能导致相同的代码在不同版本,不同厂商的手机表现形式不一样,需要对具体机型做适配!(正文开始)最近在做语音通话模块,需要在手机锁屏情况下收到通话信令,弹起通话界面,覆盖锁屏显示只需要添加几个属

2018-01-01 23:18:20 838

原创 AsyncTask源码解析

AsyncTask的使用AsyncTask是一个轻量级的异步线程类,主要用于异步加载数据并同时更新UI的操作,非常方便,使用也非常简单:“` @Override protected void onPreExecute() { super.onPreExecute(); } @Override protect

2017-12-06 22:19:53 164

原创 String to Integer (atoi)

class Solution { public int myAtoi(String str) { if (str == null) { return 0; } str = str.trim(); if ("".equals(str)) { return 0; }

2017-11-16 23:16:16 211

原创 Reverse Integer

/** * 将整数倒转 * 思路: * 1.将该数依次%10,并将结果保存起来,将改数/10 * 2.判断溢出问题 * @param x * @return */ public static int reverse1(int x) {

2017-11-16 09:08:04 211

原创 Longest Substring Without Repeating Characters

static class Solution { public static int lengthOfLongestSubstring(String s) { if (s== null || s.length() == 0) { return 0; } /** * * 思路:求不包含重复元素的

2017-11-14 22:33:51 170

原创 Add Two Numbers

思路:/** * 解决思路: * 1.判断链表是否为空 * 2.判断链表是否相等 * 3.相加的时候判断两个值之和是否大于10 * */package com.example.lib2;public class myClass {static class ListNode { int val; ListNode next; ListNode(int

2017-11-13 21:28:05 201

原创 1. Two Sum

题目Given an array of integers, return indices of the two numbers such that they add up to a specific target. You may assume that each input would have exactly one solution, and you may not use the same

2017-11-12 23:28:15 182

原创 Android 进程保活措施

保活的重要性对于一些需要存活时间较长的应用来说,进程保活是非常重要的,比如IM类型的APP为了收发消息的实时性,就需要APP能够更多的存活,不容易被系统杀掉,或者在被杀掉之后也能够起来,这就需要我们开发者做一些保活措施!一些措施1.提高进程优先级对于普通APP而言,提高APP的优先级(比如添加通知栏。。。。等措施将进程变成前台进程)虽然降低了APP被杀的概率,但是一旦系统内存不足被回收,APP也起不

2017-10-16 23:32:38 345

原创 FFMPEG 压缩视频文件

视频压缩这篇文章我们通过FFMPEG的filter通过指定文件的分辨率将文件进行压缩,压缩的流程如下:1.打开视频文件2.解复用3.解码4.编码5.复用代码1.打开视频文件//打开输入文件,初始化输入流int OpenInput(string inputUrl){ pktCount = 0; inputContext = avformat_alloc_context();

2017-10-15 15:28:49 2578 1

原创 Android 通过Fidder进行抓包

最近集成Glide的时候要看Glide的缓存是否生效,需要抓包APP是否发送了Http请求,可以通过设置网络代理,使用Fidder根据进行抓包分析,具体配置参照抓包配置

2017-10-15 14:38:41 327

原创 Mac环境下编译Android平台的ffmpeg

在Mac环境下编译Android平台的ffmpeg之前在Linux平台上编译过ffmpeg,具体可参考这篇文章点我 记得之前在Linux环境下编译的时候除了各种问题,各种不顺利,跳过了啦一些坑之后,这次在Mac环境下面就顺利的多了,一共花了10来分钟就编译完成!步骤1.安装NDK环境1.下载NDK2.指定NDK路径3.ndk-build命令验证是否装成功2.下载源码1.官方网站下载 http:

2017-10-05 17:11:41 518

原创 FFMPEG Filter相关API

最近在学习向视频添加文字,添加水印等功能,需要用到ffmpeg里面的滤镜,即filter,但是对api不是很熟悉,也不会用,下面对filter一些常用的api做一个记录!向视频添加水印以再视频中添加水印为例,filter有它相应的使用流程,大概可以分为几个步骤:1.创建graph及其上下文 avfilter_graph_alloc();2.创建filter并添加到graph中 AV

2017-09-24 22:59:39 604 1

原创 FFMPEG常用API

最近开始集中学习使用FFMpeg,对一些常用的api有了一个大致的了解,下面做个记录以备忘!FFMPEG处理流程FFMPEG的函数使用成千上万,不容易记住,但是如果知道她的使用流程的话,那就方便记住的多了! 在我理解的流程如下:1.打开并且初始化输入流(AVFormatContext): 数据的来源,来自一个网络流,还是一个文件....2.打开并且初始化输出流(AVFormatConte

2017-09-16 09:53:43 3184

原创 Window下ffmpeg项目搭建

ffmpeg环境搭建搭建步骤1.ffmpeg下载资源可以到官网去下载较新版本的资源shared:共享库,包括ffmpeg.exe,ffplay.exe,ffprobe.exe可执行文件,以及对应的8个dll动态链接库!dev:开发库,包含头文件,以及8个对应的lib库!2.Winodws下开发环境搭建1.新建Win32控制台应用程序2.选择项目右键,属性,设置项目为Release,X64平台的程序3

2017-08-31 22:53:06 334

原创 Android电量优化

最近领导老是反映说我们的APP耗电要比以前厉害一些,排在耗电量的首位,上黑名单了,需要进行电量优化!经过一段时间的研究,自己做了一部分的总结!电量优化的工具battery-historienbattery-historien是google开源的电量检测分析的工具,由于很多APP开发者对电量这快关注不是那么多,star数并不是特别多!链接:https://github.com/google/batte

2017-04-23 20:40:11 8589 1

原创 Keytools Https双向认证(Android通用)

Https认证: 单向认证:保证服务器是可信任的,可以安全的访问的! 客户端拿到服务器的证书,通过CA认证信任,然后取出公钥,加密对称密钥传给服务器,服务器用自己的私钥解密得到对称密钥,后续使用该对称密钥加解密数据! 双向认证:客户端和服务器都是可以互相信任的! 客户端向服务器发送一个请求时,服务器会把自己的证书,以及一些信息发送过来,客户端拿到服务器的证书通过CA进行验证,如

2017-04-15 23:44:24 2856

原创 Android LibJpeg图片压缩

Android的图片压缩Android的图片压缩的几种方式:质量压缩,尺寸压缩,采样率压缩,通过NDK调用libjpeg库进行压缩!质量压缩通过设置bitmap options属性,降低图片的质量,但是像素不会减少 public static void compressImageToFile(Bitmap bmp,File file) { // 0-100 100为不压

2017-03-25 22:58:44 1245

原创 WebRtc Build for Android

webrtc编译自己动手编译了webrtc,这里做个简单的笔记。记录自己编译webrtc的过程以及遇到的坑!编译环境Ubantu14.04 由于Webrtc源码非常的大,vpn下载源码不太稳定,特别慢,而且容易断开!所以买一个不被墙的ubantu云主机,运行稳定,速度飞快!NDK环境wget -c http://dl.google.com/android/ndk/android-ndk-r

2017-03-18 22:36:19 840

原创 重温数据结构之四——队列与堆栈

队列与堆栈队列与堆栈是非常常见的数据结构,队列是先进先出,先进来的放在对头,后进来的排在队尾,堆栈相反,是先进后出,先进来的放在栈底,后进的放在栈顶!队列队列的实现非常的简单。可以用链表或者数组来实现,但是用链表会更加高效一点,因为使用数组来实现,由于长度是固定的,可能需要不停的开辟空间,开销相对较大,而且可能出现假溢出!堆栈堆栈运用也比较广泛,可用链表或者数组来实现!比较常用的就是中缀表达式与后缀

2017-03-16 00:37:16 382

原创 重温数据结构三——LinkedList

我们知道java里面的LinkedList的底层数据结构也是基于链表的,我们下面就来看看源码的具体实现思路:public class LinkedList<E> extends AbstractSequentialList<E> implements List<E>, Deque<E>, Cloneable, java.io.Serializable{ // 链表的长度

2017-03-14 22:34:58 310

原创 重温数据结构一

数据结构数据结构: 数据之间存在的一个或者多种的特定的关系元素的集合!分类根据数据对象的数据元素之间的关系,分类为逻辑结构与物理结构 逻辑结构:1.集合结构2.线性结构3.树形结构4.图形结构物理结构:1.顺序存储结构: 内存地址是连续的,比如:ArrayList2.链式存储结构 内存地址不连续,可以找到下一个节点,形成链,比如:LinkedList顺序存储Array

2017-03-13 23:09:58 246

原创 C语言几个常用的函数

有几个函数我是经常用到,但是老师分不清楚具体参数的含义,下面做个记录:memsetextern void *memset(void *buffer, int c, int count);将buffer区域的前count个字节设置成字符cchar *s="Golden Global View";memset(s,'G',6);memcpyextern void *memcpy(void *dest

2017-03-02 22:00:28 459

原创 重温数据结构之链表二——C语言实现

链表链表属于线性表的一种,不同于顺序表数据的内存地址是连续的,我们就在该数据结构上加一个属性,指向前后数据的内存地址,这样就将数据一串一串的连起来了,这就是链表!链表分类链表是有一系列的内存地址不连续的节点组成的,每个节点有两部分组成:数据域,指针域。数据域表示存储的数据,指针域指向另外一个节点,连接成串! 链表有几种:单链表:头尾不相连,节点有下一个节点的指针(除去尾节点)双链表:头尾不相连,

2017-03-02 21:45:40 324

原创 Nginx服务器配置首页

Nginx安装完成之后,在nginx.conf可以配置首页! 在server配置自己的默认首页!server 61 { // 监听端口,默认是80,为了不与HTTP端口冲突,最好改下 62 listen 80 default_server; 63 #listen [::]:80 default_server ipv6only=o

2017-03-01 12:57:44 795

空空如也

空空如也

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

TA关注的人

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