- 博客(48)
- 收藏
- 关注

原创 三层架构 与 MVC详解
MVC早期只有servlet,只能使用response输出标签数据,非常麻烦, 后来又jsp,简化了Servlet的开发,如果过度使用jsp,在jsp中即写大量的java代码,有写html表,造成难于维护,难于分工协作。最后java的web开发,借鉴mvc开发模式,使得程序的设计更加合理性1.对MVC的解释:M:Model,模型。JavaBean① 完成具体的业务操作,如:查询数据库,封装对象② 简单地说,M就是数据模型。比如你设计一个User对象,包含username和password属性
2020-07-20 15:04:29
1346

原创 Http一系列问题
一. 概念1. Hyper Text Transfer Protocol 超文本传输协议传输协议:定义了,客户端和服务器端通信时,发送数据的格式特点:1. 基于TCP/IP的高级协议(tcp 三次握手 安全的)2. 默认端口号:803. 基于请求/响应模型的:一次请求对应一次响应4. 无状态的:每次请求之间相互独立,不能交互数据2. 历史版本:1.0:每一次请求响应都会建立新的连接1.1:复用连接二. 请求消息数据格式1. 请求行格式请求方式 请求url 请求协议/版本
2020-07-03 10:47:02
1538

原创 JAVA实现AVL树的重构,解决因为添加和删除导致的失衡问题
AVL树特点(1)每个节点的平衡因子只可能是-1,0,1(否则失衡)。(2)每个节点的左右子树高度差不能超过1。(3)搜索、添加、删除的时间复杂度和高度差不多为 O(log n)。为什么使用AVL树二叉搜索树对节点的删除和添加都有可能让二叉树退化为链表,这样二叉搜索树的高度就变得很高,直接导致了搜索、添加、删除的时间复杂度变高。所以我们考虑再添加删除后,使用尽量少的调整让树的高度变小,达到适度的平衡。进而提高删除,搜索,添加的效率。重构代码AVL树是BST(二叉搜索树)的子类,BST代码在之
2020-05-21 20:41:30
761
原创 React学习案例
看视频学习的react基础,学习的过程中做了一些案例进行辅助学习,在此记录,方便自己回顾这里写目录标题1 react 初步使用2 创建虚拟Dom的两种方式2.1 使用jsx创建2.2 使用js创建3 虚拟Dom和真实Dom区别4 jsx语法规则4.1 jsx语法规则4.2 jsx语法练习5 文件中定义组件5.1 函数式组件5.2 类式组件6 组件实例的三大属性state6.1 js原生事件绑定6.2 state标准方式6.3 state简写方式7 组件实例的三大属性props7.1 props的基本使用7
2021-07-04 23:34:59
1130
5
原创 HashSet底层原理解密详解
了解完了Hashmap,今天来看一看Hashset。应该都知道List和Set都实现自Collection,List保证元素的添加顺序,元素可重复。而Set不保证元素的添加顺序,元素不可重复。上图中可以得知Set在Collection家族中的位置,有两个很重要的实现HashSet和TreeSet。一个小例子看第一行代码Set<String> strSet = new HashSet<>();//new了一个HashSetnew了一个Hashset,即在内存空间中开辟
2020-10-17 15:20:26
1136
原创 哈希表2--Hashmap的实现详解
一,前言之前的文章哈希表,大体介绍了哈希表的结构,和哈希冲突的解决,以及各种数据类型如何生成哈希值。现在来一步一步的实现hashmap。二,大体框架1.Map接口创建众所周知hashmap 是对接口 map的实现,首先我们创建一个接口;public interface Map<K, V> { int size(); boolean isEmpty(); void clear(); V put(K key,V value); V get(K key); V remove(K
2020-10-17 11:37:55
618
原创 Java中和对象有关的的内存图
一.Java的内存划分Java的内存就像一间房子的划分一样,分为厨房,客厅,卧室。每个划分区域各司其职。Java的内存被划分为五个部分。1.栈(Stack)存放的都是方法中的局部变量。方法的运行一定是在栈中的。局部变量:方法的参数,或者是方法{}内部的变量。局部变量的特点:有作用域,一旦超出作用域,就立刻从栈中消失。2.堆(Heap)凡是new出来的东西,都存在于堆中。堆内存中的东西都有一个16进制的地址值。堆内存里存放的数据都有默认的值;—整数的默认值为0—浮点数的默认值为0
2020-09-11 09:04:53
469
原创 Java中数组在内存中的图解
一.Java的内存划分Java的内存就像一间房子的划分一样,分为厨房,客厅,卧室。每个划分区域各司其职。Java的内存被划分为五个部分。1.栈(Stack)存放的都是方法中的局部变量。方法的运行一定是在栈中的。局部变量:方法的参数,或者是方法{}内部的变量。局部变量的特点:有作用域,一旦超出作用域,就立刻从栈中消失。2.堆(Heap)凡是new出来的东西,都存在于堆中。堆内存中的东西都有一个16进制的地址值。堆内存里存放的数据都有默认的值;—整数的默认值为0—浮点数的默认值为0
2020-09-10 16:04:33
790
原创 哈希表1--初识哈希表、哈希冲突的解决方案、哈希函数、各种类型的数据如何生成哈希值
一,前言前说TreeMap添加,删除,搜索的时间复杂度都是 O(logn),效率算是比较高的了。但是TreeMap有约束条件1). Key必须具备可比较性2).元素分布是有序的但是在实际开发中我们的Key不具有可比较性,Map中的元素分布也不需要顺序。不考虑顺序,不考虑Key的可比较性,Map有更好的实现方案,平均复杂度可以达到O(1)级别。就是使用哈希表来实现Map。二,初识哈希表哈希表处理数据的流程如下我们拥有如下数据哈希表添加、搜索、删除的步骤都是类似的1).利用哈希函数生成Key对
2020-08-20 14:21:52
994
2
原创 JAVA实现红黑树重构 详解
一,红黑树的性质红黑树也是一种自平衡的二叉搜索树红黑树必须满足如下五条性质(1)节点是 RED 或者 BLACk(2)根节点是 BLACK(3)叶子节点都是 BLACK(4)RED 节点的子节点是 BLACK(5)从任一节点到叶子节点的所有路径都包含相同数目的 BLACK 节点。二,红黑树和B树的等价变换1.如何变换红黑树和 4阶B树有等价性质BLACK 节点和它的 RED 子节点融合在一起,形成一个B树节点红黑树的 BLACK 节点个数和 4 阶B树的总结点个数相同有人会
2020-08-13 16:35:27
256
原创 Filter过滤器案例1 -- 实现登入验证
需求:访问服务器资源。验证其是否登录如果登录了,则直接放行。如果没有登录,则跳转到登录页面,提示"您尚未登录,请先登录"。分析:1.首先我们要判断,浏览器访问的是否是和登入有关的资源。是:放行 (访问如如登入页面)不是:判断是否登入(访问如其他内部资源)2.判断是否登入(判断session中有没有name 等于 user的)有:放行没有:重定向到登入页面3.注意:判断是否包含登录相关资源路径,要注意排除掉 css/js/图片/验证码等资源,不然的话这些静态资源会在再次访问登入页面
2020-07-22 14:00:17
1185
原创 Java web笔记 (13) -- Filter 过滤器详解
一. 概念:生活中的过滤器:净水器,空气净化器,土匪、web中的过滤器:当访问服务器的资源时,过滤器可以将请求拦截下来,完成一些特殊的功能。过滤器的作用:一般用于完成通用的操作。如:登录验证、统一编码处理、敏感字符过滤…二. 快速入门:1. 步骤:定义一个类,实现接口Filter复写方法配置拦截路径web.xml注解2. 实现:JSP页面最终输出如果我不放行的话,只会出现空白页面。...
2020-07-21 11:32:53
394
原创 Java web笔记 (12) -- JSTL详解
一. 概念:JavaServer Pages Tag Library JSP标准标签库是由Apache组织提供的开源的免费的jsp标签 <标签>二. 作用:用于简化和替换jsp页面上的java代码三. 使用步骤:导入jstl相关jar包,放在web-inf 下的lib目录引入标签库:taglib指令: <%@ taglib %>使用标签4. 常用的JSTL标签1. if:相当于java代码的if语句属性:test 必须属性,接受
2020-07-18 14:25:58
217
原创 jstl 的jar包导入到WEB-INF下的lib,idea依然不能识别的解决方法
错误的情况是这样的 已经导入了jstl标签库,但是在输入uri的时候,不识别(也就是不跳出uri)已经放好了jar包我这个是在弄好之后截图的,没弄好的时候死活都跳不出uri,然后我自己硬输入,idea也不识别 发生这种情况的原因是你只是把jar包放好了,但是你没有告诉idea你弄好了。所以我们导入一下jar包,让idea识别即可先点击project structure我们要为项目添加一个jstl库找到你放置jstl标签的地方,点击确定输入library的名称,点击确定在勾选一.
2020-07-18 11:58:42
2404
原创 Java web笔记 (11) -- EL表达式详解
为什么要学习EL表达式和JSTL表达式??答:前面我们了解了mvc的 开发模式,其中有一点,前端页面要和后端的java 分离。jsp作为一个VIEW,尽量只做展示数据的工作。但是有时候我们需要在jsp中写少量的java代码,这时我们就可以用EL表达式和JSTL表达式替换掉少量的JAVA代码EL表达式一. 概念:Expression Language 表达式语言二. 作用:替换和简化jsp页面中java代码的编写三. 语法:${表达式}四. 注意:jsp默认支持el表达式的。如果要忽略el表达
2020-07-17 14:38:53
367
原创 Java web笔记 (10) -- MVC模式
MVC: 1. M:Model,模型。JavaBean * 完成具体的业务操作,如:查询数据库,封装对象 2. V:View,视图。JSP * 展示数据 3. C:Controller,控制器。Servlet * 获取用户的输入 * 调用模型 * 将数据交给视图进行展示过程:首先客户端请求服务器,controller (我们一般使用servlet 作为controller)获取客户端的输入,controller再调用model(JavaBean)完成业务操作。model操作
2020-07-17 10:32:40
148
原创 Java web笔记 (9 ) -- session 服务端会话技术
Session一. 概念:服务器端会话技术,在一次会话的多次请求间共享数据,将数据保存在服务器端的对象中。HttpSession二. 快速入门:获取HttpSession对象:HttpSession session = request.getSession();使用HttpSession对象:Object getAttribute(String name) //获取void setAttribute(String name, Object value) //
2020-07-15 15:32:30
191
原创 Java web笔记 (8) -- JSP
JSP 现在用的比较少了,现在大都用是前后端分离,写个笔记做个了解吧1. 概念:Java Server Pages: java服务器端页面可以理解为:一个特殊的页面,其中既可以指定定义html标签,又可以定义java代码用于简化书写!!!2. 原理JSP本质上就是一个Servlet3. JSP的脚本:JSP定义Java代码的方式<% 代码 %>:定义的java代码,在service方法中。service方法中可以定义什么,该脚本中就可以定义什么。<%! 代码
2020-07-15 10:16:41
141
原创 Java web笔记 (7) --会话技术Cookie
会话技术1. 会话:一次会话中包含多次请求和响应。 * 一次会话:浏览器第一次给服务器资源发送请求,会话建立,直到有一方断开为止2. 功能:在一次会话的范围内的多次请求间,共享数据3. 方式: 1. 客户端会话技术:Cookie 2. 服务器端会话技术:SessionCookie:一. 概念:客户端会话技术,将数据保存到客户端二. 快速入门:1. 使用步骤: 1. 创建Cookie对象,绑定数据 * new Cookie(String name, String value)
2020-07-14 20:21:32
277
原创 Java web笔记 (6) --- ServletContext对象:
ServletContext1. 概念:代表整个web应用,可以和程序的容器(服务器)来通信2. 获取:两种方法都会返回同一个值 1. 通过request对象获取 request.getServletContext(); 2. 通过HttpServlet获取 this.getServletContext();结果3. 功能(1) 获取MIME类型:MIME类型:在互联网通信过程中定义的一种文件数据类型获取:String getMimeType(String file)格式
2020-07-09 09:40:59
209
原创 Java web笔记 (5) --- Response对象详解
Response对象一. 功能:设置响应消息设置响应行1. 格式:HTTP/1.1 200 ok2. 设置状态码:setStatus(int sc)设置响应头:setHeader(String name, String value)设置响应体:使用步骤:获取输出流字符输出流:PrintWriter getWriter()字节输出流:ServletOutputStream getOutputStream()使用输出流,将数据输出到客户端浏览器二.案例1.重定向 (
2020-07-08 21:33:38
347
原创 Java web笔记 (4) --- Request超详细讲解
Request一.request对象和response对象的原理request和response对象是由服务器创建的。我们来使用它们request对象是来获取请求消息,response对象是来设置响应消息服务器对请求和响应处理逻辑如下:...
2020-07-05 16:46:58
671
原创 Java web笔记 (2) --- Servlet知识点
Servlet概念:运行在服务器端的小程序 (server applet)* Servlet就是一个接口,定义了Java类被浏览器访问到(tomcat识别)的规则。* 将来我们自定义一个类,实现Servlet接口,复写方法。动态资源应该有逻辑性(张三欢迎你 或者 李四欢迎你)我们用java来实现逻辑性,java代码封装在java类中。图中的java类没有main方法,必须依赖服务器才能运行。java要有一定的规范和规则,Tomcat才能识别执行他。此时定义规则的servlet接口就出现了。
2020-07-02 20:48:31
221
原创 Java web笔记 (1) --- Web相关概念与Tomcat的一系列问题
Web的相关概念软件架构1. C/S:客户端/服务器端2. B/S:浏览器/服务器端(javaweb重点所学)资源分类静态资源:所有用户访问后,得到的结果都是一样的,称为静态资源.静态资源可以直接被浏览器解析如: html,css,JavaScript动态资源:每个用户访问相同资源后,得到的结果可能不一样。称为动态资源。动态资源被访问后,需要先转换为静态资源,在返回给浏览器如:servlet/jsp,php,asp…网络通信三要素IP:电子设备(计算机)在网
2020-06-30 21:19:49
136
原创 JAVA搜索二叉树的重构,比较器的设计,添加方法,删除方法,判断元素是否存在于树中
~~接着实现搜索二叉树,BST继承了BinaryTree(写在另一篇中了),由于是继承二叉树,搜索二叉树中只写了其特有的方法。本文章仅供学习参考使用,转载附命出处。__方法包括:添加方法,删除方法,判断结点是否存在的方法。代码中BST的一个构造方法中需要加入比较器。为了防止是对引用数据类型进行比较多次比较。意思大概是这样的,如果你在树的初始化中添加比较器,那么我们就按照比较器的比较逻辑来对比。...
2020-04-27 21:59:06
335
原创 JAVA二叉树的重构,设计与增强遍历接口,找前驱,找后继,判断是否为完全二叉树,非递归求树的高度
__ 最近复习到了搜索二叉树,实现了搜索二叉树的一些主要的方法。写完后代码十分繁杂。于是对代码进行重构,分为Binarytree(父类),和BTS(子类)。本代码仅供学习参考使用,转载请附出处。~~Binary实现的主要方法有:求树的大小,求树是否为空,树的清空,前序遍历,中序遍历,后续遍历,层序遍历,求树的高度,求前驱,求后继,求是否为完全二叉树,以及简单的打印树状二叉树其中加入了Visit...
2020-04-27 21:41:12
230
原创 常见排序算法之基数排序详解
基数排序是一种非比较排序,它属于分配式排序(distribution sort)。基数排序是一种高效的排序算法,它可以突破比较类排序算法的极限(nlogn),其时间复杂度可以表示为O(Kn)。其中n就是待排序序列的元素个数,K是数字的位数。1. 算法思想算法思想是这样的,说白就是先排序个位,在排序十位…如图中数组,1.首先确定排序次数:最大值几位数就要排序几次,图中数组最大值为345需要排...
2020-03-17 17:51:28
1563
原创 常见排序算法之归并排序详解JAVA实现
1.归并排序简介_ 归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。归并排序是一种稳定的排序方法。_简而言之:== 1. 把数组拆分2. 然后把数组合...
2020-03-16 18:15:01
744
原创 常见排序算法之快速排序详解java实现
快速排序算法是分治法的一个典型实例,也是冒泡排序的改进,算法的思维逻辑也挺容易理解的。算法思路我个人把快速排序思路分成以下的三个部分:1. 基准数的选取,一般来说我们把数组(或者分区)的第一个数作为基准数2. 将比基准数大的都放置在它的右边,将比基准数小的都放置在它的左边,以基准数为分界线,原来的数组被分成了左右两个分区3.左右两个分区 分别重复步骤1,2,直到每个分区中只有一个数思路...
2020-03-12 20:07:32
489
原创 买股票的最佳时机三种解决方法java实现
昨天在力扣遇到的这个题目,我自己使用的超级蠢的是暴力法,然后优化,两个for循环变一个,后来看了别人的解题思路,有一个很有趣的地方。一个问题如果换个思考问题的角度,也许就能找到更高效的方法,我觉得对我以后解题会有帮助,记录之。我自己也是个初入坑,学过算法设计分析但是上课没怎么好好听。题目如下1.暴力解题法昨天在力扣遇到的这个题目,我自己使用的是暴力法,就是拿第 i 天股票价格减去前 i -...
2020-03-10 17:59:26
459
1
原创 动态规划入门详解java实现
一到经典且简易的动态规划问题 5 //表示三角形的行数 接下来输入三角形 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5在上面的数字三角形中寻找一条从顶部到底边的路径,使得路径上...
2020-03-09 09:52:08
1441
原创 常见排序算法之堆排序
1.简介 堆排序是指利用堆这种数据结构所设计的一种排序算法。2.堆排序中大堆和小堆 大堆:根节点比子节点大 小堆:跟节点比子节点小3.核心思想 数组转完全二叉树,先把待排序的序列构成一个大顶堆, 将堆顶根节点和末尾节点互换 把剩下的n-1个元素重新构造成大顶堆, 再次交换堆顶根节点和末尾节点.... 重复操作直到最后只剩下一个数4.步骤 (1).首先构造大堆 (2)...
2020-03-07 11:48:17
157
原创 常见排序算法之二分插入排序算法
1.算法思路是在插入第i个元素时(i前面的元素必定是有序的),对前面的0~i-1元素进行折半,先跟他们中间的那个元素比,如果小,则对前半再进行折半,否则对后半进行折半,直到left>right,然后再把第i个元素前1位与目标位置之间的所有元素后移,再把第i个元素放在目标位置上。2.特点分析二分法直接插入排序算法是插入排序的升级版本,但是时间复杂度和直接插入算法一样都是O(n²)...
2020-03-06 12:31:41
1655
原创 常见排序算法之希尔排序算法
1.希尔排序简介1.介绍: 希尔排序(Shell's Sort)是插入排序的一种又称“缩小增量排序”, 是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法2.核心思想: 希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序; 随着增量逐渐减少,每组包含的关键词越来越多, 当增量减至1时,整个文件恰被分成一组,算法便终止 3.空间...
2020-03-03 22:23:15
253
1
原创 常见排序算法之直接插入算法
最近在复习各类常用算法,从排序算法开始。插入排序的直接插入排序算法,算法思路相对简单,适合于小规模的或者有序性比较高的数据集合,核心思想:其基本操作是将一条记录插入到已排好的有序表中,从而得到一个新的、记录数量增1的有序表。1.思路解析如下:原素组为: 9 3 2 6 102.代码如下import java.util.Arrays;/* 直接插入算法 ...
2020-03-01 23:25:28
279
原创 JAVA数据结构------------------拓扑排序
拓扑排序介绍拓扑排序是一个比较常用的图论算法,经常用于完成有依赖关系的任务的排序。比如如下图例题:在图中,v2要想执行就必须先执行v3和v1,v0事件就可以直接执行,不需要依赖其他事件是否执行完成。依赖关系就好比打游戏,你要先选择英雄,才能进入游戏,v0就是选择英雄,v4就是进入游戏这个样子。拓扑排序就是来解决这样的问题,在不影响依赖关系的基础上,将图遍历。代码实例我们就以上面的例题为例...
2019-10-23 22:36:45
253
原创 JAVA数据结构----------Dijstra(迪杰斯特拉)图最短路径算法
算法简介迪杰斯特拉(Dijkstra)算法是典型最短路径算法,用于计算一个节点到其他节点的最短路径。它的主要特点是以起始点为中心向外层层扩展(广度优先搜索思想),直到扩展到终点为止,是贪心算法的一种,但由于dijkstra算法主要计算从源点到其他所有点的最短路径,所以算法的效率较低。算法思路步骤下述代码是根据c语言改编过来的,大体思路如下1.开始构建shortTablePath[]数组,...
2019-10-19 14:55:07
383
原创 JAVA数据结构------------超详细讲解Kruskal(克鲁斯卡尔算法)图的遍历和最小生成树
最近复习到了数据结构中图的遍历和最小生成树部分,我在这里记录用java写的Kruskal算法,方便自己回顾,并且与他人交流学习。关于Kruskal算法的理论部分我就不再陈述了 直接上代码:/** * * 使用克鲁斯卡尔算法来实现图的最小生成树 * * 克鲁斯卡尔锁使用的时边集与普里姆算法的顶点集不同,因此不能使用临接矩阵来表示图 * * 算法思想:1.先将边按照 权值大小 ...
2019-10-11 17:47:02
319
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人