zhoucheng05_13的博客

私信 关注
Star_Ship
码龄5年

方向确定,继续前进。

  • 1,334,405
    被访问量
  • 163
    原创文章
  • 6,870
    作者排名
  • 317
    粉丝数量
  • 于 2015-11-01 加入CSDN
获得成就
  • 获得483次点赞
  • 内容获得379次评论
  • 获得494次收藏
荣誉勋章
兴趣领域
  • #算法
    #TensorFlow#推荐算法#集成学习
TA的专栏
  • 计算机网络学习笔记
    9篇
  • Java转C++之路——C++ 新人学习笔记
    3篇
  • 《剑指offer》Java语言实现
    7篇
  • Java(JDK1.9)集合框架源码阅读与归纳总结
    10篇
  • RabbitMQ官方tutorial学习笔记
    6篇
  • WEB——Spring
    19篇
  • WEB——SpringMVC
    26篇
  • WEB——Spring Security
    6篇
  • WEB——Tomcat
    1篇
  • WEB——SpringBoot
    7篇
  • WEB——Thymeleaf
    1篇
  • WEB——jsp
    10篇
  • WEB——搜索引擎
    1篇
  • WEB——前端
    5篇
  • WEB——struts易混点
    3篇
  • WEB——跨域访问
    2篇
  • 学习——学习方法
    1篇
  • 学习——常见问题
    20篇
  • 学习——反思总结
    9篇
  • 算法——分析
    10篇
  • 算法——密码学
    1篇
  • 算法——数据结构
    18篇
  • 语言——Java——基础
    30篇
  • 语言——Java——邮件发送
    2篇
  • 语言——Java——测试
    1篇
  • 语言——Java——高并发
    1篇
  • 语言——Java——日志
    3篇
  • 语言——C++——基础
    2篇
  • 语言——PHP——问题
    1篇
  • 数据持久化——数据库
    12篇
  • 数据持久化——Nosql
    2篇
  • 版本管理——Github快速入门
    7篇
  • 版本管理——SVN
    3篇
  • 操作系统
    3篇
  • 操作系统——Linux
    6篇
  • 操作系统——Linux——脚本
    2篇
  • 操作系统——Linux——工具
    5篇
  • 通用——设计模式
    4篇
  • 通用——网络基础
    9篇
  • 通用——负载均衡
    1篇
  • 通用——面试
    10篇
  • 通用——Docker
    1篇
  • 通用——消息队列
    6篇
  • 依赖管理——maven
    1篇
  • 其他——微信小程序
  • 最近
  • 文章
  • 资源
  • 问答
  • 课程
  • 帖子
  • 收藏
  • 关注/订阅

c++中为什么可以通过指针或引用实现多态,而不可以通过对象呢?

目录一、类对象的存储方式:二、无论通过对象还是指针,能使用的方法只与它们静态类型有关。三、 不同类型的指针有什么区别?四、 指针与引用来实现多态五、对象不能实现多态引言: 在c++中司空见惯的事情就是:可以通过指针和引用可以实现多态,而对象不可以。 那为什么?让我们来解开这神秘的暗纱!一、类对象的存储方式:在一个类的实例中,只会存放非静态的成员变量。 如果该类中存在虚函数的话,再多加一个...
转载
324阅读
0评论
0点赞
发布博客于 1 年前

linux下让vim自动识别文件编码的方法与相关属性说明

一、vim自动识别编码结论先行,fileencodings属性是我们编码自动识别的关键,我们可以通过修改自己vimrc中的fileencodings属性来达到永久自动识别编码的功能:[root@Dev ~/dev]$ cat ~/.vimrc[root@Dev ~/dev]$ vim ~/.vimrc[root@Dev ~/dev]$ cat ~/.vimrcset encoding=u...
转载
228阅读
0评论
0点赞
发布博客于 2 年前

awk合并文件实例以及命令解释

一、awk合并文件1.1 实例[root@tech tmp]# cat accounta|000002b|000001c|000003d|000004[root@tech tmp]# cat cdr000001|20000002|45000003|25000004|60要合并这两个文件,可以使用如下命令:awk -F | ‘NR==FNR { a[$1]=$2; next...
原创
180阅读
0评论
0点赞
发布博客于 2 年前

Unix Socket用法说明及实例演示(亲测有效)

转载自:https://www.cnblogs.com/skynet/archive/2010/12/12/1903949.html“一切皆Socket!”话虽些许夸张,但是事实也是,现在的网络编程几乎都是用的socket——有感于实际编程和开源项目研究。我们深谙信息交流的价值,那网络中进程之间如何通信,如我们每天打开浏览器浏览网页时,浏览器的进程怎么与web服务器通信的?当你用QQ聊天...
转载
950阅读
0评论
0点赞
发布博客于 2 年前

《Unix环境高级编程》学习笔记——高级IO

一、引言高级IO包含很多内容,如非阻塞IO、记录锁、IO多路转接(select和poll函数)、异步IO、readv和writev函数以及存储映射IO(mmap)等。二、非阻塞IO非阻塞IO使我们可以发出open、read和write这样的I/O操作,并使这些操作不会永远阻塞。它的特点是:进程轮询(重复)调用,消耗CPU资源。(阻塞式IO被阻塞时会挂起,不会消耗CPU资源)实现难度低...
原创
160阅读
0评论
1点赞
发布博客于 2 年前

微信小程序开发——刷新服务端验证码的方法

一、问题背景微信小程序中使用image标签来显示服务端验证码,代码如下:<image class='image-class' src="https://www.demo.com/a.png"></image>二、问题描述验证码在页面加载后可以正常显示,但无法点击,无法刷新。三、解决方案3.1 点击问题我们可以通过标签的bindtab属性来设置点击事件,代码...
原创
379阅读
0评论
1点赞
发布博客于 2 年前

《Unix环境高级编程》学习笔记——守护进程(daemon)

一、守护进程特征1.1 引例使用ps -axj命令显示系统进程中所有无控制终端进程的信息。ubuntu@VM-0-13-ubuntu:~$ ps -axj PPID PID PGID SID TTY UID COMMAND 0 1 1 1 ? 0 /sbin/init 0 2 0 0 ? 0 [...
原创
171阅读
0评论
1点赞
发布博客于 2 年前

《Unix环境高级编程》学习笔记——线程

1 线程创建创建一个线程,并在主线程和子线程中打印进程id、线程id。实例代码#include "apue.h"#include<pthread.h>pthread_t tdno;//打印进程id、线程idvoid printids(const char* s){ pid_t pid; pthread_t tid; pid = getpid(...
原创
72阅读
0评论
0点赞
发布博客于 2 年前

maven配置私服——setting.xml中profile无效

背景例如公司搭建了自己的maven私服,此时我们需要从私服获取依赖,那么在maven中如何使用指定的私服呢?方法尝试在百度了很多文章后,选择了一种说得比较多的方案,配置maven的profile:在maven的setting.xml中增加如下配置:<profiles> <profile> <id>nexus</id> &l...
原创
1719阅读
0评论
2点赞
发布博客于 2 年前

RabbitMQ——6、Topic 主题

Topic Exchange 主题交换机发送到主题交换器的消息不能有任意的routing_key——它必须是由点分隔的单词列表。例如quick.orange.rabbit,它的长度要求小于255个字节。当消息发送到交换机时,只有匹配bindingKey的队列会收到消息,匹配规则是:*代表1个单词#代表0个或多个单词如下图所示:quick.orange.rabbit将同时匹配Q1和...
原创
146阅读
0评论
0点赞
发布博客于 2 年前

RabbitMQ——5、路由Routing

一、binding绑定在上一节中我们已经见过绑定的例子了:channel.queueBind(queueName,EXCHANGE_NAME,"");绑定的作用是将特定队列链接到特定交换机上,可以简单地理解为:这个队列对该交换机的消息感兴趣。绑定可以携带一个额外的routingKey(或bindingKey)参数,即queueBind的最后一个“”参数:channel.queueBin...
原创
127阅读
0评论
0点赞
发布博客于 2 年前

RabbitMQ——4、发布与订阅

在前面的工作队列中我们创建了工作队列。工作队列背后的假设是每一项任务只会明确分配给一个工作者。在本节中我们将学RabbitMQ的发布、订阅模式,即一条消息会同时投递所有订阅者。一、Exchanges 交换器RabbitMQ消息传递模型的核心思想是,生产者永远不会将任何消息直接发送到队列。实际上,通常生产者甚至不知道消息是否会被传递到任何队列。在RabbitMQ中,生产者只能向exchang...
原创
94阅读
0评论
0点赞
发布博客于 2 年前

RabbitMQ——3、工作队列WorkQueue

一、概述The main idea behind Work Queues (aka: Task Queues) is to avoid doing a resource-intensive task immediately and having to wait for it to complete.Instead we schedule the task to be done later. 工...
原创
163阅读
0评论
0点赞
发布博客于 2 年前

RabbitMQ——2、HelloWorld

一、原理概述RabbitMQ is a message broker: it accepts and forwards messages.RabbitMQ中有3个重要概念:生产者、队列和消费者。生产者:用户应用程序,用于发送消息。队列:一块缓存,用于存储消息。消费者:用户应用程序,用于接收消息。二、引入依赖如果使用的是SpringBoot,那么只需引入一条starter依赖:...
原创
145阅读
0评论
0点赞
发布博客于 2 年前

RabbitMQ——1、安装

RabbitMQ的安装指的是RabbitMQ-server的安装,Server是生产者和消费者的桥梁,类似于邮局,用于存储和转发消息。在Ubuntu下安装RabbitMQ只需要执行几行命令即可.1 安装erlang语言由于rabbitMQ需要erlang语言的支持,因此需要首先安装erlang:apt-get install erlang-nox # 安装erlangerl ...
原创
105阅读
0评论
0点赞
发布博客于 2 年前

如何将项目打包为Docker镜像,并上传到注册服务器

一 将项目打包为Docker镜像我们可以使用Maven的Docker插件来将自己的项目打包成Docker镜像。该插件的代码仓库和说明在dockerfile-maven.总共需要3步即可将SpringBoot(maven)项目打包成Docker镜像,分别是:引入docker-maven-plugin插件、编写Dockerfile、mvn package。1.1 引入maven插件在项目的po...
原创
2810阅读
1评论
0点赞
发布博客于 2 年前

基于注解和纯Java的Mybatis动态SQL

背景Mybatis是当前最流行的持久化框架之一,它最大的一个优势就是支持动态SQL拼接。但当前网上的大部分教程都讲得是xml配置文件中动态SQL的使用方法,而基于注解和Java bean的说明却几乎没有。今天在花费了多个小时搜寻资料后,将用法记录下来以供查阅。实现方式我们可以通过Mybatis的4个Provider注解以及相应的Java类来实现无XML的Mybatis动态SQL。Provi...
原创
538阅读
0评论
0点赞
发布博客于 2 年前

基于异常及错误码的应用开发方式

背景在Web应用开发中,我们会编写很多的接口,这些接口需要和前端或者移动端合作。通常我们都会定义好交互的实体,例如后台接口的返回实体可能是这样的:public class Response{ int retCode; //返回码 0:正常 其他:错误码 String msg; //返回码的说明 String result; //json对象格式的返回数据}但这种...
原创
984阅读
0评论
0点赞
发布博客于 2 年前

发送邮件:SpringBoot+阿里云服务器+解决25端口禁用问题

一、背景在当下的大部分应用中,通过邮件来激活账号、更改密码、验证权限等场景都是不可或缺的,邮件发送的教程已经有很多了,但大多都是针对主流的邮箱和主流的服务器。在阿里云服务器中会存在一些不一样的问题。二、步骤要使用邮件服务器,总的来说需要3步:开通发送邮箱的SMTP服务,并获取授权码。在SpringBoot中增加邮件发送的配置。调用类库的相应方法发送邮件。三、开通发送邮箱的SMTP...
原创
1861阅读
0评论
2点赞
发布博客于 2 年前

HTTPS:SpringBoot配置HTTPS链接+腾讯云免费SSL证书

一、背景安全问题是一个应用从初生走向成熟的标志之一。随着各平台越来越严格的安全性要求(如苹果的应用商店、微信的小程序等要求必须使用HTTPS接入),网站的HTTPS化势在必行。二、接入要求要让一个服务接入HTTPS服务,至少需要以下几个步骤:购买权威机构的SSL证书将证书配置到服务器中(如启用SSL、绑定SSL端口等)。三、免费SSL证书功能齐全的SSL证书最低都是数千元每年,这...
原创
3264阅读
0评论
3点赞
发布博客于 2 年前

Linux中的tty、pty、pts与ptmx辨析

一、 tty(teletypes)1.1 ttytty设备包括虚拟控制台,串口以及伪终端设备。tty的种类有很多:其中,tty是当前进程的控制终端的设备特殊文件。可以通过如下方式验证:ubuntu@VM-32-73-ubuntu:/dev$ echo hello &amp;gt;/dev/ttyhello当我们将输出重定向到/dev/tty文件时,结果总会输出到当前终端上。1.2 tt...
原创
1416阅读
0评论
2点赞
发布博客于 2 年前

进程的“实际用户ID”、“有效用户ID”、“保存设置用户ID”和“设置用户ID位”辨析

概述进程用户ID的种类进程的用户ID有3种:ID名称说明实际用户ID(RUID)登录时取自口令文件,只能由root修改有效用户ID(EUID)用于权限检查,初始值为RUID,可由exec或setuid函数更改保存的设置用户ID(SUID)是EUID的副本,用于恢复EUID下面详细讲解这3种ID。实际用户ID(RUID)实际用户ID说明了我们实际...
原创
332阅读
0评论
4点赞
发布博客于 2 年前

shell script中执行sql语句,返回结果中文乱码问题

问题描述有一个需求,需要编写一个脚本向远程数据库拉取数据并生成一个文件。在编写完成并运行后,发现文件中的中文为乱码。脚本中的查询命令如下所示:QUERY_CMD=&amp;amp;amp;amp;quot;mysql -h${HOST} -u${USER} -p${PWD} -sBN &amp;amp;amp;amp;quot;RESULT_FILE=&amp;amp;amp;amp;quot;SELECT * FROM school.student;&amp
原创
2086阅读
0评论
2点赞
发布博客于 3 年前

Linux定时执行任务——例行性工作调度

第1章 什么是例行性工作举例来说,如果你想要在家人的生日前一天就发出一封email提醒自己不要忘记,那么发email这个工作就是例行性工作。例行性工作具有周期性和固定性,这些工作可以交由linux系统按时启动与完成。第2章 linux工作调度种类工作调度有两种方式:1、 一种是例行性的,就是每隔一定的周期要来办的事项。2、 一种是突发性的,这次做完就没有第二次了。在linux系统中,这...
原创
351阅读
0评论
0点赞
发布博客于 3 年前

开发、维护过程中解决问题的通用步骤

1. 概述在日常开发过程中,我们常常会遇到各种各样的bug,如果是开发阶段遇到问题,可以慢慢排查。但如果是线上的应用出现问题,那么每一分每一秒都是及其宝贵的。因此,我们需要更加快速地定位并解决问题。本文章所介绍的就是自己在开发过程中总结出来的排查问题通用步骤。按照这些步骤来,可以更加快速地定位问题,让我们不至于手足无措。2. 步骤一个问题的定位过程,整体上可以分为以下7步。2.1 报错信...
原创
864阅读
2评论
0点赞
发布博客于 3 年前

awk基础篇——Shell 文本处理利器

awksed倾向于以行为单位进行处理,而awk更擅长将一行分为几段进行处理。awk的语法awk用法| awk '条件类型1{动作1} 条件类型2{动作2} ...' awk '条件类型1{动作1} 条件类型2{动作2} ...' filenameawk支持两种数据来源,既可以通过管道获取数据,也可以从文件获取数据。 awk主要是处理每一行的字段内的数据,而默认的字段...
转载
265阅读
0评论
0点赞
发布博客于 3 年前

sed——Shell 文本处理利器

简介sed全称是stream editor,是一个用于文本过滤和替换的流编辑器,它是一个管道命令,数据源来自stdin。语法语法如下:sed [-nfri] [动作]-n:使用安静模式。只有经过sed处理的行才会输出到屏幕上-f:直接将sed的动作写在一个文件内,-f filename 则可以执行filename内的sed动作-r:切换为支持扩展正则表达式-i:直接...
转载
222阅读
0评论
1点赞
发布博客于 3 年前

C++中如何自定义命令行参数——完整实例演示

C++为自定义命令选项提供了专门的库:getopt.h。其中最重要的函数是:int getopt_long(int argc, char * const argv[], const char *optstring, const struct option *longopts, int *longindex);它的说明文档:https://li...
原创
3822阅读
2评论
0点赞
发布博客于 3 年前

"svn: E155009: Failed to run the WC DB work queue associated with"原因分析及解决方案

问题描述在使用svn checkout一个项目时报错:svn: E155009: Failed to run the WC DB work queue associated with '/home/.../doc', work item 39 (file-install doc/{U+7ED3}{U+7B97}{U+5FEB}{U+7167}.doc 1 0 1 1)查看我的目录,发现...
原创
6153阅读
2评论
3点赞
发布博客于 3 年前

svn数据库清理工具——sqlite脚本

当遇到svn: E155009: Failed to run the WC DB work queue associated with错误时需要用到的SQLite数据库打开工具。此工具是2018.08.15下载的官网最新版本。
zip
发布资源于 3 年前

LVS原理图解

第1章 LVS是什么?LVS(Linux Virtual Server),是一个极好的负载均衡解决方案,它将一个真实服务器集群虚拟成一台服务器来对外提供服务,同时在真实服务器集群中实现了负载均衡。该技术由章文嵩博客发起,从linux2.4开始已经被收录到linux核心中。第2章 LVS有什么用?随着互联网在人们生活中的普及,企业级应用迎来了海量数据的冲击,如微信、美团外卖、微信支付...
原创
1608阅读
0评论
0点赞
发布博客于 3 年前

C++ Map相同key是否覆盖问题分析

1 问题描述C++的标准库关联容器map是不允许有key相同的键值对存在的。那么当key已经存在的情况下,我们再次插入相同的key,那么key的value会被覆盖吗?2 编码测试测试代码:#include &lt;map&gt;#include &lt;string&gt;#include &lt;iostream&gt;using std::map;using std...
原创
15604阅读
1评论
6点赞
发布博客于 3 年前

在bash脚本的for i in编写中将点号``写成单引号‘’或者双引号“”会有什么后果?

编写一个测试脚本:#!/bin/shcd /home/ubuntumkdir shell_tutcd shell_tutfor ((i=0;i&amp;lt;10;i++))do touch test_$i.txtdone输入启动命令:./test.sh,结果报错root@VM-32-73-ubuntu:/home/ubuntu# ./test.shb...
原创
946阅读
0评论
1点赞
发布博客于 3 年前

svn: E170001 : Authorization failed 非主流的解决方案!

问题描述新手在使用SVN,执行checkout想要获取一份仓库副本时一直报错:root@VM-32-73-ubuntu:/home/ubuntu# svn checkout svn://localhost/svntest --username=nigelzhousvn: E170013: Unable to connect to a repository at URL 'svn://lo...
原创
7541阅读
0评论
1点赞
发布博客于 3 年前

C++ 拷贝构造函数与赋值函数的区别(很严谨和全面)

**转载自:https://blog.csdn.net/wenqian1991/article/details/29178649 写得很全面,例子也通俗易懂。**这里我们用类String 来介绍这两个函数:拷贝构造函数是一种特殊构造函数,具有单个形参,该形参(常用const修饰)是对该类类型的引用。当定义一个新对象并用一个同类型的对象对它进行初始化时,将显式使用拷贝构造函数。为啥形参...
转载
4939阅读
3评论
5点赞
发布博客于 3 年前

UDP(User Datagram Protocol)用户数据报学习笔记

UDP(User Datagram Protocol)用户数据报 UDP的首部很小,只有8个字节,它只在IP的数据报服务之上增加了很少一点的功能,即端口的功能和差错检测的功能。它是无连接的,只能提供不可靠的交付。UDP是面向报文的,没有拥塞控制,很适合多媒体通信的要求。它支持一对一、一对多、多对一和多对多的交互通信。使用UDP的程序必须选择合适大小的报文,因为UDP对应于程序交下来的...
转载
433阅读
0评论
0点赞
发布博客于 3 年前

传输控制协议TCP学习笔记

TCP (Transmission Control Protocol)重要特点:面向连接面向字节流每一条连接只能有两个端点,只能是一对一的提供可靠交付的服务提供全双工通信 面向报文和面向字节流的区别:https://blog.csdn.net/ce123_zhouwei/article/details/8976006TCP根据对方给出的窗口值和当前网络拥塞的程度来...
原创
639阅读
4评论
0点赞
发布博客于 3 年前

Cookie由谁设置、怎么设置、有什么内容?

Cookie由谁设置、怎么设置、有什么内容?Cookie是由服务器生成,保存在客户端本地的一个文件,通过response响应头的set-Cookie字段进行设置,下面是一个示例:[HTTP/1.1 200 OK]Server:[bfe/1.0.8.18]Etag:["58860415-98b"]Cache-Control:[private, no-cache, no-store,...
原创
9615阅读
4评论
3点赞
发布博客于 3 年前

路由器、路由表及常用路由选择协议初识

路由器、路由表及常用路由选择协议初识什么是路由器路由器是一种具有多个输入端口和多个输出端口的专用计算机,其任务是转发分组。 路由器包含了3(网络层)、2(数据链路层)和1(物理层)三层。路由器使用队列来维护输入端口中接收到的分组,因此会产生一定的时延。路由器同样使用队列来维护输出端口中等待发出的分组。若路由器处理分组的速率赶不上分组进入队列的速率,则队列的存储空间很快就...
原创
1827阅读
0评论
0点赞
发布博客于 3 年前

迅雷同时下载的人数越多,BT下载越快的奥秘——另辟蹊径的P2P应用

同时下载的人数越多,BT下载越快的奥秘——另辟蹊径的P2P应用BT大家或许不熟,但迅雷下载大家一定知道。通过BT下载同一文件的人数越多,BT下载的速度就越快,这跟我们通常所理解的有些不一样。要说明原因,我们不妨先分析一下传统下载的瓶颈在什么地方。传统的客户-服务器下载方式的分析传统的文件下载,即我们平时下载应用软件、歌曲的方式是,文件存放在应用服务器,用户通过客户端软件向服务器请求...
原创
3078阅读
0评论
1点赞
发布博客于 3 年前

IP地址的分类及各类IP的最大网络数、网络号范围和最大主机数

分类的IP地址每一类网络地址都由两部分组成:网络号net-id+主机号host-id。IP地址的分类可以参看下图:可以看到各个类别的区别,同时,所有的类别都是32位——4个字节。点分十进制计法 机器中存放的IP地址是32位2进制代码,每个8位插入一个空格能提高可读性,将每8位的二进制数转换为十进制数,采用点分十进制记法更加便于使用。示例如图:点分十进制非常易于阅读,因此使用得很广泛。各类IP地址的
原创
20757阅读
0评论
17点赞
发布博客于 3 年前

ICMP(Internet Control Message Protocol)网际控制报文协议初识

什么是ICMP协议ICMP是(Internet Control Message Protocol)Internet控制报文协议。它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。它工作在OSI七层模型的中的第三层——网络层。ICMP报文
原创
688阅读
0评论
0点赞
发布博客于 3 年前

ARP(Address Resolution Protocol)地址解析协议初识

ARP(Address Resolution Protocol)地址解析协议ARP是什么?ARP址解析协议是根据IP地址获取物理地址的一个TCP/IP协议。它工作在OSI七层模型的中第二层——数据链路层。ARP有什么用?使用ARP地址解析协议,可根据网络层IP数据包包头中的IP地址信息解析出目标硬件地址(MAC地址)信息,以保证通信的顺利进行。ARP缺点是什么?可能会受到恶意攻击——ARP欺骗与
原创
1568阅读
0评论
0点赞
发布博客于 3 年前

NAT(Network Address Tranlation )——解决IPV4地址短缺之道的方法初识

什么是NATNAT作为一种减轻IPv4地址空间耗尽速度的方法,最早出现在Cisco IOS 11.2版本中。 它有什么用?IP地址不足;这种通过使用少量的公有IP地址代表较多的私有IP地址的方式,将有助于减缓可用的IP地址空间的枯竭。隐藏内部网络;NAT不仅能解决了lP地址不足的问题,而且还能够有效地避免来自网络外部的攻击,隐藏并保护网络内部的计算机。NAT 之内的 PC 联...
原创
3076阅读
0评论
0点赞
发布博客于 3 年前

转载:Lock锁机制的原理及与Synchronized的比较——源码解说

文章转载自:https://blog.csdn.net/Luxia_24/article/details/52403033(为了简化阅读难度,本文只挑选了大部分内容进行转载,并对代码进行了注释,更加详细的内容可以参考原文)Lock锁机制的实现原理Lock锁机制存在于Java语言层面,可以通过编程进行控制。Lock机制加锁过程主要通过3个方法:1、Sync.nonfa...
转载
297阅读
0评论
0点赞
发布博客于 3 年前

阻塞和非阻塞,同步和异步IO及IO多路复用

本文章转载自:https://www.cnblogs.com/George1994/p/6702084.html阻塞和非阻塞,同步和异步1 例子 故事:老王烧开水。出场人物:老张,水壶两把(普通水壶,简称水壶;会响的水壶,简称响水壶)。老王想了想,有好几种等待方式1.老王用水壶煮水,并且站在那里,不管水开没开,每隔一定时间看看水开了没。-同步阻塞老王想了想,这种方法不够聪明。2.老王还是用水壶煮水
转载
1067阅读
0评论
0点赞
发布博客于 3 年前

Redis对象系统——五种对象、底层实现和常用命令

注:本文章总结自黄建宏前辈的《Redis设计与实现》,仅当做笔记和备忘录,并非本人原创。第八章 对象前面介绍的都是基本数据结构,Redis并没有直接使用这些基本数据结构,而是基于这些数据结构创建了一个对象系统,这个系统包含字符串对象、列表对象、哈希对象、集合对象和有序集合对象这五种类型。 Redis通过引用计数实现了内存回收,同时还实现了对象共享机制。 ps: redis用引用计数法的技术实现
转载
1665阅读
0评论
0点赞
发布博客于 3 年前

Redis哈希对象的ziplist编码实现了O(1)复杂度吗

问题描述 问题:Redis中哈希对象有两种编码方式,分别是ziplist、hashtable方式。哈希对象,总得体现哈希算法,使得基本操作达到O(1)的效率。hashtable编码方式使用字典,也即是Java中hashMap的方式,这个我可以理解。但是,ziplist方式所有元素都是紧挨的,它是怎么实现hash,并使得查询等操作有O(1)的时间效率的呢?分析:让我们从方法调用...
原创
2367阅读
0评论
1点赞
发布博客于 3 年前

Redis学习问题记录——持续更新中

问题: Redis引用计数进行内存回收,怎么解决循环引用 问题描述:redis用引用计数法的技术实现了内存回收。但是引用计数法的一个致命弱点就是,如果遇到循环引用,那么循环引用的对象将永不被回收。因此造成内存泄露。所以JVM摒弃这个内存回收技术,采用根路径可达算法。那么Redis是怎么解决引用计数的循环引用问题的呢?解答:待解决分析:问题:Redis哈希对象ziplist...
原创
286阅读
1评论
0点赞
发布博客于 3 年前

Java(JDK1.9)集合框架归纳总结——Map接口继承体系

注:该系列文章总结自JDK1.9源码的文档注释和源码,我对源码的部分中文注释已经同步到Github:https://github.com/Dodozhou/JDK Map接口实现概述Map的实现体系中,常用的类和接口可以大致分为三层。下面一一说明这些类或接口的特点和作用。第一层第一层包含一个抽象类AbstractMap和一个接口SortedMap。AbstractMap...
原创
877阅读
0评论
0点赞
发布博客于 3 年前

Java(JDK1.9)集合框架归纳总结——Collection接口的第三层——应用层

注:该系列文章总结自JDK1.9源码的文档注释和源码,我对源码的部分中文注释已经同步到Github:https://github.com/Dodozhou/JDK Collection接口的第三层——应用层&amp;具体实现应用层就是各个抽象类、底层接口的具体实现,使我们实际使用的各种容器和工具类,如ArrayList、Vector、HashSet、TreeSet等。结构图如下:...
原创
603阅读
0评论
0点赞
发布博客于 3 年前

Java(JDK1.9)集合框架归纳总结——Collection接口的第二层子接口和抽象类

注:该系列文章总结自JDK1.9源码的文档注释和源码,我对源码的部分中文注释已经同步到Github:https://github.com/Dodozhou/JDK Collection的第二层接口和抽象类Collection第二层常用接口、类继承体系: Collection继承体系的第二层,即List、AbstractCollection、Set和Queue的常用直接子类或接口如...
原创
408阅读
0评论
1点赞
发布博客于 3 年前

Java(JDK1.9)集合框架归纳总结——Collection接口的第一层接口和抽象类

注:该系列文章总结自JDK1.9源码的文档注释和源码,我对源码的部分中文注释已经同步到Github:https://github.com/Dodozhou/JDK Collection的第一层接口和抽象类Collection第一层常用接口、类继承体系:Collection的直接后继有3个接口和一个抽象类。3个接口分别是List:Collection接口的有序集合实现,也叫...
原创
287阅读
0评论
0点赞
发布博客于 3 年前

Java(JDK1.9)集合框架归纳总结——集合框架图与两个顶级接口

注:该系列文章总结自JDK1.9源码的文档注释和源码,我对源码的部分中文注释已经同步到Github:https://github.com/Dodozhou/JDK Java Collections Framework概述Java集合框架继承图: Java集合框架由两个顶层接口衍生而出。这两个接口区别如下:Collection:保存一维列表,有数组和链表两种形式。Map:保存二...
原创
1443阅读
0评论
0点赞
发布博客于 3 年前

Java集合之WeakHashMap、IdentityHashMap、EnumMap简介

转载自:https://blog.csdn.net/wxc880924/article/details/52683097WeakHashMapWeakHashMap与HashMap的用法基本类似。区别:HashMap的key保留了对实际对象的强引用,这意味着只要HashMap对象不被销毁,还HashMap的所有key所引用的对象就不会被垃圾回收,HashMap也不会自动删除这...
转载
107阅读
0评论
0点赞
发布博客于 3 年前

LinkedHashMap与LRU——来自源码的启示

LinkedHashMap是什么?public class LinkedHashMap<K,V> extends HashMap<K,V> implements Map<K,V>LinkedHashMap是HashMap的扩展,它根据元素的插入顺序或者访问顺序(accessOrderd属性指定),使用双向链表,将所有元素连接起来,使得对HashMap的遍历变得有序。 示意图如下:
原创
257阅读
0评论
0点赞
发布博客于 3 年前

3种缓存淘汰算法LFU、LRU和LRU-K

本文章转载自:https://blog.csdn.net/jake_li/article/details/506598681. LFU1.1 原理LFU(Least Frequently Used)算法根据数据的历史访问频率来淘汰数据,其核心思想是“如果数据过去被访问多次,那么将来被访问的频率也更高”。1.2. 实现LFU的每个数据块都有一个引用计数,所有数据块按照引用计数排序,具有相同引用计数的
转载
3586阅读
0评论
0点赞
发布博客于 3 年前

数据库为什么使用B+树而不是B树

B树和B+树的区别B树和B+树的区别主要有两点:在B树中,你可以将键和值存放在内部节点和叶子节点,但在B+树中,内部节点都是键,没有值。叶子节点同时存放键和值B+树的叶子节点有一条链相连,而B+树的叶子节点各自独立。B树与B+树的对比示意图使用B+树的好处由于B+树的内部节点只存放键,不存放值,因此,一次读取,可以在内存页中获取更多的键,有利于更快地缩小查找范围...
原创
2036阅读
0评论
1点赞
发布博客于 3 年前

HashMap与HashTable的哈希算法——JDK1.9源码阅读总结

HashTable中的哈希算法下面是HashTable源码中的put方法:public synchronized V put(K key, V value) { // Make sure the value is not null if (value == null) { throw new NullPointerExceptio...
原创
494阅读
0评论
1点赞
发布博客于 3 年前

Java序列化——Serializable、Externalizable源码阅读与总结

一、Java序列化概述1、什么是序列化序列化(Serialization):是将对象的状态信息转换为可以存储或传输的形式的过程。更通俗地讲,是将该对象字段和状态信息以字节流的方式输出到目的地。2、序列化的应用场景一是实现pojo对象的读写操作,将每个对象转换为字节流,而这些字节流可以被持久化到设备上,再次读取时会将字节流还原成对象。当我们希望某些数据能在程序停止运行后,还...
原创
344阅读
0评论
0点赞
发布博客于 3 年前

Java——transient关键字及Java对象序列化

转载自:http://www.cnblogs.com/lanxuezaipiao/p/3369962.html哎,虽然自己最熟的是Java,但很多Java基础知识都不知道,比如transient关键字以前都没用到过,所以不知道它的作用是什么,今天做笔试题时发现有一题是关于这个的,于是花个时间整理下transient关键字的使用,涨下姿势~~~好了,废话不多说,下面开始:1. transient的作
转载
951阅读
0评论
1点赞
发布博客于 3 年前

JDK1.9 集合框架源码阅读——Map系列——有趣的问题及源码解答

Map.get(Object key) V get(Object key); 该方法将会返回Map中对应于key的value。如果这个key不存在,则返回null。问题那么问题来了,如果这个map本身允许null作为value呢?这样,当该方法返回null时,就会有两种情况,一种是不存在该key,第二种是该key对应的值就是null。解答官方源码注释给出了解决方法:...
原创
136阅读
0评论
0点赞
发布博客于 3 年前

关于常见排序算法的归纳总结以及思考解答

该文章转载自:https://blog.csdn.net/jianyuerensheng/article/details/51263709常用排序算法的复杂度分析整理 具体分析如下:1 冒泡排序(BubbleSort)冒泡排序是最慢的排序算法。在实际运用中它是效率最低的算法。它通过一趟又一趟地比较数组中的每一个元素,使较大的数据下沉,较小的数据上升。它是O(n^2)的算法。...
转载
332阅读
0评论
0点赞
发布博客于 3 年前

TreeSet为什么要用TreeMap来作为底层容器?——来自JDK1.9源码的启示

TreeSet与TreeMap相信很多同学都知道TreeMap和TreeSet,也知道TreeSet是使用TreeMap来容纳元素的,那么问题来了: TreeSet从外观上看是一个一维数组,而TreeMap是一个二维的键值对。为什么要用一个二维的容器来装一维的数据呢?这样不是会浪费map的value域吗?TreeMap中的value里面又是装的什么呢? 这些问题困扰了我很久,直到我看到了T...
原创
500阅读
1评论
0点赞
发布博客于 3 年前

腾讯2018春招模拟——编程题1——4个点能否构成正方形

题目 判断输入的4个点是否构成正方形 输入t组数据,每组数据包含两行,一行是4个点的横坐标,一行是4个点的纵坐标 示范输入: 2 0 0 1 1 0 1 0 1 0 1 5 6 1 6 0 5 示范输出: Yes Yes我的思路判断任意3个点是否构成等腰直角三角形,如果是,则为正方形。public class...
原创
846阅读
3评论
1点赞
发布博客于 3 年前

《剑指offer》Java实现——每天9题——第6天

面试46 把数字翻译成字符串 给定一个数字,我们按照如下规则把它翻译为字符串:0翻译成“a”,1翻译成“b”,……,11翻译成“l”,……,25翻译成“z”。一个数字可能有多个翻译。例如,12258有5种翻译,分别是“bccfi”、“bwfi”、“bczi”、“mcfi”和“mzi”。请编程实现一个函数,用来计算一个数字有多少种不同的翻译方法。测试用例功能测试(只有1位数字...
原创
373阅读
1评论
0点赞
发布博客于 3 年前

《剑指offer》Java实现——每天9题——第5天

面试题37 序列化二叉树 请实现两个函数,分别用来序列化和反序列化二叉树测试用例功能测试(树有多个节点;树只有一个节点;每个节点只有左子树或者右子树;反序列化时序列为空,或者null)特殊值测试(树为空)实现代码//一个全局的计数变量,用于反序列化计数 private static int index=0; /** * 序列化...
原创
250阅读
0评论
0点赞
发布博客于 3 年前

《剑指offer》Java实现——每天9题——第4天

面试题28 对称的二叉树 请实现一个函数,用来判断一颗二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。测试用例功能测试(对称的树;因结构而不对称的二叉树;结构对称但节点值不对称的二叉树)特殊值测试(树为null;树只有一个根节点;所有节点值都相同的树)实现代码/** * 入口方法,负责进行参数校验和递归调用 * @p...
原创
270阅读
0评论
0点赞
发布博客于 3 年前

《剑指offer》Java实现——每天9题——第3天

面试题19 正则表达式匹配 请实现一个函数用来匹配包含’.’和’‘的正则表达式。模式中的字符’.’表示任意一个字符,而’‘表示它前面的字符可以出现任意次(含0次)。在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串“aaa”与模式“a.a”和“ab*ac*a”匹配,但与“aa.a”和“ab*a”均不匹配。测试样例功能测试(模式字符串里包含普通字符、’.’、’*’;...
原创
334阅读
0评论
1点赞
发布博客于 3 年前

《剑指offer》Java实现——每天9题——第2天

面试题10 斐波那契数列 题目一:求斐波那契数列的第n项。写一个函数,输入n,求斐波那契数列的第n项。测试用例功能测试(如输入3、5、10)边界值测试(如输入0,1,2)性能测试(输入较大的数字,如40、50、100等)实现代码/** * 求斐波拉契数列的第n项。 * @param n 第n项 * @return 第n项的值 */ pub
原创
342阅读
0评论
0点赞
发布博客于 3 年前

《剑指offer》Java实现——每天9题——第1天

面试题1 赋值运算符函数该题目涉及到c++语言的指针特性,java语言暂没想出解决方案。面试题2 实现Singleton模式 设计一个类,我们只能生成该类的一个实例。实现代码 public class LazyLoadedSingleton{ private LazyLoadedSingleton{} //private构造方法,防止外部实例化...
原创
1470阅读
0评论
2点赞
发布博客于 3 年前

《剑指offer》序——面试流程及面试须知

通常,面试是从电话面试开始的。接下来可能有一两轮共享桌面远程面试,面试官通过桌面共享软件远程考查应聘者的编程和调试能力。如果应聘者的表现足够优秀,那么公司将邀请他到公司去接收现场面试。 通常,面试官会认可应聘者的几种编程习惯思考清楚再开始编码。应聘者应先想清楚解决问题的思路,如算法的时间、空间复杂度各是什么,有哪些特殊情况需要处理等,然后动手编写代码。良好的代码命名和缩进对齐习惯。良好的代码命
原创
468阅读
1评论
1点赞
发布博客于 3 年前

图论——图的邻接表实现——Java语言(完整demo)

一、图的实现方式概述1、图的简单实现方法——邻接矩阵表示图的一种简单的方法是使用一个一维数组和一个二维数组,称为领接矩阵(adjacent matrix)表示法。 对于每条边(u,v),置A[u,v]等于true;否则,数组的元素就是false。如果边有一个权,那么可以置A[u][v]等于该权,而使用一个很大或者很小的权来标记不存在的边。虽然这样表示非常简单,但是,它的空间需求则为θ...
原创
4736阅读
3评论
2点赞
发布博客于 3 年前

排序算法——快速排序的图解、代码实现以及时间复杂度分析

快速排序在C++的泛型排序中,拷贝对象需要很大的开销,而比较对象常常是相对省时的(编译器的自动优化)。在这种情况下,如果我们能够使用更少的数据移动,那么有理由让一个算法多使用一些比较。而快速排序(Quicksort)满足了这种特点,实际上C++中通常所使用的排序例程就是使用的快速排序。 快速排序也是一种分治的递归算法。它的平均运行时间是O(NlogN),最坏情形性能为O(N2)。经典快速排序将数组
原创
2203阅读
0评论
1点赞
发布博客于 3 年前

排序算法——希尔排序的图解、代码实现以及时间复杂度分析

希尔排序(Shellsort)希尔排序是冲破二次时间屏障的第一批算法之一。 希尔排序通过比较相距一定间隔的元素来工作;各躺比较所用的距离随着算法的进行而减小,直到只比较相邻元素的最后一趟排序为止。由于这个原因,希尔排序有时也叫做缩减增量排序。 希尔排序使用一个序列h1,h2,…,hi,这个序列叫做增量序列(increment sequence)。增量序列只要求h1=1,以及hi>hi-1。
原创
6614阅读
1评论
1点赞
发布博客于 3 年前

排序算法——插入排序的图解、代码实现以及时间复杂度分析

插入排序插入排序的原理: 插入排序由N-1躺排序完成,对于p=1到N-1躺,插入排序保证从位置0到位置p的元素为已排序状态。 插入排序的代码实现: /** * 插入排序的实现例程,特点是使用了泛型,可以接受任何实现了Comparable接口的类, * 并且使用了一种巧妙的方法避免了交换操作。 * @param a 需要排序的数组 *
原创
1709阅读
0评论
3点赞
发布博客于 3 年前

二叉堆建堆的优化算法原理图解及代码实现

二叉堆的简单建堆方法有时二叉堆是由一些项的初始结合构造而得。这种构造方法以N项作为输入。 最浅显的建堆方式,可以通过N个连续的insert操作(Williams’ method)来完成,由于每个insert将花费O(logN)时间,因此建堆的最坏运行时间是O(NlogN)。但是这种建堆的方式并不是最优算法。二叉堆的优化建堆方法更快速算法是,将N项以任意顺序放入树中,保持结构特性。
原创
3210阅读
1评论
2点赞
发布博客于 3 年前

数据库系统设计范例——座位预订系统设计

一、 系统概述应用场景:学校讲座座位预订系统需求分析:学生能够预订特定讲座的座位,管理者可以查询一场讲座的座位预订情况二、 概念模型概念模型通过E-R来展示: 系统的E-R图 三、 关系模型实体类型转化为关系模型 学生 (学号,姓名) 座位 (座位号) 讲座 (讲座号,标题,地点,时间)联系转化为关系模型 学生-座位属于1:1联系,将学号加入座位
原创
6613阅读
2评论
3点赞
发布博客于 3 年前

数据结构之——“优先队列”的理论基础知识(Java语言)

优先队列一、什么是优先队列?在实际应用中,以打印机为例,有的作业虽然排在后面,但很重要,需要优先打印,这种带有优先级的队列,叫做优先队列(priority queue)。 优先队列是允许至少下面两种操作的数据结构:insert(插入)deleteMin(删除最小者):找出、返回并删除优先队列中最小的元素。优先队列的应用场景:操作系统、外部排序算法、贪婪算法……二
原创
588阅读
0评论
0点赞
发布博客于 3 年前

物联网传输技术——ZigBee协议概论

第一部分 物联网简介根据物联网中信息的生成、传输、处理和应用的过程,可以把物联网系统从结构上分为3层:感知层、传输层(网络层)、应用层。 网关节点实现与互联网等外部网络的链接,将收到的数据转发到外部网络上。 物理传感器:是检测物理量的传感器,它是利用某些物理效应,将被测的物理量转化为便于处理的能量信号的装置。 化学传感器:必须具有对被测化学物质的形状或分子结构进行俘获的功能,并且还能将所
原创
3509阅读
0评论
1点赞
发布博客于 3 年前

遍历Java Map的方法——Java基础

转载自:http://blog.csdn.net/chenlili_liumiao/article/details/7846512我们知道map是由键值对组成的,要获取map中的元素,必须知道key,然后通过map.get(key)来获取值。那么如何遍历Map?将map转化为CollectionSet keySet():获取键的集合Collection values():获取值的集合Set遍历
转载
1820阅读
0评论
0点赞
发布博客于 4 年前

二叉树的应用——表达式树的原理分析与实现(Java语言)

表达式树表达式树(expression tree)的树叶是操作数(operand),如常量或变量名,而其他节点为操作符(operator)。如下图 图1 (a+b*c)+((d*e+f)*g)的表达式树 我们可以通过递归地产生一个带括号的左表达式,然后打印出在跟出的运算符,最后再递归地产生一个带括号的右表达式从而得到一个中缀表达式。这种一般的方法(左,节点,右)的方式成为中序遍历。构造表达式
原创
7572阅读
0评论
3点赞
发布博客于 4 年前

从前端和后端两个角度分析jsonp跨域访问(完整实例)

一、什么是跨域访问举个栗子:在A网站中,我们希望使用Ajax来获得B网站中的特定内容。如果A网站与B网站不在同一个域中,那么就出现了跨域访问问题。你可以理解为两个域名之间不能跨过域名来发送请求或者请求数据,否则就是不安全的。跨域访问违反了同源策略,同源策略的详细信息可以点击如下链接:Same-origin_policy; 总而言之,同源策略规定,浏览器的ajax只能访问跟它的HTML页面同源(相同
原创
40436阅读
17评论
25点赞
发布博客于 4 年前

关于Java泛型实现原理的思考与一般用法示例总结

实现泛型构建 pre-java5面向对象的一个重要目标是对代码重用的支持。支持这个目标的一个重要机制就是泛型机制。在1.5版本之前,java并没有直接支持泛型实现,泛型编程的实现时通过使用继承的一些基本概念来完成的。一、使用object表示泛型 public class MemoryCell{ private Object storedValue; public
原创
373阅读
0评论
0点赞
发布博客于 4 年前

关于Java协变性的思考

Java协变性一、什么是协变性?简而言之,如果A IS-A B,那么A[] IS-A B[]。 举例:现在有类型Person、Employee和Student。Employee 是一个(IS-A) Person,Student是一个(IS-A)Person。那么下面的语句可以通过编译: Person[] arr = new Employee[5]; //能通过编译,因为协变性,数组是兼容
原创
403阅读
0评论
0点赞
发布博客于 4 年前

设计模式之七——命令模式(Command)

正式定义 命令模式将“请求”封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象。命令模式也支持可撤销的操作。实例讲解让我们通过一个演示例子来对命令模式有一个直观的了解。 假设我们要设计一个遥控器,这个遥控器具有一个可编程的插槽,插槽有对应的开关按钮,并且还有一个整体的撤销按钮。假设我们现在要用这个遥控器来控制车库门,车库门类如下所示: package com.star.c
原创
1423阅读
1评论
2点赞
发布博客于 4 年前

mysql 5.7.20, for Linux (x86_64) 配置远程连接 10061问题解决方案

最近在用workbench远程连接数据库是一直提示Can’t connect to MySQL server on ‘192.168.1.5’ (10061)的错误,百度了各种解决方法,大部分都没用。写这篇博客的原因是想要分析网络上教程到底适用于那些情况。解决方案MySQL默认是不可以通过远程机器访问的,通过下面的配置可以开启远程访问 。 要让服务器的mysql能够远程连接,至少需要两个步骤:一、
原创
3890阅读
0评论
1点赞
发布博客于 4 年前

Log4j2官方文档翻译、学习笔记之三——Layouts的分类及常用类型示例

官方文档本节地址:http://logging.apache.org/log4j/2.x/manual/layouts.htmlLayouts是什么官方文档:“An Appender uses a Layout to format a LogEvent into a form that meets the needs of whatever will be consuming the log eve
原创
2760阅读
0评论
1点赞
发布博客于 4 年前

Log4j2官方文档翻译、学习笔记之二——Appender的分类及常用类型示例

Appenders是什么官方文档说“Appenders are responsible for delivering LogEvents to their destination.”也就是说,Appenders负责将日志事件投递到它们的目的地。这个目的地可以是控制台,文件,数据库,甚至是邮件。Appender通常会将日志信息的排版委托给layout(layout将在下一篇博客详细讲解)。Append
原创
2212阅读
0评论
1点赞
发布博客于 4 年前

Log4j2官方文档翻译、学习笔记之一——log4j2基础配置及功能概述

log4j2官方文档地址:http://logging.apache.org/log4j/2.x/manual/configuration.htmllog4j2有4中配置方式通过配置文件配置创建一个配置工厂来配置调用拓展配置API来向默认配置添加容器等调用内部logger的方法log4j2可以通过四种配置文件配置:log4j.properties、log4j2.properties、lo
原创
1422阅读
0评论
1点赞
发布博客于 4 年前

Java开发测试工具用法简略记录——Junit4 And EasyMock

Junit4Junit是Java中用于测试的一个单元库,其包含以下几项重要功能: @Test注解驱动测试public class RegularExpressionJUnit4Test { private static String zipRegEx = "^\\d{5}([\\-]\\d{4})?$"; private static Pattern pattern; @T
原创
270阅读
0评论
1点赞
发布博客于 4 年前

如何为我们的程序编写开发文档——Java文档注释

Java文档注释Java文档只是用于生成Java API文档,通过在程序中的类、属性、方法部分加上注释,就可以用javadoc命令生成漂亮的API文档,是程序员进阶的必备技能。 /** comment for class */ public class Test{ /** comment for a attribute */ int number;
原创
4895阅读
0评论
2点赞
发布博客于 4 年前

设计模式之三——工厂方法模式(Factory Method)&抽象工厂模式(AbstractFacotry)

工厂方法模式(Factory Method)模式名称工厂方法模式(Factory Method)问题客户类不关心使用哪个具体类,只关心该接口所提供的功能。创建过程比较复杂,例如需要初始化其他关联资源,读取配置文件等。接口有很多具体实现或者抽象类有很多具体子类,避免客户端写一大堆if-else逻辑来决定运行时使用哪个具体实现或者具体子类。不希望给客户程序暴露过多此类的内部结果或创建过程,降低耦
原创
328阅读
0评论
1点赞
发布博客于 4 年前

Java设计模式之Singleton——四种不同的单例模式(Singleton)

单例模式(Singleton)模式名称单例模式(Singleton [ˈsɪŋgltən])问题如果要保证系统里最多只能存在一个实例时,我们就需要单例模式。例如缓存池、数据库连接池等。解决方案实例一:最简单的单例模式 public class Singleton{ private static Singleton instanc...
原创
1023阅读
0评论
1点赞
发布博客于 4 年前

Java设计模式之一——模板方法设计模式(Template Method)

Template Method Pattern——模板方法模式设计原则:不要重复DRY(Don’t Repeat Yourself,不要复制自己)OAOO(Once and Only once,仅此一次):避免代码重复GOF给出的模板方法模式定义如下: Define the skeleton of an algorithm in an operation, deferring some
原创
363阅读
0评论
1点赞
发布博客于 4 年前

Java多线程——线程间协作方式总结及使用示例

线程之间的协作方式方式一、wait()、notify()、notifyAll()wait()提供了一种在任务之间对活动同步的方式。wait()使你可以等待某个条件发生变化,通常,这种条件将由另一个任务来改变。 wait()会在等待外部世界发生变化的时候将任务挂起(而不是执行空循环,进行忙等待),并且只有在notify()或notifyAll()发生时,这个任务才会被唤醒并去检查所产生的变化。 调
原创
2507阅读
0评论
3点赞
发布博客于 4 年前

IntelliJ IDEA+SpringBoot中静态资源访问路径陷阱:静态资源访问404

今天在使用SpringBoot时遇到静态资源无法访问的问题,百思不得其解,最终解决,记录下来。问题描述html页面中访问static文件夹下的index.css文件失败,浏览器调试模式下发现404。 项目目录结构如下:HTML代码截图路径正常,可以通过ctrl+鼠标左键直接访问。但是当运行应用后,浏览器访问时却发现无法获取文件,,F12打开开发者调试工具查看结果如下: 百思不得其解。于是各种百度
原创
41432阅读
21评论
18点赞
发布博客于 4 年前

JavaI/O中使用readUTF()报java.io.EOFException暂时解决方案

问题描述练习JavaI/O时自己试着写demo,当使用RandomAccessFile的readUTF()方法时报java.io.EOFException。源码如下: DirList.javapackage com.star.io;import java.io.IOException;import java.io.RandomAccessFile;public class DirList {
原创
5414阅读
0评论
0点赞
发布博客于 4 年前

MyBatis获取Session的流程

我们需要为想使用mybatis连接的每一个数据库创建一个Environment对象。为了使用每一个环境,我们需要为每一个Environment创建一个SqlSessionFactory对象。而创建SQLSessionFactory对象,我们需要java.sql.DataSource和TransactionFactory实例。流程如图所示: 示例代码:public static SqlSessi
原创
3077阅读
0评论
1点赞
发布博客于 4 年前

IntelliJ IDEA:获取包路径下的xml文件,Could not find resource com/**/*.xml

问题描述在eclipse中,把资源文件放在src文件夹下,是可以找到的; 但是在idea中,直接把资源文件放在src文件夹下,如果不进行设置,是不能被找到的。例如使用Mybatis,mapper文件都是放在包路径下,和实体一个层级,使用IDEA时就会报错:Caused by: java.io.IOException:Could not find resource com/**/*.xml提示找不到
原创
3076阅读
1评论
4点赞
发布博客于 4 年前