自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(29)
  • 资源 (1)
  • 收藏
  • 关注

原创 Tomcat剖析之源码篇(二)

前言前面第一篇介绍了Tomcat的整体架构,能让我们在宏观上对Tomcat的运转流程有一个认识,但原理毕竟只是理论,这篇博客就来从源码入手,分析Tomcat的的初始化、启动、各个组件的构建、一次请求的分发、生命周期的管理等内容。从初始化开始Tomcat启动有三种方式,第一种是直接通过org.apache.catalina.startup.Bootstrap类的main方法,这也是最早出现的一...

2019-08-12 14:18:55 270

原创 Tomcat剖析之架构篇(一)

前言早在之前写过一些http玩具服务器,总感觉无法继续前进了,期间花了比较多的时间在基础知识上,前段时间想着直接从用的比较多的服务器开始,对于Java开发者来说,自然Tomcat是首选,但有一个比较大的问题是经过了近20年的发展,它已经成为了一个十分系统、复杂的框架了,读起来肯定容易陷入泥潭,回想起之前学其它原理一样,一开始就看了比较复杂的一张架构图,然后就没有然后了…,不过还好有《how to...

2019-07-14 19:59:13 322

原创 JVM运行期优化

一、前言JVM运行期的优化主要是指程序在编译成字节码之后,JVM通过解释器去解释执行,再针对程序运行的资源占用等情况进行分析然后做出的一系列的优化。Java程序的效率之所以较高(即使是和接近底层的c/c++语言相比较,在Java内部的即时编译器优化的情况下,很多应用场景下效率也毫不逊色),是离不开JVM对程序进行的优化的,这篇博客就来总结一下虚拟机在背后给我们做的工作(针对的是目前市面上主流的...

2018-08-04 10:14:07 490

原创 LRU与LFU缓存算法

一、背景缓存算法也是也是我们日常使用的操作系统、应用程序内部用得比较多的一种调度算法,之前也是了解个过程没具体实现过,刚好LintCode上面刷题看到这两个算法,所以写这篇博客来整理一下LRUCache算法和LFUCache算法的过程和实现。二、LRUCache算法1.简单介绍LRU(Least Recently Used)即最少最近使用算法,这个算法就是把每次都把最近访问...

2018-06-30 17:08:53 627

原创 Java内存模型

一、前言之前写过一篇二分查找树的,前面也说过,普通的二叉查找树一般情况下增加、删除查找所用的时间复杂度是O(logN),但在最坏的情况下,可能会退化成一个链表,也就是每次插入节点时都比父节点大或者小,这时查找的时间复杂度就会变成O(N)级别的,这就达不到高效了,说白了就是稳定性不高,最近花了比较多的时间在树上面,所以今天就来总结一下平衡的查找树-AVL树,AVL树就是在增加、删除节点时对二叉树...

2018-06-25 01:19:21 349

原创 Linux也可以这样美——Ubuntu18.04安装、配置、美化-踩坑记

开篇前几天Ubuntu18.04 LTS稳定版发布了,这也是将官方作为一个长期维护的版本,从ubuntu17.10开始,官方又开始使用gnome作为默认的桌面环境,这也给我们增加了更多可以div的地方,以前的unity桌面确实不太美观,并且小bug就更加的多。这里搞了个mac风格的美化,没图言xxx,先来几张图来看看哈 。感兴趣,可以继续看下去,坑还是挺多的。本来我是想直接从ubun...

2018-05-02 01:20:02 161160 9

原创 JVM中的类加载机制

一、前言这篇博客主要总结一下Java虚拟机中的类加载机制,刚开始学习Java时,相信大多数人第一步都是使用的java c的命令去编译.Java的文件,编译后产生了一个class文件,而类文件又是被JVM进行怎样的操作才能运行?读完这篇博客,相信你能有一个整体的了解。二、加载过程概述类从被加载到虚拟机的内存开始一直到被卸载出内存,生命周期一共包括了:加载、验证、准备、解析、初始化、使...

2018-04-15 16:32:55 225

原创 坦白说解密

一、开篇最近坦白说也是异常的火,作为开发者的我也去赶紧跑过去蹭了一下热度,写了个安卓的,加载了头像,点击后直接跳转到QQ资料卡页面,并且优化了已有的解密的算法(已有的大多数情况不能完全解密),目前还没发现解密出现问题的。 看看图 二、分析首先,要拿到数据的接口,得先拿到对应的token,而这个token就是使用skey进行一系列计算得出的,这个skey就是登录QQ空间后从返回的...

2018-04-08 08:47:10 6065 1

原创 Java内存区域与内存溢出

前言最近在读周志明老师的《深入理解Java虚拟机》,感觉一下换了一个角度来看待Java代码,有必要整理一些内容,更清楚实际的流程,这一篇就记录下Java内存区域与相关的一些内存溢出的异常。内存区域Java虚拟机在执行Java程序的过程会把它管理的内存划分为各个不同的区域,这些区域都有着各自的生命周期,总的来说Java虚拟机管理的内存将会包括一下的数据区域 图中可以很清晰的看出...

2018-03-29 21:52:17 162

原创 仿MIUI实现带弹性的ScrollView

一、前言用过MIUI系统的都知道,拖动列表时如果到了顶部或者底部就会有一个弹性的效果,这里就自己动手去实现一个带弹性效果的ScrollView。最后效果如下。 二、具体实现具体实现过程大体上就是需要去监听用户当前手势,也就是新建一个RubberScrollView类,先继承ScrollView,然后重写onInterceptTouchEvent方法和OnTouchEvent方法。...

2018-03-14 23:47:08 621

原创 机器学习起步-k-最近邻算法

这段时间去了解了下机器学习中常见的一些算法,一下东西挺多的,要花时间补下相关的数学了,这里总结一下学习的一些相关的知识点,非常感谢慕课网bobo老师即通俗易懂和不缺乏深度的讲解,其它的就不多说了,进入正题。简单介绍这里先简单说一下机器学习的环境,我是在ubuntu17.04下面安装的Anaconda,它集成了很多数据处理、科学计算和机器学习相关的库和一些强大的工具。直接在官网下载,然后...

2018-03-09 20:09:55 311

原创 Okhttp3的封装 搞定常用的请求

开篇这篇博客写下Okhttp的封装,作为安卓最应用最广泛的网络请求框架,okhttp也是被玩出了各种姿势,虽然已经帮我们把一个原生的网络请求封装精简了很多,不过为了更加的方便,还是再进行一层的封装,这里的封装包括了常用的GET,POST,DELETE,PUT的请求,其中post包括了基于json格式的请求,以及表单形式的请求,因为上传文件基本都是用的表单去提交的,基本这一套封装可以搞定安卓应用...

2018-02-14 13:14:17 1305

原创 实现安卓无限轮播组件Banner

前言前些天需要使用到安卓的banner,也就是现在主流app主页的无限轮播的横幅,现在已经有很多好的开源项目可以直接使用,不过我还是想自己去实现一遍。因为是访问的网络数据,实际过程中还是有些坑的,所以还是记录一下。具体实现首先还是来看看最终的效果,gif是有些卡顿,跑起来还是很流畅的 了解到,现在实现这种横幅,基本上是2种方式,一种是使用RecyclerView的横向滚动去实...

2018-02-10 00:32:13 603

原创 浅谈Android中的MVP架构

一、前言Android中的Mvp模式也不是什么新概念了,网上也有许关于Mvp的案例,但是感觉很多写得还是不够清晰,并且大多实际的项目涉及到数据绑定以及响应式编程的东西,给许多刚想了解Mvp架构的朋友带来了不必要的理解难度。Android也是丢了很长一段时间,平日里逛这些社区时,这些关于架构的概念还是接触了不少,但是“纸上识来终觉浅,要知此事需躬行”,所以这里我写篇博客总结一下。二、介绍

2018-02-01 10:34:31 358

原创 随机模拟算法求解圆周率

圆周率(π)这个东西是从小学开始一直陪伴我们的,这里使用使用蒙特卡洛算法来产生大量的随机数求解π的近似值。计算方式首先我们知道 正方形的面积公式是S1 = a * a,圆形的面积S2 = π * r * r; 所以以圆的直径为正方形边长,可以得出π的表达式。π = 4 * S2 / S1 这样一来,重点就是求解正方形和圆形的面积,这里使用在一正方形区域内圆内产生相应的随机

2018-01-26 19:57:33 5954

原创 Android第三方登录与服务器端验证过程

开篇随着时代的发展,现在对App要求不像早几年那样,大多数应用还是未联网的,现在的应用程序如果不能与用户进行较好的交互,就会少了太多的竞争力。说到交互,就必需要求我们访问网络,进行数据的交互。因为需要用户的信息,又少不了注册和登录的功能,而现在五花八门的账号,使得一些用户不想再又去注册一个,这里对于开发人员或者中小企业来说最好的选择就是直接使用第三方账号了,这里虽然标题是android,但其实

2018-01-21 19:35:25 4518

原创 Ubuntu16.04下Nginx+uwsgi部署Django项目

之前写了一篇Pycharm远程调试django项目的,只是完成了Django项目在服务器上的运行。而且当时是用的虚拟机,有些坑并没有遇到。前几天买了阿里云的Linux服务器ubuntu16.04,一路搭建环境和部署过程搞了2天多,可以说是神坑无数,最有意思的网上的很多博客是叫踩坑记录,结果照着这些方式去搞出现了很多奇怪的问题,估计也和版本不同有关。这里为了避免少走一些弯路,我就来记录一下整个过程(

2018-01-04 19:45:15 810 1

原创 Pycahrm远程调试Django项目

本来说坚持把blog写下去,无奈又落下了一个多月了。除了自己总是爱拖延,可能更大的原因是blog没几个人看,少了很多动力,不过为了锻炼自己的总结能力,加深自己的记忆,就算是写给自己看也要写下去。废话不多说,进入正题… 最近因为需要要把django项目部署到服务器端,又想在本地进行调试,发现了pycharm的远程调试的强大(不得不佩服jetbrains公司),网上搜出来的很多都是零散的,过程中也是踩

2017-12-25 12:43:41 490

原创 Python设计模式之策略模式

前言设计模式是我们实际应用开发中必不可缺的,对设计模式的理解有助于我们写出可读性和扩展更高的应用程序。虽然设计模式与语言无关,但并不意味着每一个模式都能在任何语言中使用,所以有必要去针对语言的特性去做了解。设计模式特别是对于java语言而言,已经有过非常多的大牛写过,所以这里我就不重复了。对于Python来说就相对要少很多,特别是python语言具有很多高级的特性,而不需要了解这些照样能满足开发中的

2017-11-14 09:18:10 2341

原创 图论 应用篇

上次写了篇图的基本构造方法,运用图这种强大的数据结构结构,还能解决实际应用中的许多问题,今天这篇就主要整理一些常见的应用一、路径问题路径问题在图的处理领域是非常重要的。如我们最常见的走迷宫,就是典型的寻路问题。这里主要运用深度优先和广度优先算法两种方式来进行路径寻找,这2种搜索算法在很多数据结构中都有重要的运用,之前写的一篇二叉查找树中的层序遍历就用到了广度优先算法,这里就详细的介绍一下。1.深度优

2017-11-04 17:32:50 9289

原创 MySQL性能优化(一)

MySQL是一个开源的小型关系数据库,也是目前应用最广泛的。最近学习了MySQL的性能调优,感觉一下子接触很多之前不了解的东西,这些优化应该来说是非常实用的,所以这里打算写一个系列的博客来整理下。CentOS系统参数优化众所周知,Mysql能安装在各大操作系统上,特别是对于很多个人开发者,都喜欢把开发放在windows上面,但是实际上线的项目都是需要部署到服务器上。虽然说Windows也能作服务器,

2017-10-22 16:56:22 245

原创 图论 基础篇

一. 图的介绍说起图这个词,很多人可能首先会想到的就是图片,地图……等,但这里所说的图是一个抽象的概念。 定义:图是由一组顶点和一组能将两个顶点相连的边组成的。图论一直以来都是数学领域的一个重要分支,但在计算机科学领域的应用中,基于图论的由一系列结点和边的模型起到了非常重要的作用,图的算法能够解决实际生活中许多比较复杂的问题,例如我们的地图、电路、社会中人与人之间的关系网已级计算机网络等无法通

2017-10-20 19:53:13 600 1

原创 二叉堆与优先队列

一、优先队列1.简单介绍优先队列是一种抽象的数据结构,它与我们生活中的许多场景息息相关。比如我们的电脑或者手机,很多时候我们后台会运行多个程序,当程序过多导致内存急剧减少时,如果没有相关权限的设置,处理器会优先关闭挂在后台比较久的,然后继续往后台加入程序。和基本的数据结构队列和栈类似,不过优先队列对元素的操作是有优先级的,和上面描述的一样,它的核心是删除最大元素和插入元素。2.基本实现优先队列的实现

2017-10-13 20:36:45 238

原创 分治思想之排序算法

分而治之是设计高效算法的一个重要思想。本文主要总结一下分治思想在排序算法中的运用。排序在商业数据处理和现代科学计算中有着重要的地位,它能够应用于事物处理、组合优化、天体物理学、分子动力学、语言学、基因组学、天气预报和很多其它领域。——《算法》。发展至今,已经出现过很多的排序算法。如选择排序,插入排序,希尔排序,堆排序,归并排序,快速排序。这里主要总结下后面种,这种也是目前运用最广和最高效的(虽然在某

2017-10-02 23:19:29 6650

原创 灵活&&高效的符号表--二叉查找树

一丶定义一颗二叉查找树是一颗二叉树,其中每个结点的键都大于其任左子树任意结点的键而小于右子树任意结点的键。如标题所述,它有着链表插入的灵活性和有序数组查找的高效性。二丶基本实现注:本文采用的是C++语言实现 但算法与数据结构是一种思想 与语言无关。1.查找查找的思路比较简单,需要查找的键存在当前树中就直接返回相应的值,如果查找的键小于根结点就在左子树中继续递归查找,大于就在右子树中查找,最后没查找到

2017-09-24 14:56:23 282

原创 玩转Python装饰器

1.定义装饰器模式是面向对象语言中经典的设计模式之一,它的出现是为了解决在多个函数中添加某一统一的功能,从而减少代码的重用。例如常应用的场景:插入日志,计算性能,缓存运算结果,事务处理等。这里就来了解python中的装饰器。2.实例分析首先看个经典的算法题:一个共有10个台阶的楼梯,从下面走到上面,一次只能迈1-3个台阶,并且不能后退,走完这个楼梯有多少种走法? 首先这个题目就是斐波那契数列的一个

2017-07-31 22:20:22 312

原创 Python3爬取百科词条+导入MySQL数据库

本文主要介绍使用Python爬虫爬取Python百度词条的信息 主要参考慕课网的《开发简单爬虫》以及一些数据库操作开发工具—工欲善其事 必先利其器首先 这里开发工具用的Python3.6+Pycharm+MySQL5.7+SQLyog 前面2个的安装直接网上搜下教程一大堆 而且免去了配置环境变量的操作,MySQL数据库(安装教程也一大堆)现在最新版是5.7 它的安装与之前的有点不同 注意到没 安

2017-06-21 00:55:38 2001 1

原创 最全的正则表达式整理

正则表达式是一种字符串匹配规则,最大的特点就是短小精悍,能高效的解决实际应用中的很多问题,这里就来整理一下常用的正则表达式一、校验数字的表达式 1 数字: ^[0-9]$ 2 n位的数字: ^\d{n}$ 3 至少n位的数字: ^\d{n,}$ 4 m-n位的数字:^\d{m,n}$ 5 零和非零开头的数字:^(0|[1-9][0-9]*)$ 6 非零开头的最多带两位小数的数字:^([1-9][0-

2017-03-18 17:10:28 5419 1

原创 面向对象思想

“上帝创造了人,并给了人思想,而思想是决定万物的根本尺度” ——引----#面向对象的概念 面向对象指面向客观规律之间的关系,人类平常的思维方式就是面向对象的,自然界的事物与事物之间是对象与对象之间的关系。我们要解决一个问题时,这个问题就变成了对象,而这个过程就变成了面向对象。 ##一切都是对象 (1) 所有东西都是对象。可将对象想象成一种新型变量;它保存着数据,但可要求它对自身进行操作。理论

2016-12-22 12:56:49 482

《硅谷之谜》 PDF

《硅谷之谜》 对于互联网行业感兴趣的这些书是非常值得看的

2017-11-22

空空如也

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

TA关注的人

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