自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

一枚野生程序员 —— Tim

https://zouchanglin.cn

  • 博客(215)
  • 资源 (6)
  • 问答 (1)
  • 收藏
  • 关注

原创 SharedPreference与文件存储

title: SharedPreference与文件存储tags:Android存储categories: 移动开发abbrlink: 41105date: 2020-12-02 18:10:00Android常用数据存储方式有SharedPreferences存储数据(虽然还是属于内部存储)、文件存储(内部,外部)、SQLite数据库存储、ContentProvider存储数据、网络存储数据等几种。本篇博客主要是介绍Shared Preference的原理与使用,区分内部与外部文件存.

2020-12-03 17:18:52 1929

原创 Android屏幕适配

由于Android系统的开放性,任何用户、开发商、OEM厂商、运营商都可以对Android进行定制,修改成他们想要的样子,导致碎片化严重。Android手机的分辨率和尺寸千奇百怪,同样的软件在不同的手机上UI表现难以达到一致的效果,所以需要进行屏幕适配,针对不同的设备做一个比较统一的方案。先要搞清楚的问题就是什么是屏幕尺寸?什么是屏幕分辨率?什么是屏幕像素密度?还有开发中的各...

2020-11-29 16:21:30 1812

原创 手写一个Hexo评论系统(二)

接着上一篇文章《手写一个Hexo评论系统(一)》,本篇文章主要是讲述记述评论系统实现的一些具体的设计方案与技术细节,方便以后修改或者重构。还有项目的部署问题,包括域名解析,Nginx配置代理,云服务器选购的一些问题,选购服务器的坑是真的大,所以还是尽量选择大厂,稳定一点,好用一点就不用在乎多几那块钱嘛,而且根据自己的需要买配置还是比较划算的。上次总共列出了如下的一些需求,根据这些需求来构想一下如何设计:1、无需登录和验证码,直接评论即可2、支持回复评论,且可无限递归回复3、支持评论点赞,按照点赞排

2020-11-29 14:10:15 1339

原创 手写一个Hexo评论系统(一)

我的个人博客时使用Hexo构建的,个人觉得使用Hexo非常方便,而且主题也很好看。因为我的Hexo仓库推送地址同时配置了Github和Gitee,所以一个hexo d命令便可以通知部署到 zouchanglin.cn 和 zouchanglin.gitee.io 两个站点。唯一美中不足的就是Hexo缺少一款我比较满意的评论系统,所以决定自己手撸一个Hexo博客的评论系统,现在已经部署好了,去我的博客站点是可以看到效果的。我的博客经历了什么我个人比较喜欢用博客来记录很多东西,比如学习笔记、实验报告、心得

2020-11-29 14:00:21 1292

原创 高级控件与屏幕适配

本篇文章主要是记录一下高级控件ListView和CardView的使用方式和注意事项,虽然目前都已经用RecyclerView替代了ListView但是了解其中的原理和优化还是有必要的,关于ListView的原理和真正意义上的优化在后面会专门写一片文章来讲述,本篇只谈其具体使用与必须优化的方式。至于CardView其实用的还是比较多的,可以看到我的小Demo实现的效果还是很不...

2020-11-18 16:21:30 1134

原创 UI片段——Fragment

为什么需要Fragment?Fragment与Activity又是什么关系?Fragment的生命周期是怎样的?Fragment如何使用呢?其实Fragment是一种可以嵌入在活动中的UI片段,能够让程序更加合理和充分地利用大屏幕的空间,出现的初衷是为了适应大屏幕的平板电脑,可以将其看成一个小型Activity,又称作Activity碎片。下面来看看Fragment到底有哪些...

2020-10-18 04:10:00 1255

原创 Android对话框

消息提示机制,常用于向用户传递信息、提示或警告用户的行为。通用的方法有setTitle、setMessage、create、show。本片文章主要是简单对话框的使用,如何自定义对话框,如何使用PopupWindow进行弹框,以及如何对PopupWindow弹框加上动画效果。简单对话框<Button android:id="@+id/normal_dialog_bt...

2020-10-15 01:10:00 1055

原创 Android Menu

本文会介绍三种Menu,分别是Options Menu、Context Menu、Popup Menu的使用方式。Menu菜单是Android应用中非常重要且常见的组成部分,主要可以分为三类:选项菜单、上下文菜单/上下文操作模式以及弹出菜单。它们的主要区别如下:选项菜单:一个应用的主菜单项,用于放置对应用产生全局影响的操作,如搜索/设置。上下文菜单:用户长按某一元素时...

2020-10-14 04:10:00 1044

原创 Activity的四种启动模式与生命周期

一般情况下,Android中每个应用程序一开启就会创建一个任务栈,任务栈的ID是自增长的。最小化的时候,应用程序实际上是后台运行,任务栈是保留的。Standard 标准启动模式:这种模式下每开启一个新的Activity,都会被放置在任务栈的栈顶,不存在复用SingleTop 启动模式:这种模式下,如果栈顶已经存在了要开启的Activity,系统就不会重复创建了,而是利用...

2020-09-29 01:10:00 1698

原创 海量数据序列化协议Protobuf应用及核心源码分析

Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,或者说序列化。它很适合做数据存储或 RPC 数据交换格式。可用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化结构数据格式。这里是Protobuf的官方手册 https://developers.google.cn/protocol-buffers/docs/over...

2020-09-28 10:09:30 1215

原创 LinkHashMap与LRU

Android 为我们提供了 LruCache 类,LruCache提供了一种使用LRU缓存的数据结构,里面本质还是对LinkedHashMap的封装。如果你深入研究 LinkedHashMap 的实现原理,就会发现其中就用到了双向链表这种数据结构。LRU (Least Recently Used) 的意思就是近期最少使用算法,它的核心思想就是会优先淘汰那些近期最少使用的缓存...

2020-09-22 23:26:30 1159

原创 观察者模式

有一个设计模式帮助你的对象知悉现状,不会错过该对象感兴趣的事情,甚至在对象运行时可决定是否要继续被通知,观察者模式是JDK中使用最多的设计模式之一,非常有用。无论是在JDK还是Android开发当中,我们很容易发现观察者模式的运用之处,如我们经常遇到的点击事件,通过Button控件的诸如Listener 的方法,onClickListener就是观察/订阅到了按钮的点击事件,...

2020-09-19 09:01:35 1047 1

原创 Jsoup实战(正方教务系统爬取)

其实很人都以为Python才可以做爬虫,其实C++与Java照样也是可以的,因为爬虫的原理很简单,无非就是分析HTTP(s)请求,然后通过代码模拟浏览器去发起请求,对于发起网络请求框架的我选择的是Apache的OKHttp,毕竟自己手动拼接HTTP请求体还是工作量比较大的一个事情。拿到网页后就需要解析网页关键内容,此时Jsoup就发挥作用了,通过节点选择器 + 表达式可以很方...

2020-08-19 14:09:00 1193

原创 基于Netty实现PRC框架

RPC全称Remote Procedure Call,即远程过程调用,对于调用者无感知这是一个远程调用。目前流行的开源 RPC 框架有阿里的Dubbo、Google 的 gRPC、Twitter 的Finagle 等。本次RPC框架的设计主要参考的是阿里的Dubbo,这里Netty 基本上是作为架构的技术底层而存在的,主要完成高性能的网络通信,从而实现高效的远程调用。D...

2020-07-10 16:00:00 1203

原创 Netty编码实战与Channel生命周期

本次将搭建一个最简单的Hello Netty服务器,并且通过这个简单的示例了解了Channel的生命周期。最后将基于Netty搭建一个Websocket网页聊天小程序,可以使用户在Web浏览器或者移动端浏览器进行消息的收发,来深入体会一下使用Netty编码NIO服务器是多么便捷。Hello Netty服务器构建一对主从线程组定义服务器启动类为服务器设置Channe...

2020-07-03 01:19:20 1261

原创 Netty的Reactor线程模型

Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步事件驱动的网络应用程序框架,用于快速开发可...

2020-07-02 03:19:20 1062 1

原创 谈谈京东的服务框架

最近由于在实习期间接触到了京东的自研服务框架JSF,简称“杰夫”,目前我写的一些新功能里面调用的下游接口就是杰夫提供的。现有有很多高效的服务框架,如阿里巴巴的Dubbo配合Apache的ZooKeeper,那么为什么京东却自研了JSF服务框架呢?于是看了看京东的JSF的演化历史,不得不感叹好的架构果然不是一朝一夕就能实现的,都是逐步演变而来的。一、Dubbo与Zooke...

2020-06-28 07:19:20 2010

原创 RabbitMQ学习

本篇文章主要介绍了RabbitMQ这种消息队列,从消息队列的概念、应用场景、安装方式到它的核心概念、五种工作模式。在安装的时候推荐使用Docker方式进行安装。重点需要理解的就是消息队列的应用场景、核心概念和RabbitMQ的五种工作模式,其中用的比较多的就是发布订阅模式、主题模式。Message Queue队列(Queue)是一种常见的数据结构,其最大的特性就是先进先...

2020-06-23 07:19:20 1017

原创 Spring Cloud Bus自动刷新配置

在之前的文章中,我讲述了统一配置中心(服务端和客户端)的基本使用,并且演示了从配置Git仓库到拉取配置的整个流程,请见《统一配置中心》这篇博客。在该博客中我们说到了,统一配置中心还有个好处就是动态更新配置文件,而无需手动重启服务,但是并没有演示或者实现。本文将记述如何通过Spring Cloud Bus自动刷新配置,以及自动刷新的原理。自动刷新配置原理实现配置的自动刷新...

2020-06-17 05:25:00 1064

原创 统一配置中心

我们之前做单体应用的时候是直接把配置写在application.yml中,但是如果是采用微服务架构的模式进行开发,这样的方式会存在哪些问题呢?首先维护困难、安全因素、更新配置时项目需要重启等等。针对这些问题,本文主要讲述的就是Spring cloud config这个组件,使用该组件可以很好的处理如下问题。原始做法的缺陷1、维护困难:假如一个服务,由多人开发,其中A在开...

2020-06-17 01:25:00 1301

原创 Feign与项目多模块

本篇文章主要是记录了Feign的使用方式,并且重点讲述了使用Maven构建多模块项目,从而更好地适应微服务架构的软件开发模式。在服务调用的场景中,我们经常调用基于HTTP协议的服务,Feign封装了Http调用流程,更适合面向接口化的变成习惯。Feign底层使用了Ribbon作为负载均衡的客户端,而有关Ribbon的负载均衡的实现请见《RestTemplate与负载均衡器》。...

2020-06-16 04:25:00 1626

原创 RestTemplate与负载均衡器

本文主要是介绍SpringCloud构建微服务系统的Ribbon负载均衡器和网络请求框架RestTemplate,另外将会分析负载均衡器的源码,通过实例证明如何通过Ribbon和RestTemplate相结合实现负载均衡。现在假设有一个分布式系统,该系统由在不同计算机上运行的许多服务组成。当用户数量很大时,通常会为服务创建多个副本。每个副本都在另一台计算机上运行,此时有助于在...

2020-05-15 10:25:00 1256

原创 服务拆分方法论

微服务是当下非常热门的话题,微服务发展到现在,已经不再单单局限于微服务架构本身,还与容器化、DevOps等新的理念相结合,成为当前移动互联网时代最先进的业务架构解决方案,能更好地迎合移动互联网业务快速迭代的要求。 本篇文章中我主要探讨的是什么时候适合微服务改造,如何做服务拆分等问题。微服务适用场景这些年关于服务拆分的理论层出不穷,在我看来我们首先需要搞明白起点和终点,然...

2020-05-14 10:25:00 1299

原创 软件工程方法之DevOps

我们经常看到DevOps这个词,那么DevOps究竟是什么呢?DevOps 是一种软件开发方法。它将持续开发、持续测试、持续集成、持续部署和持续监控贯穿于软件开发的整个生命周期。当前几乎所有的顶尖公司均采用了该方法,用以提高软件开发质量,并缩短软件开发生命周期。从而以达到每个公司对软件产品的期望,交付出客户最满意的产品。 什么是瀑布模型在了解DevOps之前,我们先看一...

2020-05-14 00:25:00 1351

原创 Eureka的高可用

Eureka是Netfilx开源的服务发现组件,本身是一个基于REST的服务。它包含EurekaServer和EurekaClient两部分,SpringCloud将它集成在子项目Spring Cloud Netfilx中,实现了微服务的注册与发现。 Eureka作为服务注册中心对整个微服务架构起着最核心的整合作用。 Eureka简单来讲就是Netflix开源的一款提供服务注...

2020-05-13 00:25:00 1215

原创 自定义SpringBootStarter

在日常使用SpringBoot的开发中,我们想要引入某个组件,几乎都是直接引入一个SpringBootStarter就完事,什么配置文件大发布分省略甚至是完全省略的。在前面的文章中,我们分析了SpringBoot的具体启动流程《 SpringBoot启动流程探究 》、以及SpringBoot自动配置的原理 《 SpringBoot自动配置原理 》 。通过这两篇文章其实很容易弄...

2020-05-05 00:25:00 1082

原创 Spring如何解决循环依赖

Spring如何解决循环依赖是经常会被面试官问到的一个问题,这个问题算是关于Spring的一个高频面试题,因为如果不刻意研读,相信即使读过源码,面试者也不一定能够一下子思考出其中的原理。本文主要针对这个问题,从源码的角度对其实现原理进行讲解,彻底搞懂Spring究竟是如何解决循环依赖的。循环依赖问题循环依赖就是循环引用,指两个或多个bean互相持有对方,比如说TestA...

2020-04-28 00:25:00 1033

原创 SpringBoot启动流程探究

Spring的丰富生态备受开发者青睐,尤其是自从SpringBoot出现之后去掉了原来的复杂配置,因为SpringBoot的理念就是约定大于配置,这让我们省去了很多需要手动配置的过程,就拿SpringMVC来说吧各种XML配置直接劝退初学者,但是SpringBoot的易用性简直是成为了推广Spring生态的利器。本篇文章主要是结合SpringBoot的源码,来探究Spring...

2020-04-25 10:00:00 1093

原创 索引堆的实现与优化

在之前文章中记述了堆的实现(插入方式建堆、heapify方式建堆以及堆排序)《 堆的实现及其应用 》。今天来看看索引堆是个什么东西,对于我们所关心的这个数组而言,数组中的元素位置发生了改变。正是因为这些元素的位置发生了改变,我们才能将其构建为最大堆。 如果元素十分复杂的话,比如像每个位置上存的是一篇上万字的文章。那么交换它们之间的位置将产生大量的时间消耗。并且由于数组元素的位...

2020-04-24 10:00:00 1020

原创 什么是可中断锁

Lock是可中断锁,而synchronized不是可中断锁。现假设线程A和B都要获取对象O的锁定,假设A获取了对象O锁,B将等待A释放对O的锁定,如果使用synchronized,如果A不释放,B将一直等下去,不能被中断;如果使用ReentrantLock,如果A不释放,可以使B在等待了足够长的时间以后,中断等待,而干别的事情。获取锁超时机制还是属于不可中断,属于超时被动放弃...

2020-04-23 10:00:00 2791

原创 JDK11新特性

Oracle官方于2018年9月26日宣布Java11正式发布。目前Oracle 官方也已经宣布Java11正式可以商用,这是Java 大版本周期变化后的第一个长期支持版本,非常值得关注。最新发布的Java11一共包含17个JEP(JDK Enhancement Proposals,JDK 增强提案)。对于企业来说,选择Java11将意味着长期的、可靠的、可预测的技术路线图。...

2020-04-17 10:00:00 941

原创 JDK9新特性(二)

在上一篇的文章我记述了JDK9的两个最重要的特性:一个是模块化,一个是jShell。另外就是String底层存储结构和StreamAPI的一些改动与优化。本次要记述主要的特性是全新的多分辨率图像API、全新的HTTP客户端API(其实是借鉴OkHTTP的框架,或者说是整合吧)、Deprecated相关API、智能Java编译工具与动态编译器、统一的JVM日志系统、javado...

2020-04-16 10:00:00 579

原创 JDK9新特性(一)

Java8在2014年3月份推出的,而历经曲折的Java9终于终于在2017年9月21日发布,中间历经3年多时间,Java9提供了超过150项新功能特性,包括备受期待的模块化系统、可交互的 REPL 工具:jshell,JDK 编译工具,Java 公共 API 和私有代码,以及安全增强、扩展提升、性能管理改善等。可以说Java 9是一个庞大的系统工程,完全做了一个整体改变。J...

2020-04-15 10:00:00 655 1

原创 JDK8新特性

虽然已经用过了一些Java8的新特性,但是总来没有仔细总结一下。Java8自从2014年就发布了,到目前为止只有一小部分公司在用JDK7及其以下的版本,大部分已经迁移至Java8,甚至Java11(关于Java9和Java11的特性我会在之后两篇文章中记述),目前只看Java8那些最主要的、也是最常用的新特性,我到目前为止用到的最多的也就是Stream API和Lambda表...

2020-04-14 10:00:00 632

原创 堆的实现及其应用

本篇文章记述的是堆排序,这个名字看起来好像又要介绍一个排序算法,但是排序算法是次要的,主要的是一个数据结构——堆。堆排序问题就是堆这种数据结构所衍生出来的一个应用,我们先了解一下优先队列的概念。普通的队列就是满足先进先出、后进后出的一个结构。那么优先级队列呢?出队顺序和入队顺序无关,和优先级相关,这就比如在医院看病,肯定是急诊病人优先看病。优先级队列的应用在操作系统中就...

2020-04-13 10:00:00 626

原创 注解的原理与实现

注解这个东西自从SpringBoot以来一直是Java开发者们必备的生存技巧呀,我们平时几乎大部分时间都是面向注解编程,通过注解我们可以节约大量的时间。用过了这么多的注解,那么我们否有关注过注解的实现原理呢?所以本篇文章主要是讲述注解的有关操作,自己实现一个注解来体会注解的实现原理,注解也不是特别高深的东西,掌握了自然就明白了。注解的基本原理注解本来的意思就是用来做标注...

2020-04-12 10:00:00 1726

原创 关于快排和归并的思考

归并排序和快速排序是两种稍微复杂的排序算法,它们用的都是分治的思想,代码都通过递归来实现,过程非常相似。归并排序算法是一种在任何情况下时间复杂度都比较稳定的排序算法,这也使它存在致命的缺点,即归并排序不是原地排序算法,空间复杂度比较高,是 O(n)。正因为此它也没有快排应用广泛。快速排序算法虽然最坏情况下的时间复杂度是 O(n²),但是平均情况下时间复杂度都是 O(nlogn...

2020-04-11 10:00:00 635

原创 快速排序及其优化

快速排序(Quick Sort)被称为20世纪对世界影响最大的算法之一,现在我们来看快速排序算法,习惯性把它简称为快排,快排利用的也是分治思想。乍看起来,它有点像归并排序,但是思路其实完全不一样。现在,我们先来看下快排的核心思想,最后将讲述快速排序的两个优化方案,其实还有一种三路快排的优化方案也是可以的,但是本片文章重点在于快速排序的原理和实现,所以三路快排的优化方案不会出现...

2020-04-10 10:00:00 574

原创 O(nLogn)的归并排序

之前几篇文章我介绍了三种O(n²)的排序算法《O(n²)的三个排序算法》(选择排序、插入排序和冒泡排序)以及它们的优化,然后顺便还写了一篇希尔排序的文章《插入排序的优化之希尔排序》,但是其实用的比较多的还是直接插入排序,它们比较适合于小规模数据的排序 。下面我将记录时间复杂度为nlog(n)的几种排序算法之一 —— 归并排序算法,这种排序算法适合大规模的数据排序,比之前的O(...

2020-04-09 10:00:00 627

原创 插入排序的优化之希尔排序

希尔排序是插入排序的一种,又称缩小增量排序,是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法,可以说它是插入排序的高级版。我们可以先回顾一下直接插入排序的过程:排序前将第一个元素看成有序的数列第1趟排序后:得到一个长度为2的有序数列第2趟排序后:得到一个长度为3的有序数列第3趟排序后:得到一个长度为4的有序数列……..每趟插入排序,都可以将一个...

2020-04-09 03:00:00 522

Captuocr.zip

Mac下的开源OCR方案!可以使用百度OCR的AK/SK,来完成截图文字识别!Mac下的开源OCR方案!可以使用百度OCR的AK/SK,来完成截图文字识别!Mac下的开源OCR方案!可以使用百度OCR的AK/SK,来完成截图文字识别!

2020-12-14

STL3.0源码

STL3.0的源码,解压即用

2018-12-15

LinuxC常用函数手册

LinuxC常用函数手册LinuxC常用函数手册LinuxC常用函数手册LinuxC常用函数手册

2018-04-16

安卓系统上层应用源代码

这个包含了所有安卓系统的所有上层源代码,其中有打电话的功能电话拨号器,相册,是系统相册,还有文件管理方面的东西,这个包含了所有安卓系统的所有上层源代码,其中有打电话的功能电话拨号器,相册,是系统相册,还有文件管理方面的东西,这个包含了所有安卓系统的所有上层源代码,其中有打电话的功能电话拨号器,相册,是系统相册,还有文件管理方面的东西,

2017-09-20

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

TA关注的人

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