自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 ContentProvider导致App闪退问题分析

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

2021-08-18 23:01:53 5936 6

原创 PMS解析AndroidManifest.xml文件的过程

PMS解析AndroidManifest.xml文件的过程一、前言​ 前段时间在看当下主流的安卓插件化技术原理的时候,发现目前插件化技术对于四大组件的处理基本都是通过代理来实现的(动态注册的广播接收器除外)。简单说就是需要先在主包里预埋一个注册到AndroidManifest.xml中的组件,具体的业务逻辑实现则在插件里面,最后通过代理技术将两者连接起来。​ 那么系统是如何从AndroidManifest.xml中解析出四大组件的?以及解析后的组件信息又是怎么保存的呢?​ 首先我们要知道负责解

2021-08-02 22:29:14 1344

原创 利用vdexExtractor工具将Vdex文件转为dex文件

一、工具说明(一)vdexExtractor工具1、下载地址 https://github.com/anestisb/vdexExtractor2、依赖事项 在这里,由于我的电脑是Windows系统,因此我需要先安装cygwin,再通过cygwin安装zlib-devel。二、依赖环境和依赖库安装1、在官网https://cygwin.com/install.html下载win64位安装包2、运行setup-x86-64.exe,前面几步直接...

2020-08-01 15:23:01 5763

原创 wireshark抓包分析SSL/TLS协议

SSL/TLS协议一般有两种握手过程,一种是SSL握手,一种是会话恢复。前些时候在写HTTP和HTTPS协议区别的时候介绍了SSL协议的相关理论知识,但多少还是有点抽象,今天我们可以通过wireshark抓包来分析下SSL握手的过程。一、正常的握手过程(一)过程如下(二)wireshark抓到的对应的包如下(三)具体的包分析 Client Hello 包中...

2019-10-15 08:01:14 7802

原创 详解HTTP/HTTPS(二)——HTTPS协议

HTTP/HTTPS协议无疑是面试中最常问的几个计网协议之一。然而网上很多博客都写得偏简略,不够全面。于是我便打算做一个整合。内容较多,大致会分为两篇篇博客,一篇介绍HTTP协议,一篇介绍HTTPS协议。《详解HTTP/HTTPS(一)——HTTP协议》《详解HTTP/HTTPS(二)——HTTPS协议》HTTP协议全称为超文本传输协议,而HTTPS全称为超文本安全传输协议。HTT...

2019-09-19 19:57:01 1641

原创 详解HTTP/HTTPS(一)——HTTP协议

HTTP/HTTPS协议无疑是面试中最常问的几个计网协议之一。然而网上很多博客都写得偏简略,不够全面。于是我便打算做一个整合。内容较多,大致会分为三篇博客,一篇介绍HTTP协议,一篇介绍SSL/TLS协议,一篇介绍HTTPS协议。《详解HTTP/HTTPS(一)——HTTP协议》《详解HTTP/HTTPS(二)——HTTPS协议》HTTP协议也叫超文本传输协议,它定义了客户端和服务...

2019-08-28 15:48:16 1333

原创 Spring中JDBCTemplate的事务实现

一、事务的定义及特性(一)、事务的定义1、事务是一个最小的不可再分割的执行单元,它由批量的DML语句构成,这些语句要么全部执行,要不全都不执行。2、通常一个事务对应一个完整的业务。比如典型的转账业务,从账户A中转账1000元给账户B。操作过程分为两步,第一步从账户A中扣去1000元,第二步往账户B中加上1000元。显然这两个操作要么都得做,要么都不做。如果只做其中一个操作,数据库的数据...

2019-05-22 14:25:48 3875

原创 基于netty NIO开发的聊天室

一、为何要使用netty开发由于之前已经用Java中的socket写过一版简单的聊天室,这里就不再对聊天室的具体架构进行细致的介绍了,主要关注于使用netty框架重构后带来的改变。对聊天室不了解的同学可以先看下我的博客(《JAVA简单聊天室的实现》)本篇博客所使用的netty版本为4.1.36,完整工程已上传到Github(https://github.com/Alexlingl/Chat...

2019-05-10 14:07:15 3250 3

原创 C10破局(三)——Java AIO实现高并发服务器

上一篇博客中我们介绍了Java中的NIO模型,而JDK1.7之后升级NIO类库,也就是NIO2.0.Java正式提供了异步IO操作,同时提供了与UNIX网络编程事件驱动IO相对应的AIO。NIO(non-block IO)指的是同步非阻塞IO,AIO(Asynchronous IO)则是异步非阻塞IO。我们先来了解一些基础知识,最后再用AIO来设计一个服务器。一、IO处理模型服务器往客...

2019-04-20 10:52:38 1667 1

原创 C10k破局(二)——Java NIO实现高并发服务器(一张图看懂Java NIO)

想要开发高性能的服务器,传统的BIO显然是不行的,Java提供了java.nio类库来帮助我们实现这件事。关于NIO的文章网上有很多博客,但是相应的解释图则比较少。于是我便自己整理了几张关系图,便于理解。在看原理图之前,我们还是需要先看下关于NIO的一些基础概念。一、什么是NIONIO的全称是non-block IO,也就是非阻塞IO。与传统的BIO相对应。Java IO 的各种流都是...

2019-04-17 09:50:14 1417

原创 C10k破局(一)——线程池和消息队列实现高并发服务器

一、C10k的由来互联网的基础就是网络通信,早期的互联网可以说是一个小群体的集合。互联网还不够普及,用户也不多,一台服务器同时在线100个用户估计在当时已经算是大型应用了,所以并不存在什么 C10K 的难题。互联网的爆发期应该是在www网站,浏览器,雅虎出现后。最早的互联网称之为Web1.0,互联网大部分的使用场景是下载一个HTML页面,用户在浏览器中查看网页上的信息,这个时期也不存在C10K...

2019-04-14 11:33:56 2342

原创 加解密系统(包含DES、RSA等加密算法)

最近和小伙伴一起构建了一个包含仿射、流密码RC4、流密码LFSR+JK,DES及RSA的加解密系统。界面包括加解密算法选择框,加密解密按钮,加密明文信息框以及解密密文信息框。完整代码已经上传到github上了,里面的README.md有具体的操作说明教程,需要的同学可以自取,地址:https://github.com/Alexlingl/Cryptology下面就大致介绍一下这个加解密系统...

2019-01-15 19:33:07 5279

原创 程序、进程与线程(二)

在前一章博客(《程序、进程与线程(一)》)中,我们已经了解了程序与进程的概念与区别,今天我们再来讲讲进程与线程。进程用得好好的为何还要出现线程呢?首先我们来看看进程的一些局限性。一、进程的局限性1、创建子进程时每次都要把父进程的数据都copy一份,造成资源空间的冗余浪费。2、子进程和父进程的数据交互比较麻烦。不同的进程位于不同的地址空间,必须通过共享内存或者通信机制。3、系统在进行...

2018-10-25 09:23:18 1484

原创 程序、进程与线程(一)

关于进程与线程的概念解释网上有很多,但总感觉讲的不是很清楚。于是今天打算整理一下这个方面的知识,语言力求通俗易懂一、程序与进程举个具体的场景,某一天你爸妈不在家,你必须要自己做饭、洗衣服等等。你要做饭首先你得有做饭手册呀,这个手册中包含了做饭所需的各种步骤(比如洗米,把米放到电饭煲中,插上电饭煲电源等等),当你看完了做饭手册,你需要材料呀,也就是大米。有了这个大米你就可以把这个大米做成相应...

2018-10-19 09:33:53 5662

原创 关系型数据库与NoSQL数据库

一、关系型数据库目前我们常用的数据库一般是关系型数据库,比如Oracle、MySQL、SQL Server。1、定义:基于关系模型(二维表)所提出的一种数据库。实际场景:学生与系的关系如下一个学生必定属于某一个系,因此我们可以把图中学生与系的关系抽象成三个表这三个表所构成的就是一种简单的关系型数据库。当然在现实应用中我们还会对其进行一定的优化。2、ER模型(Enti...

2018-10-18 09:20:37 1784

原创 七种排序算法的具体实现(Java)

排序算法根据不同的算法思想往往有很多不同的实现。近期,个人整理了常见的七种算法,并用java对各个算法进行了具体实现,包括:插入排序、冒泡排序、选择排序、shell排序、归并排序、快速排序以及堆排序。一、插入排序算法步骤:从第二个数值开始依次往后遍历。将第k个数值放到前面已经排好序的k-1个数值的合适位置。所谓的合适位置(以从小到大排序为例)就是该位置的前一个数值小于number[...

2018-10-08 18:57:33 610

原创 闲谈java中的程序编译与优化技术

java中的程序编译和优化技术同其他语言一样基本都发生在编译期。java的编译期可根据不同的编译器分为三个部分,一个是前端编译器,比如javac;它的工作就是把.java文件转化为.class文件。另一个是即时编译器,比如JIT编译器;它的工作是把.class文件中的某些热点字节码转化为本地机器码,提高程序运行速度。最后一个是静态提前编译器,比如AOT静态编译器。它跳过了.class文件的生成...

2018-09-29 10:10:10 593

原创 java servlet使用uploadfile实现文件上传的功能

comons包导入IDEA失败?文件上传后在工程中相应的文件夹下找不到上传的文件?近期想要基于hadoop分布式系统开发一个云盘项目。前些时候已经给IDEA配置好了tomcat的环境,配置好了java servlet的运行环境。这两天自己摸索着实现了一个简单的文件上传功能。在这个过程遇到了一些坑,在这里记录一下。一、资源准备需要下载下面两个jar包。comons-fileupl...

2018-09-27 14:01:31 1304 1

原创 kaldi中文语音识别平台的搭建——运行thchs30

kaldi资料的准备:《Kaldi学习笔记(三)——运行thchs30(清华大学中文语料库)》运行kaldi中的自带样例:《Kaldi学习笔记(四)——thchs30中文在线识别》thchs30的主要搭建过程参照以上两篇博客,此处就不再赘述。但是在搭建的过程中可能会出现一些问题,由于kaldi目前网上的资料比较少,很多问题搜不到,都是自己一个坑一个坑地填过来的,因此打算在这里记录一下,提示...

2018-09-25 15:12:19 2383

原创 闲谈JVM中的垃圾收集机制

前面我们已经聊过了Java的内存区域构成,今天再来看下Java的垃圾收集机制。整体的框架图如下整个垃圾收集主要分为两个部分,一个是方法论,也就是垃圾收集算法思想;一个是具体实现,也就是七个垃圾收集器。我们先来看下算法思想部分。垃圾收集是针对那些已死的对象,也就是说这一类对象以后不会再被使用。那么我们如何去判定一个对象是否是已死对象呢?一般有两种方法。一是引用计数算法。每当有一个其它对象引用...

2018-09-19 20:47:32 497

原创 闲谈Java内存区域

前不久刚看完了Java虚拟机,看完之后觉得学到了不少东西。但是具体学到了些什么,却很难完整地把它讲述出来,总是会出现知识断层的情况。于是打算从头将其梳理一遍,争取打通任督二脉。。。首先,先来看看Java内存区域的整个知识框架Java语言的特点主要有两个:内存自动分配机制和垃圾收集机制。要想了解这两个内容,我们就要先搞清楚Java的内存区域,而Java内存区域主要就是指运行时数据区。由于...

2018-09-18 18:11:53 315

转载 如何用intellij idea新建一个java web+Servlet项目

本文装载自:https://blog.csdn.net/qq_35164169/article/details/76146655个人转载只是为了记录一下,日后遇到问题便于查看。 创建一个JAVA-web项目的前提:1、下载并安装JDK2、安装并配置Tomcat服务器下面开始创建JAVA-web项目:1、File——>new——>Project... ...

2018-09-16 17:02:56 766

原创 如何在IDEA中配置tomcat——搭建web运行环境

近期在着手开发一个简单的云盘项目,于是就打算在IDEA中配置一下完整的项目环境,包括web环境和mysql数据库。本篇博客只将web环境的配置一、安装tomcat这个网上教程有很多,大家可以自行查找。这里的话有一个巨坑,大家如果遇到了可以参考着我的这一篇博客进行解决:《tomcat 7.0 管理员登录时"401 Unauthorized" 问题解决方法》二、在IDEA中配置tomcat...

2018-09-16 16:30:02 3062

转载 tomcat 7.0 管理员登录时"401 Unauthorized" 问题解决方法

方法一:修改端口号在安装目录的conf文件夹下找到server.xml文件,找到此下代码<Connector port="8080" protocol="HTTP/1.1"                         connection Timeout="20000"redirectPort="8443"/>将port=8080改为任意值,例:port=8...

2018-09-16 15:39:22 1977 1

原创 如何在IDEA中连接mysql数据库

网上关于这方面的教程大部分都写得比较简单,新手容易入坑。因此就想写一篇比较完整的博客来记录下。一、mysql数据库安装之前我以为IDEA中连接数据库的时候它会自行安装mysql数据库,实际上不是这样的!!!它仅仅是跟你电脑上现有的数据库创建连接而已,所以在使用IDEA连接数据库之前,你要先安装mysql数据库。这里的话,因为我之前使用PHP写过网页,已经用wampserver搭建好了w...

2018-09-16 09:47:09 91274 23

原创 虚拟化技术

提到虚拟化技术,大多数人想起的都是VMware、Virtual Box等这些软件,以为虚拟化技术就是虚拟机。但实际上,这种想法是不太准确的,虚拟化技术是一个很宽泛的概念,VMware、Virtual Box只是基于其中的一种技术来实现的。今天,我们就来了解一下虚拟化技术。一、简介1、虚拟化的定义:指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机。在一台计算机上同时运行多个逻辑计算机,每个逻...

2018-09-14 10:00:17 3245

转载 在Ubuntu18的虚拟机上搭建kaldi

博客主体内容转载自:https://blog.csdn.net/by21010/article/details/49072699在进行kaldi安装之前我们需要先做一些准备1、虚拟机性能配置内存至少4G(最好给个五六G,4G的话在编译的时候还是很有可能会出现长时间卡顿的现象,如果你的电脑只有4G内存,那就只能买个内存条了)处理器建议给四个,编译速度比较快,差不多半个多小时吧(...

2018-09-12 13:31:45 1532 2

原创 Map和Reduce任务的优化

编程总是围绕着两个问题:“如何完成这个任务”和“如何能让程序运行得更快”因此,相对应的MapReduce计算模型的优化也就集中在两个方面:一是计算性能方面的优化;二是I/O操作方面的优化1、任务调度两个方面的优化:一是计算方面:Hadoop总会先将任务分配给空闲的机器,使所有的任务能公平地分享系统资源;二是I/O方面:Hadoop会尽量将map任务分配给InputSplit所在的机器,...

2018-09-09 09:27:02 1391

原创 MapReduce计算模型

MapReduce被广泛应用于日志分析、海量数据的排序、在海量数据中查找特定模式等场景中。一、MapReduce的优势1、可使用编程语言的多样性:map和reduce程序的编写可用Python/PHP/C++/Java等语言2、适用性强:可以在任何安装Hadoop集群中运行同样的程序3、高效性:多台主机一同处理数据。适用于处理大量的数据(这一点有点像是操作系统中程序的并发概念。也可...

2018-09-07 17:24:38 8066

原创 在命令行中运行Hadoop自带的WordCount程序

Hadoop集群搭建完之后,接下来就需要开始尝试去使用它啦。我们可以在这个集群上运行Hadoop的“Hello World程序”——WordCount单词计数。这个程序的代码在我们下载安装Hadoop的时候就已经打包下载好了,我们只需要直接去使用就可以了。(一)、启动hdfs进程服务:进入hadoop的目录中:cd Hadoop/hadoop-2.7.7进入相应目录后启动HDFS的进程...

2018-09-07 16:24:08 18993 3

原创 虚拟机太卡的解决方案之一——Xshell的安装使用

虚拟机的运行速度有时很令人崩溃,特别是当我们需要利用虚拟机构建大型集群的时候。前些时候在构建Hadoop集群的时候,由于需要一次性开启多个虚拟机,导致几乎无法在虚拟机界面中进行任何操作(卡得飞起的那种)。于是决定放弃应用界面,使用xshell来远程连接使用Ubuntu虚拟机。一、Xshell安装教程:https://blog.csdn.net/wangpai_yonghu/article/de...

2018-09-07 15:30:59 1594

转载 localhost: Error: JAVA_HOME is not set and could not be found.

今天开启 NameNode 和 DataNode 守护进程时出错localhost: Error: JAVA_HOME is not set and could not be found.1但是JAVA环境变量已经配好了,终端输入java -version也会显示版本信息解决方案如下修改hadoop-env.sh (我的hadoop安装在/usr/local/ 目录下)su...

2018-09-06 15:36:16 5985

转载 mysql中插入中文数据

今天遇到的问题使mysql中插入中文数据后显示乱码,我在mysql中插入中文的时候,可以插入可是select的时候却无法显示,为此我写下这篇博客用于解决mysql插入中文。由于有些截图没有记录下来,但是为了说明问题,我借用了别人的图,主要是为了完整的描述问题,在没有任何修改的时候,我们可以在mysql命令行中敲入以下指令,其结果如下所示: 1 show vari...

2018-09-03 16:16:09 831

原创 线程安全与锁优化(笔记)

一、概述面向过程的编程思想:把数据和过程分别作为独立的部分来考虑,数据代表问题空间中的客体,程序代码则用于处理这些数据,这种思维方式直接站在计算机的角度去抽象和解决问题,称为面向过程的编程思想。面向对象的编程思想:站在现实世界的角度去抽象和解决问题,它把数据和行为都看做是对象的一部分。二、线程安全定义:“当多个线程访问同一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行...

2018-09-02 22:05:44 488

原创 往mysql数据库中插入、查询数据

一、创建表单1、在命令行中创建命令如下。CREATE TABLE IF NOT EXISTS `runoob_tbl`( `runoob_id` INT UNSIGNED AUTO_INCREMENT, `runoob_title` VARCHAR(100) NOT NULL, `runoob_author` VARCHAR(40) NOT NULL, `su...

2018-09-02 16:33:14 6066

原创 连接并创建mysql数据库

1、打开wampserver2、连接数据库使用PHP脚本连接打开文本编辑器,编写以下代码<?php$dbhost = 'localhost';//mysql服务器主机地址$dbuser = 'root';//mysql用户名$dbpass = '';//用户名的密码$conn = mysqli_connect($dbhost,$dbuser,$dbpass);/...

2018-09-02 14:57:42 3203

原创 mysql数据库学习——在命令行中运行mysql

一、启动wampserver图标为绿色说明启动成功二、进入到wamp的安装位置,找到mysql我的是在D:\wamp64\bin\mysql\mysql5.7.14\bin\mysql三、直接拖拽到命令行中修改成以下指令输入密码后就可以启动mysql数据库了四、进入可视化界面五、进入数据库1、show databases;对比上面的可...

2018-09-02 10:04:21 842

原创 Java内存模型与线程(笔记)

一、概述多任务处理的原因:计算机的运行速度与它的存储和通信子系统速度的差距太大,大量的时间都花费在磁盘I/O、网络通信或者数据库访问上。为了不让处理器大部分的时间都处于等待其他资源的状态,就可以让计算机同时处理几项任务。一个服务端同时对多个客户端提供服务:每秒事务处理数是衡量一个服务器好坏的重要指标。对于计算量相同的任务,程序线程并发协调得越有条不紊,效率自然就越高;反之,线程之间频繁阻塞...

2018-09-01 19:11:29 358

原创 晚期(运行期)优化(笔记)

一、概述即时编译器性能的好坏、代码优化程度的高低是衡量一款商用虚拟机优秀与否的最关键指标之一。二、HotSpot虚拟机内的即时编译器1、解释器与编译器1.1.许多主流的商用虚拟机都采用解释器与编译器并存的架构。1.2.优势:当程序需要迅速启动和执行的时候,解释器可以首先发挥作用,省去编译的世界,立即执行。在程序运行后,随着时间的推移,编译器逐渐发挥作用,把越来越多的代码编译成本...

2018-09-01 10:28:55 403

原创 早期(编译期)优化(笔记)

一、概述1、三类编译过程#前端编译器:把*.java文件编程*.class文件的过程。——典型代表:Sun的javac、Eclipse JDT中的增量式编译器(ECJ)#后端运行期编译器(JIT编译器): 把字节码转变为机器码的过程。——典型代表:HotSpot VM的C1、C2编译器#静态提前编译器(AOT编译器):直接把*.java文件编译成本地机器代码的过程。——典型代表:G...

2018-08-31 20:09:49 761

空空如也

空空如也

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

TA关注的人

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