- 博客(124)
- 资源 (2)
- 收藏
- 关注
原创 linux系统下编译redis源文件报错:struct redisServer
问题:今天在学习redis的时候,在linux环境下使用gcc编译redis源文件报如下的错误:解决:通过查阅资料发现,编译redis6.0.9需要使用版本较高的gcc,而CentOS通过命令行下载的gcc版本并不足以支持编译redis源文件,通过查看gcc版本我发现其版本为:再发现问题后,我们直接利用命令行升级我们的gcc编译器,再次进行编译。最终取得成功yum -y install centos-release-scl && yum -y install devtoolse
2020-12-15 23:00:41
349
原创 实现AOP的三种方式
首先。需要导入一个依赖包 <dependencies> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjmatcher</artifactId> <version>1.9.6</version> </dependency&g
2020-12-07 00:15:45
608
原创 Spring依赖注入
依赖注入:构造器通过set方式注入依赖注入:set注入依赖:Bean对象的创建依赖于容器注入:Bean对象种的所有属性,由容器来注入环境搭建:pojo类:@Datapublic class Student { private String name; private Address address; private String[] book; private List< String > hobbys; private Ma
2020-12-05 22:17:10
200
原创 Spring基础配置
别名<!--如果添加别名,我们也可以通过使用别名获取这个对象--><alias name="UserTest" alias="user"/>Bean配置 <!-- id:bean的唯一标识符,也就是相当于我们学的对象名 class:bean对象所对应的全限定名 name:也是别名 --> <bean id="user" class="com.yf.pojo.User" name="user2" />impor.
2020-12-05 16:48:13
96
原创 Spring框架以及IOC思想
Spring简介:简介:Spring是一个轻量级控制反转(IOC)和面向切面(AOP)的容器框架。目的:解决企业应用开发的复杂性功能:使用基本的JavaBean代替EJB,并提供了更多的企业应用功能范围:任何Java应用SSH:Struct2+Spring+HibernateSSM:SpringMVC+Spring+Mybatis导包:<dependency> <groupId>org.springframework</grou
2020-12-05 15:58:34
69
原创 MyBatis缓存
简介:一次查询的结果,给他暂存在一个可以直接取到的地方!—>内存:缓存。我们再次查询相同的数据的时候,直接走缓存,就不用走数据库了。一、什么是缓存?存在内存中的临时数据将用户经常查询的数据放在缓存中,用户去查询数据就不用从磁盘上(关系型数据库数据文件)查询,从缓存中查询,从而提高查询效率,解决了高并发系统的性能问题。二、 为什么使用缓存?减少和数据库的交互次数,减少系统开销,提高系统效率三、什么样的数据能使用缓存?经常查询并且不经常改变的数据。MyBatis缓存My
2020-12-04 19:06:04
58
原创 MyBatis——使用注解开发
一、什么是面向接口编程本质就是解耦、可扩展、提高复用,分层开发中,上层不用管具体的实现,大家都会遵守共同的标砖,使得开发变得更容易,规范性更好。接口从更深层次的理解,应是定义(规范、约束)与实现(名实分离的原则)的分离。接口从本身反映了系统设计人员对系统的抽象理解。二、使用注解开发注解在接口上实现 @Select("select * from user") List< User > getUsers();需要在核心配置文件中绑定接口<mappers&g
2020-12-02 22:39:18
109
原创 MyBatis分页
为什么需要分页减少数据的处理量使用Limit分页语法:select * from user limit startIndex,pageSizeselect * from user limit 3;#[0,3]使用MyBatis实现分页,核心哈还是sql接口 List<User> getUserByLimit(Map<String,Integer> map);Mapper.xml<select id="getUserByLimit" paramet
2020-12-02 21:19:31
102
原创 MyBatis日志工厂
一、 日志工厂如果一个数据库操作,出现了异常,我们需要排错。日志是最好的帮手。过去我们使用sout、debug,而现在可以使用日志工厂。SLF4JLOG4J :需要掌握LOG4J2JDK_LOGGINGCOMMONS_LOGGINGSTDOUT_LOGGING :需要掌握NO_LOGGING在MyBatis中具体使用那一日志实现,在设置中设定!日志工厂的实现:STDOUT_LOGGING <settings> <setting name="lo
2020-12-02 20:38:06
166
原创 MyBatis增删改查实现
增删改查namespace:namespace的包名和Dao/Mapper接口的包名保持一致select:选择查询id:就是对应的namespace中的方法名resultType:Sql语句执行的返回值parameterType:参数类型
2020-12-01 15:24:05
1843
原创 MyBatis基础与配置
什么是MyBatis?MyBatis 是一款优秀的持久层框架。它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。一、如何获得MyBatis?mavengithub二、持久化数据持久化:持久化就是将程序的数据在持久状态和
2020-12-01 11:12:26
142
原创 EL表达式
EL表达式什么是EL表达式,EL表达式的作用?EL表达式的全称是:Expression Language。是表达式语言EL表达式的作用:EL表达式主要代替jsp页面中的表达式脚本在jsp页面中进行数据的输出。因为EL表达式在输出数据的时候,要比jsp的表达式脚本简洁很多。<body><% request.setAttribute("key","值");%>表达式脚本输出key的值是:<%=request.getAttribute("key")%>
2020-11-27 17:39:07
2264
原创 jsp基础
jsp基本知识1.什么是jsp?什么作用?jsp的全称是java serverpages。java的服务器界面jsp的主要作用是代替Servlet程序回传html页面的数据因为Servlet程序回传html页面数据是一件非常繁琐的事情。开发成本和维护成本都极高。jsp如何访问?jsp页面和html页面一样,都是存放在web目录下。访问也跟访问html页面一样。jsp页面的本质jsp页面本质是一个servlet程序当我们第一次访问jsp页面时,tomcat服务器会将jsp页
2020-11-26 20:45:29
89
原创 java.sql.SQLException:Table ‘test.t_user‘ doesn‘t exist Query
今天在项目中测试数据库功能的查询功能时,发现了一个错误:百思不得其解,通过查阅资料,发现此问题是目前所在的库,并不存在我们sql语句中的表,而表就是自己亲手创建的。于是我想到了数据库连接池的配置文件!打开数据库配置文件,发现由于是之前自己在学习数据库连接池的时候写的,这次使用直接粘贴过来了,导致没有修改url=jdbc:mysql://localhost:3306/test?characterEncoding=utf-8中3306/后面的内容,修改为当前需要查询的库时,错误就消失了。...
2020-11-26 01:49:59
7169
13
原创 HttpServletResponse类
HttpServletResponse类的作用:HttpServletResponse类和HttpServletReguest类一样。每次请求进来,Tomcat服务器都会创建一个Response对象传递给Servlet程序去使用。HttpServletRequest表示请求过来的信息,HttpServletResponse表示所有的响应的信息。如果我们需要设置返回给客户端的信息,都可以通过HttpServletResponse对象来设置。两个输出流的说明:字节流:getOutputStream();
2020-11-25 20:20:18
300
原创 HttpServlet类常用方法
常用方法:getRequestURI() 获取请求的资源路径getRequestURL() 获取统一资源定位符(绝对路径)getRemoteHost() 获取客户端的ip地址使用localhost访问,得到的客户端ip地址是===>127.0.0.1使用127.0.0.1访问,得到的客户端ip地址是===>127.0.0.1使用真实ip访问,得到的客户端ip地址是===>真实的客户端ipgetHeader() 获取请求头getMethod() 获取请求的方式GE
2020-11-25 15:37:26
950
原创 http协议
什么是协议?协议是指双方或多方相互约定好,大家都需要遵守的规则叫协议http协议所谓http协议就是指:客户端和服务器之间通信时,发送的数据,需要遵守的协议,叫http协议。http协议中的内容又叫报文。请求的HTTP协议格式服务器给客户端回传数据叫响应客户端给服务器发送数据叫请求,请求又分为GET请求和POST请求GET请求:分为请求行和请求头请求行:①请求的方式 GET ②请求的资源路径[+?+请求参数] ③请求的协议和版本号请求头: key:value组成。不同的键值.
2020-11-24 22:13:01
52
原创 Web工程部署到Tomcat服务器中
如何部署Web工程到Tomcat中第一种方法:只需要把工程的目录拷贝到Tomcat的webApps的目录下。在webApps目录下创建一个book工程访问:http://+服务器ip+:8080/+工程路径第二中部署方法找到Tomcat下的conf目录\Catalina\localhost\下,创建如下的配置文件<?xml version="1.0"?><Context docBase="E:\untitled\JavaWeb\book_static\05_bo
2020-11-24 14:03:44
146
原创 Servlet入门基础
Servlet技术什么是servlet?Servlet是JavaEE规范之一。规范就是接口Servlet是JavaWeb三大组件之一。三大组件分别是:Servlet程序、Filter过滤器、Listener监听器。Servlet是运行在服务器上的小型Java程序,它可以接受客户端发送过来的请求,并响应数据给客户端。手动创建Servlet程序。编写一个类去实现Servlet接口实现service方法,处理请求,并响应数据public class HelloServlet imp
2020-11-24 14:03:16
144
原创 JavaWeb入门以及Tomcat服务器基础
一、JavaWeb的概念1.什么是JavaWeb?JavaWeb是指,所有通过Java语言编写可以通过浏览器访问的程序的总称,叫JavaWeb。JavaWeb是基于请求和响应来开发的。什么是请求?请求是客户端给服务器发送数据,叫请求Request。什么是响应?响应是指服务器给客户端回传数据,叫响应Response。二者关系?成对出现,有请求,就有响应。二、Web资源的分类web资源按实现的技术和呈现的效果的不同,又分为静态资源和动态资源。静态资源:ht
2020-11-23 21:22:32
62
原创 XML文件语法以及解析技术
一、什么是xml?一种可扩展性的标记性语言二、xml的作用?用来保存数据,而且这些数据具有自我描述性它还可以作为项目或者模块的配置文件还可以作为网络传输数据的格式(JSON为主)三、xml语法文档声明<?xml version="1.0" encoding="UTF-8" ?><?xml version="1.0" encoding="UTF-8" ?><!--以上内容就是xml文件的声明version="1.0" 表示xml的版本encodin
2020-11-23 18:03:24
243
原创 leetcode第二题:两数相加
问题:给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -> 8原因:342 + 465 = 807思路:由l1,l2,一起遍历两个链表,并将val相加,添加至
2020-11-20 22:34:13
180
原创 JavaScript基础
简介:JS是弱类型,Java是强类型弱类型就是类型可变。强类型,就是定义变量的时候。类型已确定。而且不可变。特点:交互性(它可以做的就是信息的动态交互)安全性(不允许直接访问本地硬盘)跨平台性(只要是可以解释JS的浏览器都可以执行,和平台无关)使用方法:第一种方法:只需要在head标签中,或者在body标签中,使用script标签来书写JavaScript代码使用script标签引入单独的JavaScript代码文件变量:什么是变量?变量是可以存放某些值的内存的命名。J
2020-11-20 17:19:29
128
原创 leetcode第21题:合并两个有序链表
问题:将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4解答: public ListNode mergeTwoLists(ListNode l1, ListNode l2) { if (l1 == null) { return l2; } if
2020-11-20 14:53:40
70
原创 css样式常用的样式以及选择器
css技术介绍:css是层叠样式的表单。是用于(增强)控制网页样式,并允许将样式信息与网页内容分离的一种标记性语言。语法规则:选择器:浏览器根据“选择器”决定受css样式影响的HTML元素(标签)。属性:是你要改变的样式名,并且每一个值。属性和值都被冒号分开,并由花括号包围,这样就组成了一个完整的样式声明,例如p{color:blue}多个声明:如果要定义不止一个声明,则需要用分号将每个声明分开。虽然最后一条声明的最后可以不加分号。(但尽量在每条声明的末尾都加上分号)...
2020-11-20 13:33:24
262
原创 html常用标签
字体标签font标签是字体标签,它可以用来修改文本的字体、颜色、大小。color属性修改颜色face属性修改字体size属性修改文本大小特殊字符字体‘<’ ===>>> ‘<’;’>‘ ===>>> ’>‘;’空格‘ ===>>> ‘ ’;标题标签:h1到h6都是标题标签h1 最大h6 最小align是对齐属性:left:左对齐right:右对其cen
2020-11-20 02:27:42
58
原创 插值插找(对比二分法查找)
插值查找:二分查找其效率已经远远高于线性查找,但是我们还可以通过插值查找对二分法查找进行优化。在二分查找中,mid是(left+right)/2,我i们可以按比例缩小范围,使得我们可以经过更少的次数完成查找。将mid设置为:left + (right-left)*(value-arr[left])/ (arr[right] - arr[left])。需要注意的是,我们的数组依旧是有序数组,当我们的数组元素全部一样时,此方法不适用。因为除数为0了。代码如下:public static ArrayLi
2020-11-19 13:25:21
446
原创 二分法查找(递归实现)
二分查找给定一个有序数组,在数组中查找是否存在给定的一个整数,如果存在则返回数组中全部等于该数的数的索引。思路:将数组从某个位置一分为2,判断是否大于该位置的数。若等于,则创建一个集合,将该位置的索引放入集合,并向左搜索,若相等,继续将索引放入集合,直到发现一个数小于该数,则停止;之后继续向右搜索,,继续将索引放入集合,直到发现一个数大于该数,则停止,并返回集合。如果发现如果大于,则重复之前的步骤,将后半部分继续按某个位置分为两部分,若小于,也继续重复上面的步骤。最终返回的集合中的元素就是我们想要的一
2020-11-19 12:20:57
1446
原创 基数排序(桶排序)
基数排序:索引待比较数值统一为同样的数位长度,数位较短的数前面补零,然后,从最低位开始,依次进行一次排序。这样从最低位排序一直到最高位排序完成以后,数列就变成一个有效序列。简单来说,就是设置10个桶,将待比较数字的个位拿来比较,按个位的数值依次按0~ 9的不同依次放入桶中,然后再按0~9从桶中按顺序取出,再按十位放、百位、依次进行,直到最大的数,最高位数这一次也完成并按顺序取出,得到的结果就是一个有序数列。在此仅讨论数组中元素为正数,若为负数,则分为负数,正数两部分,负数取绝对值,按以上方法从大到小排好
2020-11-18 21:33:37
109
原创 leetcode第八十八题:合并两个有序数组(两种思路)
问题:给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。说明:初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。示例:输入:nums1 = [1,2,3,0,0,0], m = 3nums2 = [2,5,6], n = 3输出:[1,2,2,3,5,6]分析:今天学习到了归并排序
2020-11-18 15:57:39
188
原创 快速排序思路及代码实现
快速排序基本思想是:通过一趟排序将要排序的数据结构分割成独立的两部分,其中一部分的所有数据都比另外一个部分的所有数据要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归实现,从而达到整个数据变成有序序列。通过八万个数据进行测试,发现其速度约为30毫秒,其速度与希尔排序中的位移法较为接近。public static void QuickSort(int arr[],int left,int right){ int r=right; int l=left
2020-11-18 13:30:02
109
原创 交换式希尔排序与位移式希尔排序
希尔排序:希尔排序也是一种插入算法,它是简单的插入排序经过改进之后的一个更高效的版本,也成为缩小增量排序。希尔排序式把记录按下标的一定增量分组,对每组使用直接插入排序算法排序,随着增量逐渐减少。每组包含的关键词越来越多,当增量减至1时,整个文件被分为一组,算法便中止.交换式希尔排序:通过八万个数据进行测试,时长大概为8秒左右,仅快于冒泡排序public static void shellSort(int[] arr){ int num; int temp=0;
2020-11-18 03:12:11
145
原创 leetcoed第七十题:爬楼梯
问题:假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。示例 1:输入: 2输出: 2解释: 有两种方法可以爬到楼顶。1.1 阶 + 1 阶2.2 阶示例 2:输入: 3输出: 3解释: 有三种方法可以爬到楼顶。1.1 阶 + 1 阶 + 1 阶2.1 阶 + 2 阶3.2 阶 + 1 阶解答:第一次使用递归的思想,发现提交后提示Time Limit Exceeded。之后决定
2020-11-17 23:02:22
92
原创 插入排序及两种不同实现方法对比
插入排序:插入排序的思想:插入排序的基本思想是:把n个待排序的元素看成一个有序表和一个无序表,开始时有序表只包含一个元素,无需表中包含n-1个元素.排序过程中,每次从无序表中取出第一个元素,把他的排序码一次与有序表元素的排序码码进行比较,将其插入到适当的位置,使之成为一个新的有序表用八万个数据进行测试,使用时间为4秒作用,略慢于选择排序,但是比冒泡排序速度要快很多。并在下面会贴出另一种写法,速度会快于选择排序代码如下:public static void insertSort(int[] arr)
2020-11-17 21:00:32
285
原创 选择排序
选择排序:选择排序也是一种简单的排序方法。他的基本思想是:第一次从arr[0]arr[n-1]中选取最小值,与arr[0]交换,第二次从arr[i]arr[n-1]中选取最小值与arr[0]交换,第二次从arr[1]~arr[n-1]中选取最小值与arr[1]交换,通过n-1此,得到一个从小到大的排列。测试八万个数据进行排序,所需要的时间大致为2.5~3秒,相较于冒泡排序,时间降低很多。代码如下:public static void selectSort(int[] arr){ in
2020-11-17 17:58:18
84
1
原创 冒泡排序以及如何优化冒泡排序
冒泡排序:冒泡排序的基本思想是:通过对待排序序列从前往后(从下标较小的元素开始),依次比较相邻元素的值,若发现逆序则交换,使值较大的元素逐渐从前移向后部,就像水底下的泡泡一样逐渐向上冒。测试八万个数组进行排序,使用优化后的代码大致需要20秒代码如下:public static void bubbleSort(int[] arr){ int temp=0; for (int i = 0; i < arr.length-1; i++) { for
2020-11-17 17:49:48
293
1
原创 利用递归回溯解决八皇后问题
八皇后问题:八皇后问题是这样一个问题:将八个皇后摆在一张8*8的国际象棋棋盘上,使每个皇后都无法吃掉别的皇后,一共有多少种摆法?即为每一行,每一列,每一斜线都不能有两个皇后。解决:我们可以利用一个一维数组解决此问题。定义一个长度为8的数组,因为要求每一行只能有一个,于是我们用数组的索引表示行,用索引对应的位置存储的元素代表皇后在列中的位置,通过递归回溯算法,得到全部92种情况下,皇后的位置public class EightQueen { //定义一个max表示工有多少皇后 int
2020-11-17 13:56:25
210
原创 二维数组模拟迷宫
二维数组模拟迷宫1.map表示地图2.i,j表示从地图上的哪个位置开始出发3.如果坐标能到map[8][8]位置,则说明道路能找到。public class mazeTest { public static void main(String[] args) { //定义一个二维数组模拟迷宫 int[][] map=new int[10][10]; //设置迷宫边界 for (int i = 0; i < 10; i++) {
2020-11-16 21:16:18
1023
原创 leetcode第二十题:有效的括号
问题:给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。示例 1:输入: “()”输出: true示例 2:输入: “()[]{}”输出: true示例 3:输入: “(]”输出: false示例 4:输入: “([)]”输出: false示例 5:输入: “{[]}”输出: true解答:利用栈的先进先出,
2020-11-16 13:07:23
92
原创 利用双向链表模拟栈的实现
思路:和利用数组模拟栈的实现本质是一样的。从而实现双向链表的先进后出。class Liststack{ private Listed head=new Listed(null,null,null); private int maxSize; public Liststack(int maxSize){ this.maxSize=maxSize; } private Listed temp=head; public boolean isFul
2020-11-16 01:45:07
207
Tomcat8.0服务器压缩包
2020-11-23
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人