自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(358)
  • 资源 (4)
  • 论坛 (2)

转载 数字证书(CA)的理解

数字证书的理解前言「公开密钥加密」和「数字签名」无法保证公开密钥确实来自信息的发送者。因此,就算公开密钥被第三者恶意替换,接收方也不会注意到。数字证书可以完美的解决这一问题,保证公开密钥的正确性。处理流程图解A持有公开密钥PA和私有秘钥SA,现在想要将公开密钥PA发送给B。 首先,A需要向认证中心申请发行证书,证明公开密钥PA确实由自己生成。 认证中心里保管者他们自己准备的公开密钥PC和私有秘钥SC。 A将公开秘钥PA和包含邮箱信息的个人资料发送给认证中心。

2020-09-30 15:26:42 28

原创 HCL03--登录授权、TCP/IP、HTTPS和代理

1.登录与授权的概念区别1.登录:是用户身份认证,系统确认用户身份的过程。2.授权:是由身份或者持有的令牌来确认用户享有某些权限,登录过程实质上的目的是为了确认权限。2.HTTP中确认授权的两种方式1.通过cookie2.通过Authorization HeaderCookie1.起源:有Netscape浏览器团队开发实现了购物车功功能。2.工作机制:1.服务器端需要客户端存储的数据都会通过set-cookie放在reponse的header里面返回,客户端自动保存。2.客

2020-09-28 08:39:19 170

转载 HTTP缓存机制及原理

前言Http 缓存机制作为 web 性能优化的重要手段,对于从事 Web 开发的同学们来说,应该是知识体系库中的一个基础环节,同时对于有志成为前端架构师的同学来说是必备的知识技能。但是对于很多前端同学来说,仅仅只是知道浏览器会对请求的静态文件进行缓存,但是为什么被缓存,缓存是怎样生效的,却并不是很清楚。在此,我会尝试用简单明了的文字,像大家系统的介绍HTTP缓存机制,期望对各位正确的理解前端缓存有所帮助。深入理解HTTP缓存机制及原理彻底弄懂HTTP缓存机制及原理在介绍HTTP缓存之前,

2020-09-27 11:35:30 19

转载 Android 中的 Dalvik Heap 和 Native Heap

Android程序为什么容易出现OOM这个是因为 Android系统对 dalvik 的 vm heapsize 作了硬性限制,当 java 进程申请的 java 空间超过阈值时,就会抛出OOM异常(这个阈值可以是48 M、24 M、16 M等,视机型而定),可以通过adb shell getprop 或者 grep dalvik.vm.heapgrowthlimit 查看此值。也就是说,程序发生 OMM 并不表示 RAM 不足,而是因为程序申请的 java heap 对象超过了 dalvik vm

2020-09-24 19:38:56 14

原创 Android5.0通过UsageStatsManager获取应用使用情况

目前需求统计应用的当天使用情况,在 5.0 以上有权限android.permission.PACKAGE_USAGE_STATS,获取到该权限后可以通过UsageStatsManager.queryUsageStats(int intervalType, long beginTime, long endTime)方法查询到应用的使用情况。首先需要在AndroidManifest.xml里声明权限<uses-permission android:name="android.permis...

2020-09-15 10:30:20 26

原创 Android蓝牙连接状态检测

配对和连接是两个不同的概念:配对意思是两个设备相互意识到对方的存在,共享一个用来鉴别身份的链路键(link-key),能够与对方建立一个加密的连接。连接意思是两个设备现在共享一个RFCOMM信道,能够相互传输数据。目前Android Bluetooth API's要求设备在建立RFCOMM信道前必须配对(配对是在使用Bluetooth API初始化一个加密连接时自动完成的)。检测蓝牙历史配对设备: private void getDevices() { Bluetooth

2020-09-14 10:45:38 40

原创 HCL02--编码、加密和 Hash

目录Hash加密Base64压缩与解压缩序列化Hash定义散列函数(英语:Hash function)又称散列算法、哈希函数,是一种从任何一种数据中创建小的数字“指纹”的方法。散列函数把消息或数据压缩成摘要,使得数据量变小,将数据的格式固定下来。该函数将数据打乱混合,重新创建一个叫做散列值(hash values,hash codes,hash sums,或hashes)的指纹。散列值通常用一个短的随机字母和数字组成的字符串来代表。好的散列函数在输入域中很少出现散列冲突。在散

2020-09-13 12:08:05 66

原创 Android蓝牙连接状态检测

private void checkConnectState() { ArrayList<BluetoothDevice> deviceList = new ArrayList<BluetoothDevice>(); BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter(); Class<BluetoothAdapter> bluetoothAdapt.

2020-09-11 15:06:53 83

原创 HCL01--HTTP 的概念、原理、工作机制、数据格式和 REST

HyperText Transfer Protocol 现状 你不知道https为什么是安全的,你怎么保证你写的https是安全的呢?很多东西都是默认的你觉得没问题,一旦修改配置项,你就不会做了。 一次配置,终身使用。所以不需要了解太多。 什么是连接呢?很多人什么是连接都不知道。 hyper 指的是扩展的意思,而不是超级的意思。 超文本:即「扩展型文本」,指的是 HTML 中可以有链向别的文本的链接(hyperlink)。

2020-09-06 16:10:47 58

转载 开源框架解读--Retrofit 2.0解析

前言在Android开发中,网络请求十分常用 而在Android网络请求库中,Retrofit是当下最热的一个网络请求库Github截图今天,我将手把手带你深入剖析Retrofit v2.0的源码,希望你们会喜欢请尽量在PC端而不要在移动端看,否则图片可能看不清。 在阅读本文前,建议先阅读文章:这是一份很详细的 Retrofit 2.0 使用教程(含实例讲解)目录目录1. 简介示意图特别注意:准确来说,Retrofit 是一个 RESTful 的 HT

2020-09-06 12:10:03 29

原创 Android模拟器安装为系统应用

1、链接设备:adb connect 127.0.0.1:7555(这个是mumu模拟器)2、输入下面命令:adb rootadb remount3、将我们的应用push到/system/app/目录下即可:adb push C:\Users\chenpeng02\Desktop\appuse-debug.apk/system/app/EmptyActivity4、进入这个apk,cd /system/app,然后ls -l查看我们应用的权限,让我们的应用可读可写可执行:chm.

2020-08-28 11:01:46 39

原创 区分界面是window还是activity

遇到一个第三方界面,如何区分是window还是activity方式一:如果可以浮在我们自已应用的上方,那么我们可以写个activity,然后让这个陌生的东西浮现在我们activity的上面,看是否对我们activity的生命周期产生影响,如果没有影响那么就是window方式二:抓取log,查找关键字windowManager、addview,如果看到如下信息,那么他就是一个windowD WindowManager: G20: addView viewPackageName = [com.ch

2020-08-28 10:52:24 42

原创 Android startActivityForResult Kotlin写法

Android activity之间可以相互传递数据,从MainActivity传递数据到SecondActivity中,也可以由SecondActivity返回数据给回到MainActivity。向下一个Activity传递数据Intent在启动Activity过程中可以传递数据。Intent中提供了putExtra方法进行重载,举例来讲:将字符串从一个Activity中传递至第二个Activity中。 button1.setOnClickListener { .

2020-08-23 12:46:37 92

转载 Android网络安全之NetworkSecurityConfig

google在android p为了安全起见,已经明确规定禁止http协议额,但是之前很多接口都是http协议,我们一般是这样解决的:在res目录下创建xml目录,然后随便创建一个.xml文件,里面内容如下:<?xml version="1.0" encoding="utf-8"?><network-security-config> <base-config cleartextTrafficPermitted="true" /></network

2020-08-17 20:05:55 566

原创 MediaPlayer无法播放,报错Error (1,-2147483648)

之前的mediaPlayer的demo突然跑起来无法播放了,最后了解到是因为AndroidP9.0后限制了明文流量的网络请求,非加密的流量请求都会被系统禁止掉 导致mediaplayer 播放uri发生Error (1,-2147483648)1、在 res 下新建一个 xml 目录,然后创建一个名为:network_permission_config.xml 文件 ,该文件内容如下:<?xml version="1.0" encoding="utf-8"?><networ

2020-08-17 19:29:03 208 1

转载 Activity与View的生命周期

启动一个带ImageView的Activity:在Activity onCreate方法中初始化了View , 调用了View 的onFinishInflate 在执行完 Activity的 onPostResume方法之后(第一次onResume之后)才真正开始了View的绘制工作: onAttachedToWindow --> onMeasure --> onSizeChanged --> onLayout --> onDraw 当按住锁屏键的时候,即.

2020-08-17 17:17:23 28

原创 Activity与SurfaceView的生命周期

程序启动,并且直接开启mediaPlayer播放视频:跳转到第二个activity:跳转回surfaceView的activity:back键退出activity:

2020-08-17 17:16:18 37

转载 开源框架解读--RxLifeCycle解析

一、介绍RxLifecycle目的:解决RxJava使用中的内存泄漏问题。例如,当使用RxJava订阅并执行耗时任务后,当Activity被finish时,如果耗时任务还未完成,没有及时取消订阅,就会导致Activity无法被回收,从而引发内存泄漏。为了解决这个问题,就产生了RxLifecycle,让RxJava变得有生命周期感知,使得其能及时取消订阅,避免出现内存泄漏问题。二、使用首先来介绍下RxLifecycle的使用。1.添加依赖implementation 'com.t

2020-08-16 14:54:10 35

转载 开源框架解读--RxJava2源码

一、什么是RxJava?引用GitHub上的说明:RxJava is a Java VM implementation ofReactive Extensions: a library for composing asynchronous and event-based programs by using observable sequences.It extends theobserver patternto support sequences of data/events and ad...

2020-08-15 21:03:48 34

转载 开源框架解读--EventBus简析

EventBus 是一款在 Android 开发中使用的发布/订阅事件总线框架,基于观察者模式,将事件的接收者和发送者分开,简化了组件之间的通信,使用简单、效率高、体积小!下边是官方的 EventBus 原理图:EventBus 的用法可以参考官网,这里不做过多的说明。本文主要是从 EventBus 使用的方式入手,来分析 EventBus 背后的实现原理,转载,以下内容基于eventbus:3.1.1版本,主要包括如下几个方面的内容:Subscribe注解 注册事件订阅方法 取消注册 发

2020-08-12 17:52:13 44

转载 开源框架解读--ButterKnife简析

ButterKnife 算是一款知名老牌 Android 开发框架了,通过注解绑定视图,避免了 findViewById() 的操作,广受好评!由于它是在编译时对注解进行解析完成相关代码的生成,所以在项目编译时会略耗时,但不会影响运行时的性能。接下来让我们从使用到原理一步步深入了解这把黄油刀的故事!转载以下内容基于 butterknife:8.8.1 版本,主要包括如下几个方面的内容:简单使用 原理分析 注解处理器 JavaPoet一、简单使用首先编写一个 ButterKnife 简单使

2020-08-12 11:45:08 46

转载 ARouter原理解析

一、ARouter概述用简单一两句话总结出来:ARouter通过Apt技术,生成保存路径(路由path)和被注解(@Router)的组件类的映射关系的类,利用这些保存了映射关系的类,Arouter根据用户的请求postcard(明信片)寻找到要跳转的目标地址(class),使用Intent跳转。原理很简单,可以看出来,该框架的核心是利用apt生成的映射关系。使用时,在每个需要对其他module提供调用的Activity中,都要声明类似下面@Route注解,我们称之为路由地址。@Route(pa

2020-08-09 15:54:52 66

转载 Android平台页面路由框架ARouter原理

本次分享将主要围绕以下几个方面:一、为什么需要路由框架二、ARouter的技术方案三、使用ARouter的最佳实践四、未来开发计划一、为什么需要路由框架原生的路由方案存在的问题首先谈一谈原生的路由方案存在的问题以及为什么需要路由框架。我们所使用的原生路由方案一般是通过显式intent和隐式intent两种方式实现的,而在显式intent的情况下,因为会存在直接的类依赖的问题,导致耦合非常严重;而在隐式intent情况下,则会出现规则集中式管理,导致协作变得非常困难。而且一般而言配置规则都是在Manifest

2020-08-09 11:34:39 74

原创 简单工厂模式和策略模式的区别

https://blog.csdn.net/lmx125254/article/details/86625960

2020-08-08 12:11:07 54

原创 行为型设计模式之--观察者模式

随着水果店做的时间变长,会有一些回头客,他们想要知道水果店定期的一些折扣信息,那么这些顾客就可以像订阅微信公众号一样来订阅水果店的折扣信息,当水果店有折扣时,通知这些订阅了消息的顾客即可。我们可以通过观察者模式实现上面的需求:首先我们的被订阅者,也就是消息的发布者,本例是水果店:抽象接口:public abstract class Attentions { //关注客户列表 protected List<Observer> observers = n

2020-07-12 18:18:02 63

原创 行为型设计模式之--命令行模式

随着水果店推出的商品种类的增加,会有不同的水果榜单推出,每一种榜单都对应着响应的查询接口,如图中,热门商品榜-->热门查询,最新商品榜-->最新商品查询,优惠商品榜-->优惠商品查询。这种方式它的依赖关系太强。命令模式:将不符合抽象编程的调用,改造成符合的抽象编程通过使用命令行模式,把直接请求的动作进行接口的包装,形成面向接口编程,进一步的完成解耦:完成后,它的行为模式就变成了如下:中间抽象出来了一层接口。对应的类图:首先原始的提供查询服务的三个类:/

2020-07-12 18:04:43 49

原创 行为型设计模式之--责任链模式

在上一节策略模式中,每个顾客可以选择不同的打折策略,但是通常有些顾客是符合多个打折策略的,那么如何将多个打折策略结合到一起使用呢?责任链模式提供了很好的解决方式:首先是多个折扣的抽象类:public abstract class MultyDiscount implements Discount { protected MultyDiscount nextMultyDiscount; public MultyDiscount(MultyDiscount ne

2020-07-12 17:36:32 32

原创 行为型设计模式之--策略模式

紧接着上面的模板方法设计模式,当用户支付时,其实用户是有优惠活动可以享受的,但是每个用户的具体情况不同,所选择的优惠活动是不一样的,有满减活动、首次购活动、新会员活动,等等一系列优惠。为了避免一系列的if ... else的书写,我们使用策略模式进行优化:首先是打折的抽象接口:public interface Discount { public int calculate(int money);}下面是四种不同的打折策略:/** * 满减 */public

2020-07-12 16:52:14 47

原创 行为型设计模式之--模板方法模式

模板方法实际就是封装固定的流程,像模板一样,第一步做什么,第二步又做什么,都在抽象类中定义好。子类可以有不同的算法实现,在算法框架不被修改的前提下实现某些步骤的算法替换。在软件开发中,有时会遇到类似的情况:某个方法的实现需要多个步骤,其中有些步骤是固定的;而有些步骤并不固定,存在可变性。为了提高代码的复用性和系统的灵活性,可以使用模板方法模式来应对这类情况。定义:定义一个操作中的算法框架,而将一些步骤延迟到子类中,使得子类不改变一个算法的结构即可重定义算法的某些特定步骤。在我们的水果店中,清点商品

2020-07-12 16:35:41 58

原创 结构型设计模式之--外观(门面)模式

客户下单后,最好的流程就是客户完全不去管这个水果是怎么采摘下来的,是怎么包装上去的,又是如何通过快递送货上门的;客户只负责下单,后面的这些服务内部的流程和逻辑完全不需要了解。下面就引出了外观模式(门面模式):客户只有一个下单的动作,这个动作会触发后面的一系列服务,首先我们的两个服务:采摘水果服务类、包装服务类:/** * 采摘服务 */public class PickService { /** * 采摘水果 */ public vo

2020-07-12 15:49:49 35

原创 结构型设计模式之--代理模式

随着水果店的不断发展,又来的新的业务场景需求,海外购的代理工作。如图,和Peter合作的第三方公司可以从海外代购一些水果,发送到客户手中,而客户是不关心这个水果具体是从越南还是印尼过来的,顾客只管向Peter的水果店下订单即可。这里Peter要做的就是转发这个订单请求到第三方公司去,而我们的Peter水果店就负责中转订单,它就是代理。具体类图:这里我们有一个OutOrderServiceImpl是海外购买服务,我们的顾客是无法直接访问到这个服务的,我们的顾客只能直接访问到水果店,通过水果店的

2020-07-12 15:26:32 20

原创 结构型设计模式之--装饰器模式

随着Peter水果生意越做越大,水果店根据客户的不同需求也添加了一些不同的服务,最原始的服务流程就是:水果采摘-->水果打包-->送货上门,就结束了。而现在由于不同客户有的需要加急处理,有的需要加固处理,有的需要认证这个水果的防伪标志,那么我们通过装饰器模式就可以很好地解决这些附加的需求业务。装饰器模式可以在不影响业务主流程的前提下,在打包环节增加防伪、加固、加急等功能不同的装饰加入到了打包流程中,增强了打包流程。上面的蓝色部分还是原来的打包Bag,添加的紫色部分就是装饰

2020-07-12 14:42:46 36

原创 结构型设计模式之--桥接模式

继续我们水果园的新业务,当水果成熟后我们采摘水果时需要将水果放入到不同的采摘袋中,采摘袋又分为不同的材质(纸/塑料/麻袋等十多种)和不同的型号(大/中/小/迷你)组合起来,共40多种采摘袋。这么多类型的采摘袋,我们如何对这些组合进行管理呢?细细想下,采摘袋的两个属性,一是大小,另一个是材质。我们可以将这两个属性进行剥离。我们将采摘袋的大小和材质进行了拆分,通过组合的方式,让这两个属性类产生关系,最终把材质组合进了采摘袋的对象中去。这个就是桥接模式的表达方式,把两个类型的东西接到一起。桥接模式

2020-07-12 12:02:10 36

原创 结构型设计模式之--适配器

前面三篇讲述了java设计模式中的创建类型,主要关注点在于类创建对象时有哪些模式可以参照,如:简单工厂、工厂方法、抽象工厂、单例、建造者模式这几种比较优雅的类创建出对象的设计模式。下面我们将关注点放在如何处理类与类之间的关系上,让类与类之间的结构、以及协作处理变得更加的优雅。在java中,让类与类之间发生关系有两种方式:一是继承,另一个是组合。结构型设计模式关注焦点在于这两种方式中,倾向于组合,会优先通过组合的方式,让类之间产生关系;而少使用继承。下面看下这两种关系:图中的target类

2020-07-12 11:15:34 28

原创 创建型设计模式之--建造者模式

建造者模式也被称为生成器模式,它是创建一个复杂对象的创建型模式,其将构建复杂对象的过程和它的部件解耦,使得构建过程和部件的表示分离开来。我们接着用工厂模式中的果园举例,我们的水果店为了吸引老顾客、以及新顾客办理会员,推出了各式各样的促销活动,例如会员购买苹果、香蕉、桔子可以减15元;假日促销活动可以立减10元的活动;如图,目前我们推出了两种活动套餐上面一条流程可以抽象为如下步骤:首先设定苹果礼盒价钱-->设置香蕉礼盒价钱-->设置桔子礼盒价钱-->设置折扣价钱,最终我们拿到了水

2020-07-05 22:45:19 43

原创 创建型设计模式之--单例模式

单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。注意:1、单例类只能有一个实例。 2、单例类必须自己创建自己的唯一实例。 3、单例类必须给所有其他对象提供这一实例。介绍意图:保证一个类仅有一个实例,并提供一个访问它的全局访问点。

2020-07-05 21:39:02 57

原创 创建型设计模式之--简单工厂、工厂方法、抽象工厂模式

我们举一个摘水果的例子,果园中种着苹果树、香蕉树、桔子树等等果树,当有三个小伙伴想要吃苹果时,他们就需要各自去拿各自想要吃的水果,我们最原始朴素的写法如下,谁需要谁就自己去拿就好了:/** * 不使用设计模式:最原始的想法,哪里用就直接在哪里new出来相应的对象 */public class PeterClient { //Peter自己吃水果 public static void main(String[] args) { peterdo();

2020-07-05 21:18:58 84

原创 Android Studio 3.60 代码、控制台、Build、Gradle、状态栏输出出现中文乱码的问题

步骤一:文件编码统一:打开设置>Editor> File Encodings,将三个都都改为utf-8:步骤二:字体统一打开设置,然后搜索“font”,将Appearance、Font、Color Scheme Font均改为“Microsoft YaHei”(汉字字体都行)(其他font相关的也可以自己看看,这里经常变动,目前就这3处)将这几处都设置为同一个字体即可本人就是这里没有设置,导致控制台中文输出都是乱码步骤三:将VM格式改为utf-8菜单栏&gt.

2020-07-05 17:39:48 70

原创 性能优化专题十三--BlockCanary简析

Looper 提供的机制先看看我们熟悉的 Looper 的源码,里面实现的功能就是不断地从 MessageQueue 里面取出 Message 对象,并加以执行。for (;;) { Message msg = queue.next(); // might block if (msg == null) { // No message indicates that the message queue is quitting. return; }

2020-06-27 16:15:26 104

原创 性能优化专题十二--LeakCanary简析

简介LeakCanary是一款开源的内存泄漏检查工具,在项目中,可以使用它来检测Activity是否能够被GC及时回收。github的地址为https://github.com/square/leakcanary使用方式解析将LeakCanary引入AS,在Application中调用如下方法,可以跟踪Activity是否被GC回收。Install方法如下:其中listenerServiceClass方法传入了展示分析结果的Service(DisplayLeakService);ex

2020-06-26 15:25:59 91

0day安全:软件漏洞分析技术(第2版).pdf (部分章节)

0day安全:软件漏洞分析技术(第2版).pdf 部分章节 高清版

2016-10-05

Windows环境下32位汇编语言

2016-06-09

登陆成功界面

登陆成功界面

2015-07-21

bootstrap首页制作

bootstrap首页制作,酷炫效果,可以学习使用。

2015-07-21

QT中 QTablewidgetitem 程序崩溃

发表于 2016-03-02 最后回复 2017-01-19

关于正则表达式提取if else结构体问题

发表于 2016-01-05 最后回复 2016-01-05

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