自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

冰生于水的博客

技术小白,如有错误,欢迎指出

  • 博客(37)
  • 收藏
  • 关注

原创 makefile实现split

makefile未实现split函数,可以通过其他方式实现,例如根据逗号分隔: 通过subst字符串替换,将逗号替换为空格,即可使用遍历,结果如下:

2022-07-05 11:47:40 1092 1

原创 go mod下载依赖错误Get https://sum.golang.org

升级1.13版本之后下载依赖出现错误:verifying github.com/gorilla/[email protected]/go.mod: github.com/gorilla/[email protected]/go.mod: Get https://sum.golang.org/lookup/github.com/gorilla/[email protected]: dial tcp...

2021-03-23 22:18:02 7915 2

原创 基于Netty自己动手写一个tomcat

之前有使用传统的bio实现过,但是bug慢慢,去年4月份的时候使用netty重构一下,顺带使用了netty的http编码和解码,减少了一定的工作,给想自己动手的朋友一点简易参考吧。设计架构啥的网上一大堆,没必要赘述,直接上代码,参考那为数不多的注释自己消化吧,github地址:https://github.com/lsm1998/code/tree/master/framework/tomcat...

2021-01-07 11:29:12 319

原创 Class文件解析(手写一个Class文件解析器)

学习JVM的第一课便是Class文件解析,这也是了解JVM执行引擎的基础,网上关于Class文件解析的文章也是数不胜数,这次就玩点不一样的,使用Java语言来写一个Class文件解析器,主要的目的是在于了解Class文件结构,使用什么语言倒是没什么所谓。在这里我不会介绍class文件中诸如常量元素结构、ConstanValue属性表结构等知识,这些随便一搜一大把,我只会介绍如何实现的有关步骤;...

2021-01-07 11:19:25 1103 1

原创 自定义手写SSM框架2.0(带小案例)

经过1.0版本的摸索后,开始了2.0版本的编写,由于1.0版本只求功能的相似,所以代码没有什么层次可言,可读性也比较差,从而在设计2.0版本的时候首先从架构出发,一定程度上借鉴了Spring和Mybatis的架构设计,大大提升了代码的可读性。首先对比下与官方的功能差异:Spring方面:IOC容器基本的注册、注入组件、注入属性等; 简单的AOP切面; 与Spring相比,最大的功能...

2020-10-19 16:14:16 1053 4

原创 自定义手写SpringBoot框架(带使用案例)

过了个年,现在才想起来写博客,废话不多说,先谈一下开发环境与实现概况:开发环境:使用JDK11,IDEA2018,Mysql8.0,gradle5.0;实现概况:提供了Spring、SpringMVC、Mybatis、Log4j(半成品)可供选择的组件,均是自定义的,详情可以参见我的上一篇博客《自定义手写SSM框架2.0(带小案例)》;内嵌了tomcat8.5容器,web...

2020-10-19 16:12:58 2093

转载 Linux安装Docker

安装Docker:https://www.jianshu.com/p/aed54960ff7a

2019-10-12 14:39:11 186

原创 Host is not allowed to connect to this MySQL server错误

虚拟机装好MySQL发现本地可以连接,远程却不行,开放3306端口后出现错误:Host 'xxx' is not allowed to connect to this MySQL server解决方案:本地登录MySQL之后执行如下命令:选中mysql数据库use mysql;更新hostupdate user set host = '%' where user ...

2019-10-12 14:04:42 146

原创 MySQL执行引擎对比与SQL优化

执行引擎对于一个中级Java开发者来说SQL优化已经是面试必问了,而最近的一次面试也有问到MySQL执行引擎,还真有点答不上来,话不多说,活到老学到老,又是一波查漏补缺,不得不说路还长。首先简单了解下MySQL执行引擎,首先MySQL执行引擎分类比较多,InnoDB(重要)、MyIsam(重要)、Memory、Mrg_Myisam、Blackhole等,虽然看着多,不过在日常学习和使用过程...

2019-07-03 21:08:29 2569 1

原创 Java中的锁优化(偏向锁、自旋锁等)

一次面试中有被问到Java中的偏向锁、自旋锁等,特地查了下资料,发现这都是Java虚拟机的锁优化,查漏补缺,写篇博客记录下。1.偏向锁概述:是针对加锁操作的优化,在一次线程获得锁时,那么该锁进入偏向模式,当该线程再次请求时,会迅速获得该锁,无需进行任何同步操作,提高程序性能; 适用场景:锁竞争不激烈的场合,如果每次都是不同的线程来请求锁,则会导致偏向锁的失效; 使用方式:Java虚拟...

2019-07-02 10:27:45 534

转载 使用Git上传项目到Gitgub

原文:https://www.cnblogs.com/cxk1995/p/5800196.html

2019-03-30 10:25:35 342 1

转载 JDK5-12新特性

原文:https://www.jianshu.com/p/a051a2f0c3ab

2019-03-29 12:05:37 802

原创 自定义简单SSM框架的设计与实现

SSM内容:自定义SpringMVC+Spring(未实现AOP部分)+自定义ORM(仿Hibernate)记得刚开始学框架那会虽然老师反复强调框架只是一些通用工作的整体实现,通俗的说就是一些累活儿别人帮你做了,即便如此,我却总是打心底里觉得框架的实现是高深莫测的。随着学习的不断深入,开始阅读一些框架的源代码,试着揣摩设计者的设计思想,也慢慢的学着自己写一款,这是笔者第一次手写SSM框架,...

2018-12-11 19:17:02 491

原创 Java类加载机制

记录下类加载机制吧,当是做下笔记。当执行一个helloworld程序时,首先需要通过javac调用编译器将其编译成class字节码文件,如果一个java文件内如果出现n个类,包括内部类,都会编译产生n个class字节码文件,这是一一对应的。类加载的步骤:加载阶段,把class文件读入JVM内存中的方法区,并生成对应的Class对象; 链接-验证:检查被加载类class文件数据...

2018-11-30 01:09:56 135 1

原创 Java设计模式

设计模式是一个软件设计师必须掌握的技能,笔者在目前的项目开发过程中并没有过多的使用,深感惋惜,借此文章总结下Java中常用设计模式相关知识点,为今后的项目开发预先铺路。设计模式可以说不是新的知识,是对开发流程等相关过程的简化,类似于Spring等框架,是为开发者省力的,系统越大作用越明显。Java中的设计模式通常分为三类:创建型,用于通过特定方式生成对象实例,例如单例模式、建造者模式、...

2018-11-26 17:05:26 210 2

原创 Redis基本使用三(流水线与发布订阅以及超时命令)

开发环境:JDK11; Redis3.2;使用流水线优化读写新能:与传统关系型数据库类似,每次客户端与服务端建立连接是需要开销的,对于每一个客户端而言,将多个操作封装在一次连接内是十分有必要的,从而产生了Redis的流水线操作,应用步骤如下:开启流水线; 加入命令; 执行流水线;程序如下: /** * 10619ms * 普通执行 *...

2018-11-20 14:47:45 651

原创 Redis基本使用二(事务与锁)

开发环境:JDK11 Redis3.2Redis事务机制:与传统的关系型数据库类似,NoSQL也存在许多并发访问的情况,因此出现了如何保证数据一致性的问题,处理的方式有很多。针对不同的业务层次有不同的解决方案:视图层:前端来保证数据一致性,笔者对前端技术熟悉程度还不足以搞定,暂不讨论; 业务层:可以使用线程同步来保证数据一致性; 持久层:在持久层解决数据一致性问题是最优的选择...

2018-11-20 12:47:36 462

原创 Redis连接错误:MISCONF Redis is configured to save RDB snapshots, but it is currently not able to...

今天连接Redis出现了MISCONF Redis is configured to save RDB snapshots, but it is currently not able to...的奇葩错误,网上查了一下发现问题是:强制把redis快照关闭了导致不能持久化这个我也表示黑人问号,昨天还连的好好的,今天跟我说强制。。。解决方法如下:Redis客户端执行:config set ...

2018-11-19 10:52:07 3214

原创 Spring带返回值的异步任务

许久之前就接触Spring异步任务了,通过@Asyns注解标示一个异步任务,再通过配置类@EnableAsyns开启Spring异步支持即可实现简单的异步案例,但是对于带返回值的异步任务则无法通过这种简单的方法实现,此时需要异步方法返回Future对象,而获取的方法也有所不同,需要调用Future对象的get方法,这类似于通过Callable接口实现多线程(其实可以断定其底层就是基于Callabl...

2018-11-15 16:32:35 4054

原创 关于jdbc批处理的一些小问题

一个项目实现过程中难免遇到一些批量执行sql语句的情况,例如执行1万条插入语句,如果使用传统的插入方式则需要建立1万次连接,一次发送一条sql语句,这样是及其浪费性能的,接下来通过三种不同的方式模拟批量的插入语句,代码如下:package com.lsm1998.shop.test;import java.sql.Connection;import java.sql.DriverMan...

2018-11-14 11:12:43 315

原创 Redis基本使用一(数据结构常用命令)

Redis命令大全:http://doc.redisfans.com/index.html开发工具:Redis3.2; IDEA; JDK11; Gradle4.8;使用数据结构常用命令:1.创建项目,开启Redis服务端,导入相关坐标;重要坐标如下:implementation('org.springframework.boot:spring-boot-sta...

2018-11-13 13:55:03 241

原创 Redis基本概述

Redis的相对于传统关系型数据库来说具有高性能的读写效率,有效弥补了传统数据库的读写短板,对于一个并发量较大的系统来说,使用Redis是非常必要的; 1.Redis高性能的原因:基于ANSIC语言编写,接近于汇编语言的机器语言; 基于内存的读写,这是最关键的; 数据结构简单,规则较少; 2.Redis在Web项目中的应用场景:缓存常用的数据,起到实时缓存的效果,有效降低...

2018-11-12 20:29:46 128

原创 Redis实时缓存的一点小总结

笔者最近在写一个关于博客系统的毕业设计,其中用到了Reis实时缓存,对于一个博客首页信息来说,需要分页展示一些博客信息,而这些信息的变化性不是很大,所以采用Reis实时缓存可以有效缓解数据库访问压力;对于笔者的博客系统中的Reis实时缓存来说,笔者考虑的最佳Redis数据类型是字符串和链表。首先来分析下二者的优劣:字符串类型:可以将分页数据按照“页数-数据(list集合)”的形式保存,...

2018-11-12 17:52:48 2973

原创 Java模拟HTTP请求2

之前转过一篇基于HttpClient的Java模拟HTTP请求,使用的第三方jar文件,这次升级JDK11之后模拟HTTP请求不需要再导入第三方jar文件了,官方扩展了java.net包,所有的HTTP请求相关类均位于java.net.http包内,示例代码如下:package xyz.lsm1998.test;import java.net.URI;import java.net.h...

2018-10-30 21:47:49 2828

原创 SpringBoot实现短信发送

开发工具:IDEA、Gradle1.由于笔者使用阿里云的短信接口,所以需要去阿里云获取相关服务支持,每个新用户都有免费的初始条数,之后需要简单的配置签名与信息模版和AccessKey;2.导入相关jar包,在build.gradle文件内加入如下坐标: // 短信支持 implementation('com.aliyun:aliyun-java-sdk-core:3.7...

2018-10-30 21:18:40 5379

原创 Maven搭建SSM框架(xml版)

接下来讲解基于Maven工具、以XML为配置文件的SSM框架的环境搭建。搭建环境:1.maven3.5.3;2.IDEA2018.2.3; 1.首先创建一个Maven项目,选择webapp,如下图,然后填写项目GroupID和项目名称即创建完毕; 2.导入相关依赖: <!-- junit单元测试 --> <dep...

2018-09-09 13:56:19 201

转载 IDEA打包jar可执行文件

原文地址如下:https://blog.csdn.net/xuemengrui12/article/details/74984731最后需要Build 

2018-09-06 21:06:00 121

转载 java模拟http请求

HttpClient是Apache Jakarta Common下的子项目,支持HTTP协议最新的版本和建议,原文地址如下:https://blog.csdn.net/zhuwukai/article/details/78644484

2018-09-06 21:05:01 457

原创 排序算法04-快速排序

上一篇文章讲述了归并排序,其实快速排序是基于归并排序的,二者都是基于分而治之的算法设计思想,下面讲述快速排序与归并排序的不同之处:1.归并排序分割数组属于“货真价实”的分割,创建了两个新数组接收分割后的两个新数组,而快速排序则通过下标标记来分割,不会创建新数组;2.归并排序分割位置是固定的,每次都是arr.length/2^n(n代表第几次分割),而快速排序通过枢纽元来分割(枢纽元也是一个...

2018-09-05 12:00:37 134

原创 排序算法01-简单排序

简单排序算法共三种,分别是冒泡排序、选择排序、插入排序,这三种排序算法的算法复杂度均为,这三种排序算法虽然简单,但却是使用频率比较高的;1.冒泡排序的实现原理:  冒泡排序的原理就是按照顺序相邻的比较两个元素,如果前者大于后者,则交换位置,如下图: 观察可知,最大元素9已经被移动到最后的位置,同理可以完成排序。 2.选择排序的实现原理:选择排序的原理就是每次选择一...

2018-09-05 00:30:18 147

原创 数据结构08-散列(自定义HashMap)

实现自定义的HashSet之后HashMap也自然水到渠成了,作者的实现方法是以HashSet的方式来类比实现HashMap,而JavaAPI中标准的HashSet是基于HashMap的,因为Map中的keySet方法就是返回一个HashSet,所以只需要隐藏掉Value的相关操作,稍加改造就可以实现HashSet,减少代码冗余。作者的这种方法虽然相对于标准的JavaAPI来说有些冗余,但十分...

2018-09-04 21:06:32 176

原创 数据结构07-散列(自定义HashSet)

散列是什么?散列是使用一个散列函数,将一个键映射到一个索引;可以这么理解,ArrayList使用0-N为索引来保存N-1个数据,而散列实现的集合使用经过散列函数处理过的索引来保存数据,如此一来,ArrayList中的数据在内存中是连续的,而散列实现的集合就不一定了。散列的缺点与缺点:优点:插入、更新、删除、查找单个数据速度快,均是O(1)的算法复杂度;缺点:不能有重复数据...

2018-09-04 20:38:26 236

原创 数据结构05-二叉查找树(BST)

二叉查找树是树中最基础的,具有如下定义:1.每个根节点最多拥有2个子节点;2.子节点分为左子节点和右子节点,假设根节点为x,左子节点为y,右子节点为z,则必须满足z>x>y; 根据如上的定义可以有如下推论:1.高度为n的二叉树最多由个结点构成,故而,二叉树的平均深度是;2.一个结点左边的所有子节点都小于它,右边则大于它; 对于二叉查找树而言,查找元素是十...

2018-08-23 13:14:16 185

原创 数据结构04-栈和队列

至此,数据结构中最基础的三个(表、栈、队列)已经结束了,由于栈和队列也是基于表结构,所以他们均可以使用数组或者链表实现,如果你可以自行实现动态数组和单链表那么基本的栈和队列你一定可以自行实现;栈的特点:LIFO(last in first out,即先进后出),也就是说最先插入的数据只能最后被删除或访问,对于之前实现的动态数组和链表而言,只需要隐藏掉一些方法即可,例如MyArrayList...

2018-08-23 12:41:14 114

原创 数据结构03-双向链表

之前有说过链表的首尾操作是十分快速,其实这句话不准确,对于单链表而言,只有一侧的操作快速,另一侧的操作依旧需要大量的移动指针(如果数据多的话);双向链表与单向链表的区别:1.增加了一个指针域保存上一个结点,内存占用大于单链表;2.首尾两侧操作都很快速,而单链表只能保证一侧; 接下来实现一个双向链表:1.定义MyList接口,提供线性表操作规范:见作者的第一篇博客,《数据...

2018-08-23 11:07:12 99

原创 数据结构02-单链表

上一篇文章讲述了动态数组ArrayList的简单实现,这次讲述一下单链表这种链式的存储结构,在此之前先弄懂以下几个基本问题:1.什么是单链表?是一种链式存储的数据结构,具有指针域和节点域两块内存空间,相对于其他链表来说,单链表只有一个指针域,且总是指向下一个结点(循环链表可以指向前面的结点);2.与动态数组相比,有什么优势,什么劣势?优势:在于首尾元素的插入与删除和不损性能的长度扩...

2018-08-23 08:21:37 106

原创 数据结构01-自定义ArrayList

闲话少叙,直接步入正题,接下来会手动实现一个低配版ArrayList,提供基本的增删改查等方法;1.定义一个MyList接口,提供所需要实现的基本功能package A01.LSQ;public interface MyList<E>{ // 新增数据 E add(E data); // 插入数据 E add(int index, E d...

2018-08-22 19:58:49 285

空空如也

空空如也

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

TA关注的人

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