自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Java多线程入门

概述多线程在多核处理器上的并发能力往往比单线程程序更好,但是编写稳定可靠的多线程程序往往并非易事。所幸JDK提供了很多并发包,同时也有很多开箱即用第三方工具可供选择。作为开发人员,我们需要掌握一些多线程的核心知识。在这篇博客中我们主要了解多线程的基本概念和使用方法。使用场景当需要运行不希望阻塞主线程的任务时,我们可以考虑另起一个线程。比如Android开发中的消息发送,Web后端开发中...

2019-10-05 21:13:15 207

原创 代码之禅

在写代码和维护项目的时候,如果没有一个很好的代码编写习惯,很容易会写出各种诡异bug,维护也异常困难。本篇博客总结了我自己在写代码的心得,关键是通过设计和测试大幅度降低bug。持续更新中。。。设计篇原则1 单一职责这应该是最重要的原则了,不管是方法还是类,只做尽可能少的事情,比如:@Data@RequiredArgsConstructor@AllArgsConstructorp...

2019-09-05 15:31:28 337

原创 Java多线程之重入锁

Java多线程重入锁的搭档-ConditionCondition的功能类似于内部锁Synchronized下的Object.wait()和Object.notify(),主要用于可重入锁ReentrantLock的等待和唤醒public class ReentrantLockCondition implements Runnable { private static final Re...

2019-07-25 10:01:45 224

原创 Android仿今日头条图片滑动退出效果-Kotlin版

在下滑时,随着手指的移动,图片区域跟随移动,并且activity的背景和页码逐渐变的透明 滑动距离不超过设定的临界值时,会有回弹效果。 滑动超过设置的临界值时,放开手指,页面滑动退出消失 图片可以正常放大缩小,页面不跟随手指上下滑动 使用了共享元素的页面切换效果上代码class SlideCloseLayout(context: Context, attrs: AttributeS...

2019-06-18 14:58:52 875

转载 如何在github上贡献自己的代码

一:先从GitHub Fork 一份代码到自己的帐号中假设 pythonzhichan/DailyQuestion 就是我们将要给它贡献代码的开源项目,Fork完成后,可以在自己的 repositories 列表中看到该项目。二:Fork项目克隆到本地把Fork后的项目clone到本地,注意这里选择的是 “Use SSH”,而不是 “Use HTTPS”,或者在你push代码的时候...

2019-05-16 10:10:45 2708 1

原创 基于双向链表和HashMap的LRU算法实现

LRU算法往往在做内存管理的时候,我们使用LRU算法比较多,即Last Recently Used,最近最少使用原则,最早出现在Linux操作系统中。具体的实现思路是使用哈希链表存储键值对,我们可以基于双向链表和HashMap自己实现一个LRU缓存算法。具体的代码如下:package com.natsuki;import java.util.HashMap;/** * @Auth...

2019-05-12 13:17:14 903

原创 Java8新特性结合策略模式实现复杂条件判断

借助策略模式实现复杂条件判断逻辑策略模式实际命题一般解决方法策略模式解决方法扩展策略模式在23种设计模式当中,策略模式也是一个十分常用的模式。也许在写业务逻辑的过程中,我们可能需要根据不同的条件写一大堆的if和else条件语句,这直接造成的影响是可扩展性很差并且可读性也很差。而借助策略模式,我们可以写出扩展性很好的优雅代码。实际命题假如我们有这样一个需求,在设计商户打折系统中,要针对不同的...

2019-05-08 22:02:44 4830

原创 Typescript高级特性之交叉类型,联合类型,类型保护

Typescript已经是前端工程开发的必备利器和组件库开发的不二之选。在看源码的时候,经常会出现typescript的一些高级特性,比如交叉类型,联合类型和类型保护。适当使用这些特性能帮助我们更好的开发和阅读前端项目。交叉类型组合多个类型组成新的类型,新类型包含了原类型的所有属性interface ObjectConstructor { assign<T, U>(targ...

2019-04-30 13:37:36 6764

原创 RabbitMq的主要概念和使用方法

RabbitMq的主要概念和使用方法RabbitMq的安装rabbitmq在官网上有详细的安装步骤,支持mac,windows和linux系统的安装,默认的server运行端口为15672,默认的登录账户和密码均为guestRabbitMq的主要概念首先需要了解一下rabbitmq的原理图,每个连接都有很多回话通道providerProvider首先需要和rabbitmq进行连接,...

2019-02-17 19:35:50 232

原创 代理模式

代理模式代理模式是一个很重要的模式,在平时使用和框架设计上用的比较多。在Spring中AOP面向切片编程就使用了代理模式。代理模式替代了真实对象的直接访问,我们可以在代理方法中做一些增强和补充。代理模式的使用场景分为安全代理,屏蔽对真实角色的直接访问远程代理,通过代理类处理远程方法调用延迟加载,先加载代理对象,然后按需加载真实对象java代理模式的实现java代理模式分为...

2019-02-05 19:27:02 164

原创 原型模式,深浅拷贝

原型模式原型模式是一个比较简单的创建模式,在java中当需要创建大量对象的时候,为了提升效率和性能,我们可以使用原型模式原型模式一般和工厂模式配合使用,用来创建对象下面介绍java的原型模式实现过程Java的Object类中具有clone方法,这表示任何对象都可以实现克隆,如下所示package com.natsuki;import java.util.Date;/** * ...

2019-02-03 18:15:27 170

原创 工厂三兄弟设计模式

工厂模式工厂模式一般是负责创建对象的设计过程,在设计中可以分为三个子设计模式简单工厂模式工厂方法模式抽象工厂模式简单工厂模式简单工厂用的比较多,如果不使用简单工厂的话,客户端的依赖往往会比较多,比如创建汽车对象,可能会创建很多的汽车,UML图如下这里可以使用简单工厂来简化创建对象步骤,减少客户端对类的依赖,降低耦合。我们新建一个CarFactory类来创建不同的Car。...

2019-02-01 14:52:45 370

原创 单例模式

JS和Java的单例模式设计模式是一个必须要掌握的内容,就好像武学的固定招式一样,设计模式在使用中都有一些固定的套路,掌握好套路才能少走弯路。这一篇介绍一下简单但是使用频率比较高的单例模式javascript单例模式由于js是单线程的,不需要考虑多线程的单例实现情况,比较简单。我们可以通过闭包实现js的单例。详细代码如下class Singleton { constructor(...

2019-01-31 14:43:14 107

原创 docker学习之常用命令和基本使用

docker是一个相对于传统虚拟机更加轻量级的虚拟技术。我们在部署环境的时候往往需要耗费很多精力,也容易引起bug,这时候使用docker将极大地方便开发和部署,这里首先介绍docker的常用命令。镜像相关命令docker images该命令是查看docker的镜像,镜像即docker不同容器的源代码,或者可以看作是一个类或者模版,而容器则为一个个环境。镜像文件都放在docker的/v...

2019-01-21 20:14:09 500

原创 自己实现一个高性能的setTimeout和setInterval函数

自己实现一个高性能的setTimeout和setInterval函数浏览器默认提供的setTimeout和setInterval的问题requestAnimationFrame简单介绍setTimeout的实现setInterval的实现结语浏览器默认提供的setTimeout和setInterval的问题首先在针对浏览器端的默认实现中,setTimeout和setInterval的定时是不准...

2019-01-21 15:36:53 1266

原创 CentOS7下mysql8.x安装

网上很多都是错误的,这里简单记录一下安装过程和远程访问方法 从mysql的官网中下载mysql最新版(8.0.13)然后yum安装,修改root的密码 启动mysql服务 mysq -u root -p use mysql; update user set host='%' where user='root'; ALTER USER 'root'@'%' IDENTIFIED WIT...

2019-01-19 19:01:53 176

原创 Mycat介绍以及使用方法

先介绍几个概念1.数据库中间件Mycat 是数据库中间件,就是介于数据库与应用之间,进行数据处理与交互的中间服 务。从原有的一个库,被切分为多个分片数据库,所有的分片数据库集群构成了整个完整的数据库存储。2.逻辑库(schema)对实际应用来说,并不需要知道中间件的存在,业务开发人员只需要知道数据库的概念, 所以数据库中间件可以被看做是一个或多个数据库集群构成的逻辑库。3.逻辑...

2019-01-19 18:50:09 630

原创 在Tomcat中发布自己的web应用(集群形式)

项目打包完成后,往往需要在远程tomcat中部署自己的应用,在这里把主要的步骤记录下来。这里介绍的主要是集群形式,当然单机版也是一样的,只不过单机版只需要一个tomcat服务。1.配置 3 个 tomcat 的 tomcat-users.xml&lt;role rolename="admin-gui"/&gt;&lt;role rolename="admin-script"/&gt...

2019-01-19 08:57:59 585

原创 Nginx 应用与实践快速入门

Nginx占用内存少,并且并发能力强,可以用于做反向代理和静态服务器。Nginx的主要用途有:静态资源服务器 虚拟主机 反向代理服务器 负载均衡服务器其中Nginx做静态资源服务器在上篇博客中已经介绍过了,这里主要介绍虚拟主机、反向代理和负载均衡的实现 Nginx实现虚拟主机1.端口实现虚拟主机虚拟主机其实就是在一台服务器上可以实现对外提供多种服务,如下图所示物...

2019-01-18 18:45:32 172

原创 centOS7下安装和配置jdk8

首先下载jdk的安装包,然后解压之后复制到/usr/local中配置jdk的环境vi /etc/profile在文本的最后加上JAVA_HOME=/usr/local/java/jdk1.8.0_201PATH=$PATH:$JAVA_HOME/binCLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jarexp...

2019-01-16 14:48:40 127

原创 使用VMware Fusion配置centos7系统的静态网络

在做后端开发的时候,往往我们需要开启虚拟机模拟linux环境,VMware是一款很专业很强大的一款虚拟机,在虚拟机上安装CentOS系统之后,我们可以在虚拟系统中安装环境进行开发和调试。但是首先必须配置centOS系统的静态ip地址,这样才能通过ssh连接,并且对外发布服务,由于MAC版的配置比windows稍微复杂一些,这里简单记录一下配置过程。1.首先安装好centOS系统,然后确认虚...

2019-01-16 12:56:29 569

原创 Solr集群环境搭建

在做网站内搜索的时候,我们往往不会直接调用数据库进行搜索,这样数据库的负担很大而且性能低下。我们可以选择solr作为搜索工具,其中solr支持数据库数据导入,中文分词,以及分布式集群。当搜索并发不是很高,我们直接使用solr单机版就可以了,如学校和企业的门户网站等。但是当需要大规模,容错和分布式索引时候,我们就需要使用solrCloud来满足需求。它有几个特点集中式的配置信息(借助zo...

2019-01-14 15:50:12 357

原创 Redis三主三从集群环境搭建以及java操作连接

Redis是非关系型数据库的一种,一般用于做高速缓存,从而降低数据库的读写压力。比如在电商首页中,图片轮播,信息展示,都是基于redis进行读取,然后在有效期过后再从数据库读取最新数据。三主三从结构指三个主Master的Redis服务和从属于Master的Slave的Redis服务,主服务主要负责数据写入操作,从服务负责数据读取操作,一共需要6台服务器。结构图如下 集群说明:...

2019-01-12 10:06:09 2281

原创 nginx在linux系统中的安装和简单使用

nginx是一个高性能的http和反向代理服务,也是一个IMAP/POP3/SMTP服务,可以用来做反向代理,负载均衡,http服务器nginx在linux的安装过程如下所示:1.安装nginx环境依赖yum install gcc gcc-c++yum -y install pcre-develyum install zlib-devel2. 上传Nginx安装包,创建ng...

2019-01-09 18:45:00 295 1

原创 FTP服务器在linux上的安装步骤

传统的Tomcat服务器在处理上传图片的时候,一般是直接放在toncat管理的文件中,这样当多个服务器做集群的时候,图片可能就访问不到了。所以需要将图片保存到一个公用的位置,用户上传图片的时候通过ftp协议上传图片,而用户访问图片的时候通过http协议访问图片。具体的访问和操作过程如下图。这里介绍ftp服务器在linux系统上的安装步骤。 1.安装vsftpd,输入命令yum i...

2019-01-09 17:11:47 254

原创 用es6实现一个简单的promise

promise是一个面试经常会问的问题,在这里我们可以通过es6的语法实现一个简单的promise,面试能写出来基本就没问题了const PENDING = 'pending';const RESOLVED = 'resolved';const REJECTED = 'rejected';class MyPromise { constructor(fn) { ...

2019-01-04 14:13:57 223

原创 leecode题解,实现一个简单的栈结构

栈是一个很重要的数据结构,在计算机应用里也经常能看到栈的身影,比如location的路由,push、pop操作对前端朋友不陌生吧 符号匹配 标签匹配,比如html标签 函数调用,比如递归为什么调用顺序和返回顺序是相反的在leecode里,有这样一道有意思的题,原题是这样的:Given a string containing just the characters '(', ')'...

2019-01-03 13:44:11 212

原创 jdk8源码中hashmap的简单分析

你能说一说为什么实现equals方法的时候需要实现hashcode吗,读过hashmap的源码吗面试的时候面试官可能会问你hashmap的实现原理,在这里我以一种简单而形象的表达说一下hashmap的主要实现。首先,让我们联想一下hashmap的结构,这里可以先给一张结构图可以看到hashmap里面的主要存储结构是table数组,数组里面存放的可以是单一的节点,也可以是链表节点...

2018-12-30 16:59:32 129

原创 实现一个简单的LinkedList

今天把jdk1.8的LinkedList源码看了一下,发现使用的数据结构就是双向链表。自己也动手实现了一个简易版本的双向链表package com.natsuki.lesson2;/** * @Author: * @Date: 2018-12-29 * @Description: 自己根据双向链表定义一个简易linkedList */public class MyLinked...

2018-12-29 16:53:25 186

原创 使用java实现简单的单向链表

2年没有写博客了,主要这两年要么支教要么留学的,事情好多。。不过还好坚持下来了,编程也没有放弃最近看到了一篇Leetcode上的题目,原题是这样的:You are given two non-empty linked lists representing two non-negative integers. The digits are stored in reverse order a...

2018-12-28 15:35:53 330

原创 经典继承的小小不足以及想到的完善方法

之前写过经典继承的方法,它是综合利用了构造函数和原型链继承的优点打造的经典继承,在这里简单概括一下,见如下代码:(function () { function SuperTest(name, age) { this._name = name;//命名前加了_代表这是一个私有变量,不能在外界直接访问得到; this._age = age;

2016-01-14 18:33:23 335

原创 Javascript的块作用域和Java,C++的区别

首先开门见山,用一句话来概括,Javascript是没有块作用域的概念的,这是为什么呢,这听起来的确和其他的语言很不一样,上例子:window.onload = function () { outputNumber(4);};function outputNumber(count){ for(var i=0;i<count;i++){ document.wr

2016-01-12 23:17:52 347

原创 javascript的构造函数,原型和以其实现的经典继承

用javascript实现一个对象,一般最常用的方法是建立一个原型,单单依靠构造函数建立是不行的,比如:function Person(name,age,college){ this.name = name; this.age = age; this.college = college; this.sayName = functi

2016-01-12 13:50:09 388

原创 Javascript对象的数据属性和访问器属性

之前看了Javascript Dom编程艺术,在第二章对javascript的语法功能介绍较少,于是又开始看了Javascript高级程序设计,感觉这本真是很不错啊,对知识讲解的很详细,对我这个初学者来说,很有收获。不多说,先来谈谈对js类的体会,之前创建一个新类,赋予属性和方法,比如:var person=new Object(); person.name="xuzhiwei";

2016-01-10 15:08:30 262

空空如也

空空如也

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

TA关注的人

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