自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(66)
  • 资源 (2)
  • 收藏
  • 关注

原创 网络 网速计算 mbps和mb/s怎么换算结论:8Mbps(8 Million bits) = 1MB/s (1 Million Byte)

MB通常所说的文件大小的兆是指8MByte。字节(Byte)是计算机信息技术用于计量存储容量的一种计量单位,也表示一些计算机编程语言中的数据类型和语言字符。bps(bits per second),即比特率、比特/秒、位/秒、每秒传送位数,数据传输速率的常用单位。Mbps=Mbit/s即兆比特每秒(Million bits per second的缩写)。

2023-02-10 23:17:17 3467

转载 Android Handler 机制(六):如何检测性能卡顿

一、Looper检测卡顿熟悉Handler机制的话,我们会知道Looper是给线程提供处理消息能力的类,在Android Framework启动的时候,就会创建一个Main Looper即主线程对应的Looper,Looper中会维护一个MessageQueue,负责接收Handler发送过来的消息,MessageQueue是个消息队列,它是顺序取消息的,只有取完一个任务才会接着取另外一个任务。查看Looper的源码后就可以发现我们可以使用Looper的looper方法来进行检测。因为UI更新界面都是在

2021-03-16 19:09:50 600

转载 Android Handler 机制(五):ThreadLocal的工作原理

一、Handler机制与ThreadLocal在Handler机制的时候,我们会接触到Looper中的一个很重要的类:ThreadLocal,ThreadLocal并不是线程,它的作用是可以在每个线程中存储数据。Handler在创建的时候就会获取当前线程的Looper来构造消息循环系统,获取的方式就是通过ThreadLocal。ThreadLocal可以在不同的线程中互补干扰的存储并提供数据,Handler就是通过ThreadLocal可以轻松获取每个线程的Looper。当然需要注意的是,线程是默认没有

2021-03-16 18:56:26 542

原创 Android Handler 机制(四):屏障消息(同步屏障sync barrier,异步消息 )IdelHandler

一、Handler Message 种类Handler的Message种类分为3种:普通消息屏障消息异步消息其中普通消息又称为同步消息,屏障消息又称为同步屏障。我们通常使用的都是普通消息,而屏障消息就是在消息队列中插入一个屏障,在屏障之后的所有普通消息都会被挡着,不能被处理。不过异步消息却例外,屏障不会挡住异步消息,因此可以这样认为:屏障消息就是为了确保异步消息的优先级,设置了屏障后,只能处理其后的异步消息,同步消息会被挡住,除非撤销屏障。二、屏障消息如何插入消息队列同步屏障是通过Mes

2021-03-16 14:59:53 1891 1

转载 Android Handler 机制(三):Handler 机制与管道 Pipe 机制

本文目录:一、管道概述二、Handler为何使用管道?三、Handler为何采用管道而非Binder?四、Android 6.0及以后的机制在深入系统的学习Handler的时候,我们接触到了Looper之所以死循环不会导致CPU使用率过高,是因为使用了Linux下的pipe和epoll机制。Android的应用层通过Message.java实现队列,利用管道和epoll机制实现线程状态的管理,配合起来实现了Android主线程的消息队列模型。一、管道概述管道,其本质是也是文件,但又和普通的文

2021-03-16 10:44:20 665

转载 Linux 下 Epoll 机制概述

在深入系统的学习Handler的时候,我们接触到了Looper之所以死循环不会导致CPU使用率过高,是因为使用了Linux下的epoll机制。Android的应用层通过Message.java实现队列,利用管道和epoll机制实现线程状态的管理,配合起来实现了Android主线程的消息队列模型。本文参考链接:深入理解 Epoll:https://zhuanlan.zhihu.com/p/93609693一、Epoll介绍Epoll是linux2.6内核的一个新的系统调用,Epoll在设计之初,就是

2021-03-16 10:33:33 262

转载 Android Handler 机制(二):Handler 机制深入探究问题梳理

本文目录:一、‘非UI线程更新UI’问题探究二、Handler发送消息的delay设置是否可靠?三、Handler机制下消息队列MessageQueue的优化四、主线程的Looper为什么不会导致ANR一、‘非UI线程更新UI’问题探究Android开发的时候非UI线程不能更新UI,这个是大家都知道的开发常识。但是当问到为什么?可能我们就会有些含糊了。本文我们就针对这个问题进行探讨并进行一定的思维发散,来加深我们对Android界面刷新机制的理解。1. UI线程的工作机制主线程的工作机制可

2021-03-16 09:32:42 206

转载 Android Handler 机制(一):Handler 运行机制完整梳理

原文链接:https://www.cnblogs.com/renhui/p/12857876.html本文:整理+自己的实践一、ActivityThread类和APP的启动过程二、Handler创建Message并发送给Looper三、Looper循环处理MessageQueue的Message四、总结做Android开发的都应该知道Handler的运行机制,这个问题属于老生常谈了。这里再简单赘述一下:Handler 负责发送消息;Looper 负责接收 Handler 发送的消息,并在

2021-03-15 18:35:52 253

原创 面试-01 Handler Message Loop 异步消息屏障 16.6ms执行一次 保证屏幕60帧刷新率

Handler的作用当我们需要在子线程处理耗时的操作(例如访问网络,数据库的操作),而当耗时的操作完成后,需要更新UI,这就需要使用Handler来处理,因为子线程不能做更新UI的操作。Handler能帮我们很容易的把任务(在子线程处理)切换回它所在的线程。简单理解,Handler就是解决线程和线程之间的通信的。Handler 工作流程图...

2021-03-15 10:07:09 175

转载 ANR问题分析实例 logcat anr trace

ANR问题分析实例ANR监测机制包含三种: Service ANR,前台进程中Service生命周期不能超过20秒,后台进程中Service的生命周期不能超过200秒。 在启动Service时,抛出定时消息SERVICE_TIMEOUT_MSG或SERVICE_BACKGOURND_TIMEOUT_MSG,如果定时消息响应了,则说明发生了ANR Broadcast ANR,前台的“串行广播消息”必须在10秒内处理完毕,后台的“串行广播消息”必须在60秒处理完毕, 每派发串行广播消息到一个

2021-02-25 17:17:59 872

原创 Spring 01 -Component

Spring 01 -Component问题,多个 component 相互 init 怀疑程序锁住没有异常。@Component (把普通pojo实例化到spring容器中,相当于配置文件中的 )@Autowiredlateinit var logRepository: LogRepository参考解决方案:重新设计,消除循环依赖@Controller 控制器(注入服务)用于标注控制层,相当于struts中的action层@Service 服务(注入dao)用于标注服务层,主要用来进

2021-01-06 10:01:23 84

转载 https证书制作及springboot配置https MAC下操作

https证书制作及springboot配置 MAC下操作1、生成秘钥openssl genrsa -out private.key 20482、生成用于申请请求的证书文件csr,一般会将该文件发送给CA机构进行认证,本例使用自签名证书openssl req -new -key private.key -out request.csr3、自签名证书openssl x509 -req -days 365 -in request.csr -signkey private.key -out root.

2021-01-05 18:27:51 632

原创 Android UID 问题 uid 改变进行了覆盖安装

解决的问题:应用由:非系统应用升级为 android.uid.system 应用,进行了覆盖安装。包名下数据都没了????。app1package=“com.opnext.face”app2package=“com.beeboxes.face.record”android:sharedUserId=“android.uid.system”1. uid pid gid gids 的含义和作用uid: android中uid用于标识一个应用程序,uid在应用安装时被分配,并且在应用存在于手

2020-05-09 13:58:33 2875

原创 Okhttp 01 核心流程详解

1.dns解析,域名对应 ip2.TCP建立连接,三次握手3.C端向S端发送请求行命令4.C端发送请求头信息5.S端应答,发送响应命令6.S端发送响应头信息7.S端向C端发送数据,以及消息体8.S端关闭链接 tcp 四次挥手An HTTP client for Android, Kotlin, and Java.https://square.github.io/okhttp/...

2020-05-06 11:20:30 239

转载 Android事件分发机制详解

转载:https://www.jianshu.com/p/38015afcdb58结论:dispatchTouchEvent()、 onTouchEvent() 消费事件、终结事件传递(返回true)而onInterceptTouchEvent并不能消费事件,它相当于是一个分叉口起到分流导流的作用,对后续的ACTION_MOVE和ACTION_UP事件接收起到非常大的作用请记住:接...

2020-04-28 18:56:27 401

转载 锁 | 00 Java中的锁分类

转载文章:https://www.cnblogs.com/qifengshi/p/6831055.html种锁的分类:公平锁/非公平锁 可重入锁 独享锁/共享锁 互斥锁/读写锁 乐观锁/悲观锁 分段锁 偏向锁/轻量级锁/重量级锁 自旋锁公平锁/非公平锁公平锁是指多个线程按照申请锁的顺序来获取锁。非公平锁是指多个线程获取锁的顺序并不是按照申请锁的顺序,有可能后申请的...

2019-07-09 23:58:10 157

原创 Base64 RSA 接口小坑

javax.cryptobytes[] message.getBytes("utf-8"); message.getBytes("GBK"); cipher = Cipher.getInstance("RSA" );//java 平台 cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding" );//And...

2019-07-01 16:16:43 527

转载 02 |算法总结

数组中重复的数字要求:在一个长度为 n 的数组里的所有数字都在 0 到 n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字是重复的,也不知道每个数字重复几次。请找出数组中任意一个重复的数字。时间复杂度 O(N),空间复杂度 O(1)。Input:{2, 3, 1, 0, 2, 5}Output:2分析:难点 空间复杂度 O(1)。那就不能用额外的的数组标记。so:用...

2019-06-13 23:21:15 201

原创 00 |设计模式 开篇详解

Design pattern主要用途开发人员的共同平台设计模式提供了一个标准的术语系统,且具体到特定的情景。eg,单例最佳的实践它们提供了软件开发过程中面临的一般问题的最佳解决方案。设计模式的六大原则1、开闭原则(Open Close Principle)开闭原则的意思是:对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。简言之,是...

2019-06-05 23:38:03 201

转载 00 | 移动开发 提纲

移动开发前景Mobile First 变成 AI First风口过去,进入平稳期,竞争激烈,存量厮杀,对高级程序员需求增大,低端变少。企业需要什么样的移动开发人才?移动开发还可以做什么?高质量开发崩溃、内存、卡顿、启动、I/O、存储、网络、耗电、渲染、安装包体积。 等特定场景下业务需求。基于底层、算法、其他互联网技术行业经验来优化移动端。高效开发目的,提高效率。从想法到成品...

2019-04-12 11:28:58 208

原创 线程池 01

为什么使用线程池

2019-04-11 19:39:40 136

原创 07 | 08 启动优化:从启动过程看启动速度优化——学习总结

背景在超市排队结账,扫码支付启动十几秒都还没完成,只能换一个工具支付?原因目的方案方法成本优劣影响结论

2019-03-27 18:02:53 421

原创 Netty 07 | 一些小知识点

工具:Spring 类似 注解目的:简洁、解耦。找到对应的业务类。server:处理业务线程池。netty3 自己实现。netty4 框架实现。消息串行化工具。

2019-03-25 17:13:00 169

原创 Java NIO Selector

Selector 介绍使用 Selector 好处:使用更少的线程来就可以来处理通道了, 相比使用多个线程,避免了线程上下文切换带来的开销。它是Java NIO核心组件中的一个,用于检查一个或多个NIO Channel(通道)的状态是否处于可读、可写。如此可以实现单线程管理多个channels,也就是可以管理多个网络链接。 //注册serverChannel到selector se...

2019-03-25 14:22:46 196

原创 Netty 06 | 粘包 分包

简介网络传输都是转换为 2 进制进行传输粘包client 发送 2个 请求:hello helloserver 接收到 2个 请求:hellohello或者 多个请求收到合并为一个请求分包client 发送1个请求: helloserver 接收到:2个请求hello解决通过标识标志位定义一个稳定的结构 length + helloclient发送: ...

2019-03-24 15:56:53 180

原创 Netty 05 | pipeline 分析

上行下行管道处理channel event 传递Handler 处理多个 Handler 组成的双向【链表】单向执行,从上到下有序处理多个 handler 消息自定义过滤。同一个channel 多个 channel event 的 handler 没有并发问题。自行判断类别进行是否执行当前 此 handler eg; up down 上行下行 分类,1个链表,2 个分类。事件传递,可...

2019-03-24 15:55:14 179

原创 Netty 04 | 自定义数据包,传输协议 protobuf

目的:节省流量,提交效率。方法:定义序列化与反序列化规则,方法。具体方法:字段类型长度顺序结论proto buffbytebufferoutputstreambufferchannelbuffer没有 string 对象 ,因为长度可变,所以预定义它的长度。反序列化:先看长度字段然后在读取对象。protobuffer第一列自定义Serializer...

2019-03-24 15:49:43 791

原创 Netty03 | 源码 心跳

如何阅读源码一段一段看断点打印日志看调用栈搜索

2019-03-24 14:56:23 202

转载 Reactor 模式

高性能 IO 中 Reactor模式的演进?几乎所有的网络连接都会经过读请求内容——》解码——》计算处理——》编码回复——》回复的过程,Reactor模式的的演化过程如下:while(true){ socket = accept(); new thread(socket); } 这种模型由于IO在阻塞时会一直等待,因此在用户负载增加时,性能下降的非常快。server 导致阻塞的原...

2019-03-22 18:00:28 313

原创 Netty 00 | 原理概念——阻塞非阻塞、异步同步、Reactor

BIO性能与可靠性差client 每个 request 对应 server 每个线程。server 线程 同步处理业务与应答。伪 NIOserver 启用线程池管理多个线程请求。NIO (Non - block I/O)良好的应对 高负载、高并发。缓冲区 Buffer在NIO 中,所有的数据都是用缓冲区处理的。缓冲区实质是数组。通常为字节数组 (ByteBuffer)。...

2019-03-22 11:24:32 620

原创 git 03 | svn 转 git and 修改 git commit 邮箱

前提Linux 环境安装 git 、svn 、git-svn步骤创建用户映射例如:zhangsan = zhangsan <[email protected]>lisi = lisi <[email protected]>如何获取 作者列表 ?在 svn 库下执行当前命令 生成 users.txt,获得 svn 作者列表:svn log ^/ --xm...

2019-03-18 10:16:26 316

原创 git 02 | cherry pick rebase 合并 commit

cherry-pick把 dev 分枝上的commit,cherry pick 到 master 上:1、git checkout master2、git cherry-picke489b72f61f39e5b80bb633594a06f60eeabece6 ea66d5cb31c937763d34d91e7e8b3b240010b5ac可cherry pick多条commit...

2019-03-18 09:45:00 255

转载 MarketDown说明

简单口诀:划水抬头,退收起伸手低头,再蹬腿漂一会儿注意事项呼吸手腿欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。新的改变我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,...

2019-03-18 09:22:12 2468

原创 Netty 02 | 源码分析

Netty 是如何工作的?因为代码中没有异步的代码。那非阻塞是如何实现的?目录结构init 线程池boss 线程池woker 线程池每个线程一个 selectorselector implements Runnable1个selector 有 1个Queue taskQueue每个 selector 都公用 boss pool or worker pool每一...

2019-03-17 17:07:01 206

原创 Netty 01 | 简介与helloworld

传统的Socket IO 比较传送IO特点阻塞点server.accept();inputStream.read(bytes);单线程情况下只能有一个客户端用线程池可以有多个客户端连接,但是非常消耗性能NIO的特点ServerSocketChannel ServerSocketSocketChannel SocketSelectorSelectionKey...

2019-03-17 10:43:54 322

原创 蛙泳 学习 进阶 踩水

简单口诀:划水抬头,退收起伸手低头,再蹬腿漂一会儿注意事项呼吸手腿泳姿参考网址:https://www.sohu.com/a/162989006_495033

2019-03-16 12:23:44 1031

原创 投资

商业模式验证最小商业模式验证。流量用完就走,留下才是关键。微信小程序,用完就走。对于微信来说,无所谓。但是是对于商家,如果想提高粘性,导流到APP,或者公众号。前沿技术验证黄赌毒先行( 有些行业)原因他们愿意试水,因为收益高。黄赌毒,是人的本能天性需求。eg:当雅虎时代搜索统计 1/3 色情短片,1/2 盗版音视频黄3d试水 香港电影 3d 肉蒲团,试水,完犊...

2019-03-15 09:47:25 224

原创 shell 脚本-01 变量、字符串、数组

简介Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。Shell 脚本(shell script),是一种为 shell 编写的脚本程序。Shell 编程跟 java、php 编程一样,只要有一个能编写代码的文本编辑...

2019-03-14 14:42:24 510

原创 05 | 06 卡顿优化:你要掌握的卡顿分析方法——学习总结

影响范围,现象“我的后羿怎么动不了!”“”应用启动怎么那么慢?”“滑动的时候怎么那么卡?”影响用户体验基础知识1. CPU 性能// 获取 CPU 核心数cat /sys/devices/system/cpu/possible // 获取某个 CPU 的频率cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq...

2019-03-07 18:14:50 1248

原创 04 | 内存优化(下):内存优化这件事,应该从哪里着手?——学习总结

参考文章:https://time.geekbang.org/column/article/71610定好优化目标:比如针对 512MB 的设备和针对 2GB 以上的设备,完全是两种不同的优化思路。面向东南亚、非洲用户,那对内存优化的标准就要变得更苛刻一些。内存优化 3 方面设备分级、Bitmap 优化和内存泄漏这三个方面入手。1、设备分级类似 device-year-class ...

2019-03-07 13:21:57 439

webviewDemo

webviewdemo

2016-01-11

服务器工具hfs

微型服务器工具hfs

2016-01-11

空空如也

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

TA关注的人

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