沉淀再出发:关于IntelliJ IDEA使用的一些总结 一.前言 在使用IDEA的时候我们会发现,如果我们先写了一个类的名字,而没有导入这个类的出处,就会提示出错,但是不能自动加入,非常的苦恼,并且也不会提示代码的定义和来源,这些都需要我们进行设置. 二.一些简单问题的设置 2.1.对于鼠标移到代码上没有提示的解决办法    我们打开File->settings->editor->general,然后找到下面的当鼠标移动到的时候显示文档信息,这样就可以了. 2.2.使用idea的时候,…
沉淀再出发:dubbo的基本原理和应用实例 一.前言 阿里开发的dubbo作为服务治理的工具,在分布式开发中有着重要的意义,这里我们主要专注于dubbo的架构,基本原理以及在Windows下面开发出来的实例来解释和介绍,从而使得dubbo不再神秘. 二.dubbo的架构和原理 2.1.dubbo的架构 Dubbo框架设计一共划分了10个层,而最上面的Service层留给实际想要使用Dubbo开发分布式服务的开发者实现业务逻辑的接口层.左边淡蓝背景的为服务消费方使用的接口,右边淡绿色背景的为服务提…
沉淀再出发:spring boot的理解 一.前言 关于spring boot,我们肯定听过了很多遍了,其实最本质的东西就是COC(convention over configuration),将各种框架组装起来,省去了我们配置各种框架的时间,是一种更高层次的封装和抽象,正如maven整合了很多的jar包一样,spring boot整合了很多的框架和操作,我们只需要简单的加载进来就可以使用了,这极大地方便了我们的程序开发效率. 二.spring boot的使用 2.1.Spring Boot核心…
沉淀再出发:IoC和AOP的本质 一.前言 关于IoC和AOP这两个概念,如果我们没有深入的理解可以说是根本就不理解Spring这个架构的,同样的由Spring演变出来的Spring Boot和Spring Cloud,以及Spring MVC,我们就更不能说得上理解了.可以说控制反转和面向切面编程是Spring中最精髓的部分,本质都是为了松耦合,使得我们的代码能够从繁杂的工作之中抽离出来,只关注最重要的部分,不做重复的事情,而要做到这一点,我们需要的就是一个xml文件而已,理解了这一点,我们就…
沉淀再出发:再谈java的多线程机制 一.前言 自从我们学习了操作系统之后,对于其中的线程和进程就有了非常深刻的理解,但是,我们可能在C,C++语言之中尝试过这些机制,并且做过相应的实验,但是对于java的多线程机制以及其中延伸出来的很多概念和相应的实现方式一直都是模棱两可的,虽然后来在面试的时候可能恶补了一些这方面的知识,但是也只是当时记住了,或者了解了一些,等到以后就会变得越来越淡忘了,比如线程的实现方式有两三种,线程池的概念,线程的基本生命周期等等,以及关于线程之间的多并发引起的资源的抢占…
沉淀再出发:用python画各种图表 一.前言 最近需要用python来做一些统计和画图,因此做一些笔记. 二.python画各种图表 2.1.使用turtle来画图 import turtle as t #turtle库是python的内部库,直接import使用即可 import time def draw_diamond(turt): for i in range(1,3): turt.forward(100) #向前走100步 turt.right(45) #海龟头向右转45度 turt…
沉淀再出发:在python3中导入自定义的包 一.前言 在python中如果要使用自己的定义的包,还是有一些需要注意的事项的,这里简单记录一下. 二.在python3中导入自定义的包 2.1.什么是模块.包.库? 模块:就是.py文件,里面定义了一些函数和变量,需要的时候就可以导入这些模块.  包:在模块之上的概念,为了方便管理而将文件进行打包.包目录下第一个文件便是 __init__.py,然后是一些模块文件和子目录,假如子目录中也有 __init__.py,那么它就是这个包的子包了.  库:…
沉淀再出发:java中的equals()辨析 一.前言 关于java中的equals,我们可能非常奇怪,在Object中定义了这个函数,其他的很多类中都重载了它,导致了我们对于辨析其中的内涵有了混淆,再加上和“==”的比较,就显得更加的复杂了. 二.java中的equals() 2.1.Object.java中的equals()     让我们来看一下Object.java中的equals().     首先是Object的定义: /* * Copyright (c) 1994, 2012, O…
沉淀再出发:web服务器和应用服务器之间的区别和联系 一.前言 关于后端,我们一般有三种服务器(当然还有文件服务器等),Web服务器,应用程序服务器和数据库服务器,其中前面两个的概念已经非常模糊了,但是在很多场合下面还是非常有用的,因此我们来辨析一下. 二.web服务器和应用服务器之间的区别和联系 2.1.大范围的划分     关于Kerstrel是否web容器,有两种观点: . 由于Kerstrel不提供编写应用的框架,所以它不是容器:asp.net core才是容器,因为它提供了开发应用的框…
沉淀再出发:jetty的架构和本质 一.前言 我们在使用Tomcat的时候,总是会想到jetty,这两者的合理选用是和我们项目的类型和大小息息相关的,Tomcat属于比较重量级的容器,通过很多的容器层层包裹提供了非常强大的web功能,但是可以自我定制的余地就非常小了,有的时候我们希望自己设计更多的请求接收,处理和返回的环节,就可以用更加轻量级的jetty了. 二.jetty的架构和原理 2.1.Jetty 的基本架构 Jetty 是一个Servlet 引擎,它的架构比较简单,是一个可扩展性和非常…
沉淀再出发:OpenStack初探 一.前言 OpenStack是IaaS的一种平台,通过各种虚拟化来提供服务.我们主要看一下OpenStack的基本概念和相应的使用方式. 二.OpenStack的框架和使用 2.1.OpenStack简介 OpenStack是一个由NASA(美国国家航空航天局)和Rackspace合作研发并发起的,以Apache许可证授权的自由软件和开放源代码项目.OpenStack是一个开源的云计算管理平台项目,由几个主要的组件组合起来完成具体工作.OpenStack支持几…
沉淀再出发:Spring的架构理解 一.前言 在Spring之前使用的EJB框架太庞大和重量级了,开发成本很高,由此spring应运而生.关于Spring,学过java的人基本上都会慢慢接触到,并且在面试的时候也是经常遇到的,因为这个技术极大地方便了我们的开发和部署,并且由此衍生出来的框架和思想在很多地方都有使用,比如Spring mvc,Spring boot,Spring cloud等等框架以及IoC和AOP这两个Spring最本质的思想.可以说一切的本质都是为了高内聚,松耦合,将不同的事物…
沉淀再出发:Bean,JavaBean,POJO,VO,PO,EJB等名词的异同 一.前言 想必大家都有这样的困惑,接触的东西越多却越来越混乱了,这个时候就要进行对比和深入的探讨了,抓住每一个概念背后的核心,才能彻底的解决问题,形成自己的理念和道理. 二.Bean,JavaBean,POJO,VO,PO,EJB等名词的比较 2.1.Bean Bean的中文含义是“豆子”,Bean的含义是可重复使用的Java组件.所谓组件就是一个由可以自行进行内部管理的一个或几个类所组成.外界不了解其内部信息和运…
沉淀再出发:kafka初探 一.前言 从我们接触大数据开始,可能绕在耳边的词汇里面出现的次数越来越多的就包括kfaka了.kafka的设计初衷是希望作为一个统一的信息收集平台,能够实时的收集反馈信息,并需要能够支撑较大的数据量,且具备良好的容错能力.kafka是一个分布式消息队列,具有高性能.持久化.多副本备份.横向扩展能力.生产者往队列里写消息,消费者从队列里取消息进行业务逻辑.一般在架构设计中起到解耦.削峰.异步处理的作用. 二.kafka的使用 2.1.安装jre和zookeeper 在安…
沉淀再出发:java中注解的本质和使用 一.前言 以前XML是各大框架的青睐者,它以松耦合的方式完成了框架中几乎所有的配置,但是随着项目越来越庞大,XML的内容也越来越复杂,维护成本变高.于是就有人提出来一种标记式高耦合的配置方式——注解.方法上可以进行注解,类上也可以注解,字段属性上也可以注解,反正几乎需要配置的地方都可以进行注解.关于注解和XML两种不同的配置模式,争论了好多年了,各有各的优劣,注解可以提供更大的便捷性,易于维护修改,但耦合度高,而XML相对于注解则是相反的.追求低耦合就要抛…
沉淀再出发:Tomcat的实现原理 一.前言 在我们接触java之后,相信大家都编写过服务器程序,这个时候就需要用到Tomcat了.Tomcat 服务器是一个开源的轻量级Web应用服务器,在中小型系统和并发量小的场合下被普遍使用,是开发和调试Servlet.JSP 程序的首选. 二.Tomcat的基本原理 2.1.Tomcat的架构 Tomcat主要组件:服务器Server,服务Service,连接器Connector.容器Container.   连接器Connector和容器Containe…
沉淀再出发:jvm的本质 一.前言 关于jvm,使用的地方实在是太多了,从字面意思上我们都能明白这也是一个虚拟机,那么其他的虚拟机都会用来运行别的操作系统的,而jvm却是实现了可以在不用的操作系统之上运行同样的字节码文件,以此来实现代码的可移植性,大家可以看一下编译原理,就知道了jvm运行代码的本质其实是根据不同的平台将字节码文件(中间代码)变成最终适合不同平台的机器码.同时jvm中也有很多的概念,肯定也是和编译系统相关的了,数据和代码如何存储,数据分为哪几种数据,需要什么格式存储,堆栈等等,以…
沉淀再出发:java的文件读写 一.前言 对于java的文件读写是我们必须使用的一项基本技能,因此了解其中的原理,字节流和字符流的本质有着重要的意义. 二.java中的I/O操作 2.1.文件读写的本质 概念框架: 方式: 字节流 Byte 和 字符流 Char 方向: 输入 Input 和 输出 Output : 读 Reader 和 写 Writer 源: 字符串 String, 数组 Array, 对象 Object, 文件 File, 通道 Channel, 管道 Pipe, 过滤器 F…
沉淀再出发:java中线程池解析 一.前言 在多线程执行的环境之中,如果线程执行的时间短但是启动的线程又非常多,线程运转的时间基本上浪费在了创建和销毁上面,因此有没有一种方式能够让一个线程执行完自己的任务之后又被重复使用呢?线程池的出现就是为了解决这个问题.到了现在,我们知道的池已经有很多了,比如IP池,在NAT协议中使用,比如缓存机制,其实本质上就是重复利用已经产生的资源,从而减少对新资源的使用,以此来缓解对内存和CPU的压力,或者加快执行的效率. 二.线程池的基本理解 2.1.线程池的概念…
沉淀再出发:java中的HashMap.ConcurrentHashMap和Hashtable的认识 一.前言 很多知识在学习或者使用了之后总是会忘记的,但是如果把这些只是背后的原理理解了,并且记忆下来,这样我们就不会忘记了,常用的方法有对比记忆,将几个易混的概念放到一起进行比较,对我们的学习和生活有很大的帮助,比如hashmap和hashtab这两个概念的对比和记忆. 二.HashMap的基础知识 2.1.HashMap的介绍 HashMap 是一个散列表,它存储的内容是键值对(key-val…
沉淀再出发:如何在eclipse中查看java的核心代码 一.前言   很多时候我们在eclipse中按F3键打算查看某一个系统类的定义的时候,总是弹出找不到类这样的界面,这里我们把核心对应的代码加进去就可以了. 二.解决办法  2.1.打开配置    首先我们打开windows->preferences->java->install jres,在弹出的界面中选中并编辑:      然后选中rt.jar包,增加依赖: 2.2.添加代码文件 那么这个依赖在哪里呢,其实我们仔细查找就会发现,…
沉淀再出发:关于java中的AQS理解 一.前言 在java中有很多锁结构都继承自AQS(AbstractQueuedSynchronizer)这个抽象类如果我们仔细了解可以发现AQS的作用是非常大的,但是AQS的底层其实也是使用了大量的CAS,因此我们可以看到CAS的重要性了,但是CAS也是有缺陷的,但是在大部分使用的情况下,我们往往忽略了这种缺陷. 二.AQS的认识 2.1.AQS的基本概念 AQS(AbstractQueuedSynchronizer)就是抽象的队列式的同步器,AQS定义了…
沉淀再出发:java中的CAS和ABA问题整理 一.前言 在多并发程序设计之中,我们不得不面对并发.互斥.竞争.死锁.资源抢占等等问题,归根到底就是读写的问题,有了读写才有了增删改查,才有了所有的一切,同样的也有了谁读谁写,这样的顺序和主次问题,于是就有了上锁,乐观锁和悲观锁,同步和异步,睡眠和换入换出等问题,归根到底就是模拟了社会上的分工协作与资源共享和抢占,要理解好这些现象的本质,我们需要更加深刻地进行类比和辨析,要知道这些内容的本质就是内存和CPU之间的故事,有的时候还会有一些外存或者其他…
沉淀再出发:关于netty的一些理解和使用 一.前言 Netty是由JBOSS提供的一个java开源框架.Netty提供异步的.事件驱动的网络应用程序框架和工具,用以快速开发高性能.高可靠性的网络服务器和客户端程序.也就是说,Netty 是一个基于NIO的客户.服务器端编程框架,使用Netty 可以确保你快速和简单的开发出一个网络应用,例如实现了某种协议的客户.服务端应用.Netty相当于简化和流线化了网络应用的编程开发过程,例如:基于TCP和UDP的socket服务开发.“快速”和“简单”并不…
沉淀再出发:mongodb的使用 一.前言 这是一篇很早就想写却一直到了现在才写的文章.作为NoSQL(not only sql)中出色的一种数据库,MongoDB的作用是非常大的,这种文档型数据库,其实本质上的增删改查操作,封装的都和sql差不多了,最重要的确实其中代表的理念和设计的初衷,可以说NoSQL是对sql的一种有益的补充,同时也提升了我们对于一次写入多次读取的数据的查询能力,这种能力在大数据时代是非常有用的,可以说我们每天操作的应用程序之中,有百分之九十多的都是读的操作,而剩下的才是…
沉淀再出发:ElasticSearch的中文分词器ik 一.前言   为什么要在elasticsearch中要使用ik这样的中文分词呢,那是因为es提供的分词是英文分词,对于中文的分词就做的非常不好了,因此我们需要一个中文分词器来用于搜索和使用. 二.IK分词器的安装和使用   2.1.安装ik    我们可以从官方github上下载该插件,我们下载对应于我们使用的es的版本的ik,并且我们能够看到具体的安装步骤,可以有两种安装方法.      这里我们选择第一种方式:    重启es,我们就可…
沉淀再出发:ELK使用初探 一.前言 ELK是Elasticsearch.Logstash.Kibana的简称,这三者是核心套件,但并非全部. 最近ElasticSearch可以说是非常火的一款开源软件了,自从上市之后,有了更大更远的场景,它最本质的作用就是为公司内部或者一个小的范围之内的系统提供搜索引擎的检索技术,使得检索可以更加的精细化和自动化,相比于其他的软件,es有着更加强大和简易的平台和使用方式,可以快速搭建出我们想要的搜索平台,因此受到了大家广泛的欢迎.Elasticsearch是实…
沉淀再出发:使用python进行机器学习 一.前言 使用python进行学习运算和机器学习是非常方便的,因为其中有很多的库函数可以使用,同样的python自身语言的特点也非常利于程序的编写和使用. 二.几个简单的例子 2.1.使用python实现KNN算法 ######################################### # kNN: k Nearest Neighbors # Input: newInput: vector to compare to existing dat…
沉淀再出发:redis的安装和使用 一.前言 下面让我们看看Redis这个键值对内存数据库的使用方法和相关注意事项. 二.Redis的安装和使用 2.1.Redis的定义 REmote DIctionary Server(Redis) 是一个由Salvatore Sanfilippo写的key-value存储系统.Redis是一个开源的使用ANSI C语言编写.遵守BSD协议.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API.它通常被称为数据结构服务器,因…
沉淀再出发:xml的意义和存在的价值 一.前言 学习了那么多的语言.框架.语法和基础知识,我们对于数据的理解或许有了一定的认识,但是如何描述.包装.传输.存储数据的手法和流程我们了解的或许并不多,其中xml就是一种我们经常使用的用来传输和存储数据来描述信息的方法了. 二.xml的意义 2.1.xml简介 XML 指可扩展标记语言(eXtensible Markup Language),XML 被设计用来传输和存储数据.HTML 被设计用来显示数据. XML 指可扩展标记语言(EXtensible…