Java技术分享
介绍Java相关开发技术这条路上的坑坑洼洼和Java开发经验。
冰生于水
一生热爱不遗憾。
展开
-
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 · 268 阅读 · 0 评论 -
排序算法04-快速排序
上一篇文章讲述了归并排序,其实快速排序是基于归并排序的,二者都是基于分而治之的算法设计思想,下面讲述快速排序与归并排序的不同之处:1.归并排序分割数组属于“货真价实”的分割,创建了两个新数组接收分割后的两个新数组,而快速排序则通过下标标记来分割,不会创建新数组;2.归并排序分割位置是固定的,每次都是arr.length/2^n(n代表第几次分割),而快速排序通过枢纽元来分割(枢纽元也是一个...原创 2018-09-05 12:00:37 · 141 阅读 · 0 评论 -
排序算法01-简单排序
简单排序算法共三种,分别是冒泡排序、选择排序、插入排序,这三种排序算法的算法复杂度均为,这三种排序算法虽然简单,但却是使用频率比较高的;1.冒泡排序的实现原理: 冒泡排序的原理就是按照顺序相邻的比较两个元素,如果前者大于后者,则交换位置,如下图: 观察可知,最大元素9已经被移动到最后的位置,同理可以完成排序。 2.选择排序的实现原理:选择排序的原理就是每次选择一...原创 2018-09-05 00:30:18 · 160 阅读 · 0 评论 -
数据结构08-散列(自定义HashMap)
实现自定义的HashSet之后HashMap也自然水到渠成了,作者的实现方法是以HashSet的方式来类比实现HashMap,而JavaAPI中标准的HashSet是基于HashMap的,因为Map中的keySet方法就是返回一个HashSet,所以只需要隐藏掉Value的相关操作,稍加改造就可以实现HashSet,减少代码冗余。作者的这种方法虽然相对于标准的JavaAPI来说有些冗余,但十分...原创 2018-09-04 21:06:32 · 210 阅读 · 0 评论 -
数据结构07-散列(自定义HashSet)
散列是什么?散列是使用一个散列函数,将一个键映射到一个索引;可以这么理解,ArrayList使用0-N为索引来保存N-1个数据,而散列实现的集合使用经过散列函数处理过的索引来保存数据,如此一来,ArrayList中的数据在内存中是连续的,而散列实现的集合就不一定了。散列的缺点与缺点:优点:插入、更新、删除、查找单个数据速度快,均是O(1)的算法复杂度;缺点:不能有重复数据...原创 2018-09-04 20:38:26 · 253 阅读 · 0 评论 -
数据结构05-二叉查找树(BST)
二叉查找树是树中最基础的,具有如下定义:1.每个根节点最多拥有2个子节点;2.子节点分为左子节点和右子节点,假设根节点为x,左子节点为y,右子节点为z,则必须满足z>x>y; 根据如上的定义可以有如下推论:1.高度为n的二叉树最多由个结点构成,故而,二叉树的平均深度是;2.一个结点左边的所有子节点都小于它,右边则大于它; 对于二叉查找树而言,查找元素是十...原创 2018-08-23 13:14:16 · 224 阅读 · 0 评论 -
数据结构04-栈和队列
至此,数据结构中最基础的三个(表、栈、队列)已经结束了,由于栈和队列也是基于表结构,所以他们均可以使用数组或者链表实现,如果你可以自行实现动态数组和单链表那么基本的栈和队列你一定可以自行实现;栈的特点:LIFO(last in first out,即先进后出),也就是说最先插入的数据只能最后被删除或访问,对于之前实现的动态数组和链表而言,只需要隐藏掉一些方法即可,例如MyArrayList...原创 2018-08-23 12:41:14 · 133 阅读 · 0 评论 -
数据结构03-双向链表
之前有说过链表的首尾操作是十分快速,其实这句话不准确,对于单链表而言,只有一侧的操作快速,另一侧的操作依旧需要大量的移动指针(如果数据多的话);双向链表与单向链表的区别:1.增加了一个指针域保存上一个结点,内存占用大于单链表;2.首尾两侧操作都很快速,而单链表只能保证一侧; 接下来实现一个双向链表:1.定义MyList接口,提供线性表操作规范:见作者的第一篇博客,《数据...原创 2018-08-23 11:07:12 · 107 阅读 · 0 评论 -
数据结构02-单链表
上一篇文章讲述了动态数组ArrayList的简单实现,这次讲述一下单链表这种链式的存储结构,在此之前先弄懂以下几个基本问题:1.什么是单链表?是一种链式存储的数据结构,具有指针域和节点域两块内存空间,相对于其他链表来说,单链表只有一个指针域,且总是指向下一个结点(循环链表可以指向前面的结点);2.与动态数组相比,有什么优势,什么劣势?优势:在于首尾元素的插入与删除和不损性能的长度扩...原创 2018-08-23 08:21:37 · 120 阅读 · 0 评论 -
数据结构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 · 308 阅读 · 0 评论 -
SpringBoot实现短信发送
开发工具:IDEA、Gradle1.由于笔者使用阿里云的短信接口,所以需要去阿里云获取相关服务支持,每个新用户都有免费的初始条数,之后需要简单的配置签名与信息模版和AccessKey;2.导入相关jar包,在build.gradle文件内加入如下坐标: // 短信支持 implementation('com.aliyun:aliyun-java-sdk-core:3.7...原创 2018-10-30 21:18:40 · 5463 阅读 · 0 评论 -
Redis基本概述
Redis的相对于传统关系型数据库来说具有高性能的读写效率,有效弥补了传统数据库的读写短板,对于一个并发量较大的系统来说,使用Redis是非常必要的; 1.Redis高性能的原因:基于ANSIC语言编写,接近于汇编语言的机器语言; 基于内存的读写,这是最关键的; 数据结构简单,规则较少; 2.Redis在Web项目中的应用场景:缓存常用的数据,起到实时缓存的效果,有效降低...原创 2018-11-12 20:29:46 · 140 阅读 · 0 评论 -
Redis实时缓存的一点小总结
笔者最近在写一个关于博客系统的毕业设计,其中用到了Reis实时缓存,对于一个博客首页信息来说,需要分页展示一些博客信息,而这些信息的变化性不是很大,所以采用Reis实时缓存可以有效缓解数据库访问压力;对于笔者的博客系统中的Reis实时缓存来说,笔者考虑的最佳Redis数据类型是字符串和链表。首先来分析下二者的优劣:字符串类型:可以将分页数据按照“页数-数据(list集合)”的形式保存,...原创 2018-11-12 17:52:48 · 2999 阅读 · 0 评论 -
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 · 2866 阅读 · 0 评论 -
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 · 212 阅读 · 0 评论 -
java模拟http请求
HttpClient是Apache Jakarta Common下的子项目,支持HTTP协议最新的版本和建议,原文地址如下:https://blog.csdn.net/zhuwukai/article/details/78644484转载 2018-09-06 21:05:01 · 463 阅读 · 0 评论