<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Alexwym的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Alexwym</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Alexwym]]></copyright><item><title><![CDATA[ContentProvider导致App闪退问题分析]]></title><link>https://blog.youkuaiyun.com/Alexwym/article/details/119790596</link><guid>https://blog.youkuaiyun.com/Alexwym/article/details/119790596</guid><author>Alexwym</author><pubDate>Wed, 18 Aug 2021 23:01:53 +0800</pubDate><description><![CDATA[ContentProvider导致App闪退问题分析
一、背景
今日有部分线上用户反馈打开App后会偶现闪退，但奇怪的是我们在捞取相关设备的日志查看时却没有发现任何的异常栈信息，最后还是依靠系统的BugReport文件才发现了一些可疑信息。关键日志如下：
2021-03-30 16:28:35.661 1091-1459/? I/ActivityManager: Killing 20972:com.test.demo1/u0a71 (adj 100): depends on provider com.tes]]></description><category></category></item><item><title><![CDATA[PMS解析AndroidManifest.xml文件的过程]]></title><link>https://blog.youkuaiyun.com/Alexwym/article/details/119304878</link><guid>https://blog.youkuaiyun.com/Alexwym/article/details/119304878</guid><author>Alexwym</author><pubDate>Mon, 02 Aug 2021 22:29:14 +0800</pubDate><description><![CDATA[PMS解析AndroidManifest.xml文件的过程
一、前言
​		前段时间在看当下主流的安卓插件化技术原理的时候，发现目前插件化技术对于四大组件的处理基本都是通过代理来实现的（动态注册的广播接收器除外）。简单说就是需要先在主包里预埋一个注册到AndroidManifest.xml中的组件，具体的业务逻辑实现则在插件里面，最后通过代理技术将两者连接起来。
​		那么系统是如何从AndroidManifest.xml中解析出四大组件的？以及解析后的组件信息又是怎么保存的呢？
​		首先我们要知道负责解]]></description><category></category></item><item><title><![CDATA[利用vdexExtractor工具将Vdex文件转为dex文件]]></title><link>https://blog.youkuaiyun.com/Alexwym/article/details/107730906</link><guid>https://blog.youkuaiyun.com/Alexwym/article/details/107730906</guid><author>Alexwym</author><pubDate>Sat, 01 Aug 2020 15:23:01 +0800</pubDate><description><![CDATA[一、工具说明

（一）vdexExtractor工具

1、下载地址

  https://github.com/anestisb/vdexExtractor

2、依赖事项



 在这里，由于我的电脑是Windows系统，因此我需要先安装cygwin，再通过cygwin安装zlib-devel。

二、依赖环境和依赖库安装

1、在官网https://cygwin.com/install.html下载win64位安装包



2、运行setup-x86-64.exe，前面几步直接...]]></description><category></category></item><item><title><![CDATA[wireshark抓包分析SSL/TLS协议]]></title><link>https://blog.youkuaiyun.com/Alexwym/article/details/102549824</link><guid>https://blog.youkuaiyun.com/Alexwym/article/details/102549824</guid><author>Alexwym</author><pubDate>Tue, 15 Oct 2019 08:01:14 +0800</pubDate><description><![CDATA[SSL/TLS协议一般有两种握手过程，一种是SSL握手，一种是会话恢复。前些时候在写HTTP和HTTPS协议区别的时候介绍了SSL协议的相关理论知识，但多少还是有点抽象，今天我们可以通过wireshark抓包来分析下SSL握手的过程。


一、正常的握手过程

（一）过程如下



（二）wireshark抓到的对应的包如下



（三）具体的包分析


	Client Hello
	


包中...]]></description><category></category></item><item><title><![CDATA[详解HTTP/HTTPS（二）——HTTPS协议]]></title><link>https://blog.youkuaiyun.com/Alexwym/article/details/101029138</link><guid>https://blog.youkuaiyun.com/Alexwym/article/details/101029138</guid><author>Alexwym</author><pubDate>Thu, 19 Sep 2019 19:57:01 +0800</pubDate><description><![CDATA[HTTP/HTTPS协议无疑是面试中最常问的几个计网协议之一。然而网上很多博客都写得偏简略，不够全面。于是我便打算做一个整合。内容较多，大致会分为两篇篇博客，一篇介绍HTTP协议，一篇介绍HTTPS协议。

《详解HTTP/HTTPS（一）——HTTP协议》

《详解HTTP/HTTPS（二）——HTTPS协议》


HTTP协议全称为超文本传输协议，而HTTPS全称为超文本安全传输协议。HTT...]]></description><category></category></item><item><title><![CDATA[详解HTTP/HTTPS（一）——HTTP协议]]></title><link>https://blog.youkuaiyun.com/Alexwym/article/details/100118988</link><guid>https://blog.youkuaiyun.com/Alexwym/article/details/100118988</guid><author>Alexwym</author><pubDate>Wed, 28 Aug 2019 15:48:16 +0800</pubDate><description><![CDATA[HTTP/HTTPS协议无疑是面试中最常问的几个计网协议之一。然而网上很多博客都写得偏简略，不够全面。于是我便打算做一个整合。内容较多，大致会分为三篇博客，一篇介绍HTTP协议，一篇介绍SSL/TLS协议，一篇介绍HTTPS协议。

《详解HTTP/HTTPS（一）——HTTP协议》

《详解HTTP/HTTPS（二）——HTTPS协议》


HTTP协议也叫超文本传输协议，它定义了客户端和服务...]]></description><category></category></item><item><title><![CDATA[Spring中JDBCTemplate的事务实现]]></title><link>https://blog.youkuaiyun.com/Alexwym/article/details/90436715</link><guid>https://blog.youkuaiyun.com/Alexwym/article/details/90436715</guid><author>Alexwym</author><pubDate>Wed, 22 May 2019 14:25:48 +0800</pubDate><description><![CDATA[一、事务的定义及特性

（一）、事务的定义

1、事务是一个最小的不可再分割的执行单元，它由批量的DML语句构成，这些语句要么全部执行，要不全都不执行。

2、通常一个事务对应一个完整的业务。比如典型的转账业务，从账户A中转账1000元给账户B。操作过程分为两步，第一步从账户A中扣去1000元，第二步往账户B中加上1000元。显然这两个操作要么都得做，要么都不做。如果只做其中一个操作，数据库的数据...]]></description><category></category></item><item><title><![CDATA[基于netty NIO开发的聊天室]]></title><link>https://blog.youkuaiyun.com/Alexwym/article/details/90047132</link><guid>https://blog.youkuaiyun.com/Alexwym/article/details/90047132</guid><author>Alexwym</author><pubDate>Fri, 10 May 2019 14:07:15 +0800</pubDate><description><![CDATA[一、为何要使用netty开发

由于之前已经用Java中的socket写过一版简单的聊天室，这里就不再对聊天室的具体架构进行细致的介绍了，主要关注于使用netty框架重构后带来的改变。对聊天室不了解的同学可以先看下我的博客（《JAVA简单聊天室的实现》）

本篇博客所使用的netty版本为4.1.36，完整工程已上传到Github（https://github.com/Alexlingl/Chat...]]></description><category></category></item><item><title><![CDATA[C10破局（三）——Java AIO实现高并发服务器]]></title><link>https://blog.youkuaiyun.com/Alexwym/article/details/89373011</link><guid>https://blog.youkuaiyun.com/Alexwym/article/details/89373011</guid><author>Alexwym</author><pubDate>Sat, 20 Apr 2019 10:52:38 +0800</pubDate><description><![CDATA[上一篇博客中我们介绍了Java中的NIO模型，而JDK1.7之后升级NIO类库，也就是NIO2.0.Java正式提供了异步IO操作，同时提供了与UNIX网络编程事件驱动IO相对应的AIO。NIO（non-block IO）指的是同步非阻塞IO，AIO（Asynchronous IO）则是异步非阻塞IO。我们先来了解一些基础知识，最后再用AIO来设计一个服务器。

一、IO处理模型



服务器往客...]]></description><category></category></item><item><title><![CDATA[C10k破局（二）——Java NIO实现高并发服务器（一张图看懂Java NIO）]]></title><link>https://blog.youkuaiyun.com/Alexwym/article/details/89341290</link><guid>https://blog.youkuaiyun.com/Alexwym/article/details/89341290</guid><author>Alexwym</author><pubDate>Wed, 17 Apr 2019 09:50:14 +0800</pubDate><description><![CDATA[想要开发高性能的服务器，传统的BIO显然是不行的，Java提供了java.nio类库来帮助我们实现这件事。关于NIO的文章网上有很多博客，但是相应的解释图则比较少。于是我便自己整理了几张关系图，便于理解。在看原理图之前，我们还是需要先看下关于NIO的一些基础概念。

一、什么是NIO

NIO的全称是non-block IO，也就是非阻塞IO。与传统的BIO相对应。

Java IO 的各种流都是...]]></description><category></category></item><item><title><![CDATA[C10k破局（一）——线程池和消息队列实现高并发服务器]]></title><link>https://blog.youkuaiyun.com/Alexwym/article/details/89293326</link><guid>https://blog.youkuaiyun.com/Alexwym/article/details/89293326</guid><author>Alexwym</author><pubDate>Sun, 14 Apr 2019 11:33:56 +0800</pubDate><description><![CDATA[一、C10k的由来

互联网的基础就是网络通信，早期的互联网可以说是一个小群体的集合。互联网还不够普及，用户也不多，一台服务器同时在线100个用户估计在当时已经算是大型应用了，所以并不存在什么 C10K 的难题。互联网的爆发期应该是在www网站，浏览器，雅虎出现后。最早的互联网称之为Web1.0，互联网大部分的使用场景是下载一个HTML页面，用户在浏览器中查看网页上的信息，这个时期也不存在C10K...]]></description><category></category></item><item><title><![CDATA[加解密系统（包含DES、RSA等加密算法）]]></title><link>https://blog.youkuaiyun.com/Alexwym/article/details/86493970</link><guid>https://blog.youkuaiyun.com/Alexwym/article/details/86493970</guid><author>Alexwym</author><pubDate>Tue, 15 Jan 2019 19:33:07 +0800</pubDate><description><![CDATA[最近和小伙伴一起构建了一个包含仿射、流密码RC4、流密码LFSR+JK，DES及RSA的加解密系统。界面包括加解密算法选择框，加密解密按钮，加密明文信息框以及解密密文信息框。

完整代码已经上传到github上了，里面的README.md有具体的操作说明教程，需要的同学可以自取，地址：https://github.com/Alexlingl/Cryptology

下面就大致介绍一下这个加解密系统...]]></description><category></category></item><item><title><![CDATA[程序、进程与线程（二）]]></title><link>https://blog.youkuaiyun.com/Alexwym/article/details/83267864</link><guid>https://blog.youkuaiyun.com/Alexwym/article/details/83267864</guid><author>Alexwym</author><pubDate>Thu, 25 Oct 2018 09:23:18 +0800</pubDate><description><![CDATA[在前一章博客（《程序、进程与线程（一）》）中，我们已经了解了程序与进程的概念与区别，今天我们再来讲讲进程与线程。进程用得好好的为何还要出现线程呢？首先我们来看看进程的一些局限性。

一、进程的局限性

1、创建子进程时每次都要把父进程的数据都copy一份，造成资源空间的冗余浪费。

2、子进程和父进程的数据交互比较麻烦。不同的进程位于不同的地址空间，必须通过共享内存或者通信机制。

3、系统在进行...]]></description><category></category></item><item><title><![CDATA[程序、进程与线程（一）]]></title><link>https://blog.youkuaiyun.com/Alexwym/article/details/83146459</link><guid>https://blog.youkuaiyun.com/Alexwym/article/details/83146459</guid><author>Alexwym</author><pubDate>Fri, 19 Oct 2018 09:33:53 +0800</pubDate><description><![CDATA[关于进程与线程的概念解释网上有很多，但总感觉讲的不是很清楚。于是今天打算整理一下这个方面的知识，语言力求通俗易懂

一、程序与进程

举个具体的场景，某一天你爸妈不在家，你必须要自己做饭、洗衣服等等。你要做饭首先你得有做饭手册呀，这个手册中包含了做饭所需的各种步骤（比如洗米，把米放到电饭煲中，插上电饭煲电源等等），当你看完了做饭手册，你需要材料呀，也就是大米。有了这个大米你就可以把这个大米做成相应...]]></description><category></category></item><item><title><![CDATA[关系型数据库与NoSQL数据库]]></title><link>https://blog.youkuaiyun.com/Alexwym/article/details/83140663</link><guid>https://blog.youkuaiyun.com/Alexwym/article/details/83140663</guid><author>Alexwym</author><pubDate>Thu, 18 Oct 2018 09:20:37 +0800</pubDate><description><![CDATA[一、关系型数据库

目前我们常用的数据库一般是关系型数据库，比如Oracle、MySQL、SQL Server。

1、定义：基于关系模型（二维表）所提出的一种数据库。

实际场景：学生与系的关系如下



一个学生必定属于某一个系，因此我们可以把图中学生与系的关系抽象成三个表



这三个表所构成的就是一种简单的关系型数据库。当然在现实应用中我们还会对其进行一定的优化。

2、ER模型（Enti...]]></description><category></category></item><item><title><![CDATA[七种排序算法的具体实现（Java）]]></title><link>https://blog.youkuaiyun.com/Alexwym/article/details/82958823</link><guid>https://blog.youkuaiyun.com/Alexwym/article/details/82958823</guid><author>Alexwym</author><pubDate>Mon, 08 Oct 2018 18:57:33 +0800</pubDate><description><![CDATA[排序算法根据不同的算法思想往往有很多不同的实现。近期，个人整理了常见的七种算法，并用java对各个算法进行了具体实现，包括：插入排序、冒泡排序、选择排序、shell排序、归并排序、快速排序以及堆排序。



一、插入排序

算法步骤：

从第二个数值开始依次往后遍历。将第k个数值放到前面已经排好序的k-1个数值的合适位置。所谓的合适位置（以从小到大排序为例）就是该位置的前一个数值小于number[...]]></description><category></category></item><item><title><![CDATA[闲谈java中的程序编译与优化技术]]></title><link>https://blog.youkuaiyun.com/Alexwym/article/details/82892237</link><guid>https://blog.youkuaiyun.com/Alexwym/article/details/82892237</guid><author>Alexwym</author><pubDate>Sat, 29 Sep 2018 10:10:10 +0800</pubDate><description><![CDATA[

java中的程序编译和优化技术同其他语言一样基本都发生在编译期。java的编译期可根据不同的编译器分为三个部分，一个是前端编译器，比如javac；它的工作就是把.java文件转化为.class文件。另一个是即时编译器，比如JIT编译器；它的工作是把.class文件中的某些热点字节码转化为本地机器码，提高程序运行速度。最后一个是静态提前编译器，比如AOT静态编译器。它跳过了.class文件的生成...]]></description><category></category></item><item><title><![CDATA[java servlet使用uploadfile实现文件上传的功能]]></title><link>https://blog.youkuaiyun.com/Alexwym/article/details/82865843</link><guid>https://blog.youkuaiyun.com/Alexwym/article/details/82865843</guid><author>Alexwym</author><pubDate>Thu, 27 Sep 2018 14:01:31 +0800</pubDate><description><![CDATA[comons包导入IDEA失败？文件上传后在工程中相应的文件夹下找不到上传的文件？

近期想要基于hadoop分布式系统开发一个云盘项目。前些时候已经给IDEA配置好了tomcat的环境，配置好了java servlet的运行环境。这两天自己摸索着实现了一个简单的文件上传功能。在这个过程遇到了一些坑，在这里记录一下。

一、资源准备

需要下载下面两个jar包。



comons-fileupl...]]></description><category></category></item><item><title><![CDATA[kaldi中文语音识别平台的搭建——运行thchs30]]></title><link>https://blog.youkuaiyun.com/Alexwym/article/details/82839495</link><guid>https://blog.youkuaiyun.com/Alexwym/article/details/82839495</guid><author>Alexwym</author><pubDate>Tue, 25 Sep 2018 15:12:19 +0800</pubDate><description><![CDATA[kaldi资料的准备：《Kaldi学习笔记（三）——运行thchs30（清华大学中文语料库）》

运行kaldi中的自带样例：《Kaldi学习笔记（四）——thchs30中文在线识别》

thchs30的主要搭建过程参照以上两篇博客，此处就不再赘述。但是在搭建的过程中可能会出现一些问题，由于kaldi目前网上的资料比较少，很多问题搜不到，都是自己一个坑一个坑地填过来的，因此打算在这里记录一下，提示...]]></description><category></category></item><item><title><![CDATA[闲谈JVM中的垃圾收集机制]]></title><link>https://blog.youkuaiyun.com/Alexwym/article/details/82774652</link><guid>https://blog.youkuaiyun.com/Alexwym/article/details/82774652</guid><author>Alexwym</author><pubDate>Wed, 19 Sep 2018 20:47:32 +0800</pubDate><description><![CDATA[前面我们已经聊过了Java的内存区域构成，今天再来看下Java的垃圾收集机制。整体的框架图如下



整个垃圾收集主要分为两个部分，一个是方法论，也就是垃圾收集算法思想；一个是具体实现，也就是七个垃圾收集器。我们先来看下算法思想部分。垃圾收集是针对那些已死的对象，也就是说这一类对象以后不会再被使用。那么我们如何去判定一个对象是否是已死对象呢？一般有两种方法。一是引用计数算法。每当有一个其它对象引用...]]></description><category></category></item></channel></rss>