Java
二十六桥明月夜
生命不息,奋斗不止!
展开
-
剑指Offer68-II:二叉树的最近公共祖先(Java)
题目描述:解题思路: 这道题和上道题不一样,上一道是二叉搜索树,所以树的元素是有规律的,而这道题是二叉树,树里面的元素是没有规律的。所以要解决这道题不能根据规律去解答,我们可以通过递归的方法去解决它。首先从上向下遍历二叉树,比较每个结点的值是否是p,q的值,然后把这个值返回到上一层。当某个结点的左右子树中分别存在p,q结点,且不在同一侧,则说明这个结点是最近公共祖先。如果p或者q结点为空,则证明p和q都在同一列,因为p,q其中有一个在最上面,所以返回后下面的就没有遍历到了。所以不为空的结点就是它原创 2020-09-28 11:42:23 · 142 阅读 · 0 评论 -
剑指Offer64:求1+2+...+n(Java)
题目描述:解题思路: 首先定义res存储1加到n的和。总体还是使用递归的思想,但是因为不能使用if条件判断递归跳出条件,所以这里使用&&操作跳出循环。当n大于1的时候,&&前面为true,所以可以执行sum(n - 1),如果&&前面为false,所以就跳出循环。代码实现:class Solution { int res = 0; public int sumNums(int n) { boolean x = n原创 2020-09-23 11:09:34 · 194 阅读 · 0 评论 -
剑指Offer63:股票的最大利润(Java)
题目描述:解题思路: 这道题可以用动态规划的方法去求最大利润。首先定义一个dp数组存放利润。假设第一天买进,因为第一天买进不卖出,所以利润为0,即dp[0] = 0;设置一个min表示最小值,因为只有设置最小值,我们才知道什么时候买进是最低价。思路是:今天卖出的利润和前一天卖出的利润进行比较,哪个利润大就存储哪天的利润。返回最后一天的利润就是股票的最大利润。代码实现:class Solution { public int maxProfit(int[] prices) {原创 2020-09-23 10:41:30 · 356 阅读 · 0 评论 -
ArrayList的底层源码剖析
最近也是回去看了看ArrayList相关的源码,觉得受益匪浅。还是写篇博客记录一下。 从源码的开头头看,ArrayList定义了几个属性。private static final int DEFAULT_CAPACITY = 10;private static final Object[] EMPTY_ELEMENTDATA = {};private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};tra原创 2020-09-22 19:52:54 · 125 阅读 · 0 评论 -
Java基础总结6(面向对象三大特性、常用修饰符、抽象类、接口)
文章目录面向对象三大特性封装性继承性多态性常用修饰符访问控制修饰符public、private、protected、default非访问控制修饰符staticfinalabstract抽象类和抽象方法接口(interface)面向对象三大特性封装性概念:把类当中的一些重要信息保护起来,不暴露给外界体现:private关键字设置属性、方法私有继承性概念:子类继承父类,获得父类的一些属性和方法体现:子类extend父类,实现类implements接口注意:1、继承类是单继承,继承接口是多继承原创 2020-08-16 22:46:09 · 132 阅读 · 0 评论 -
Java基础总结5(匿名对象、static关键字、常用工具类api)
文章目录匿名对象static关键字常用工具类apiScanner类Random类ArrayList类(集合)String类Arrays类Math类匿名对象创建对象的标准格式:类名 对象名 = new 类名称();匿名对象就是只有右边的对象,没有左边的名字和赋值运算符。例子:new 类名称();注意事项:匿名对象只能使用唯一一次,下次再创建对象已经不是原来的对象了。匿名对象的具体内容存放在堆内存中,栈内存中并没有变量存放它在堆内存中的地址。static关键字一旦用了static关键字修饰,那么原创 2020-08-15 00:15:52 · 206 阅读 · 0 评论 -
Java基础总结4(面向对象、类、对象、封装性、private和this关键字、构造方法)
文章目录面向过程和面向对象类和对象成员变量和局部变量的区别面向对象三大特性之封装性private(私有)关键字的作用及使用this关键字作用构造方法面向过程和面向对象面向过程(强调步骤):就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步步实现。面向对象(强调对象):就是把问题事务拆分成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描述某个对象在解决问题的步骤中的行为面向对象的三大基本特征:封装、继承、多态类和对象类和对象:类:是一组相关属性和行为的集合,可以看成是一类事物的模板原创 2020-08-13 21:14:17 · 279 阅读 · 0 评论 -
SpringBoot如何解决跨域问题(CORS)
在前后端分离的项目中,通常会遇到跨域的问题。什么是跨域呢?就是两个域的协议号、主机号、端口号有其中一个不相同时,此时需要他们之间进行数据交换,这时候就涉及跨域问题。通常网站请求是不允许跨域的,因为跨域是不安全的。 那当需要跨域的时候,怎么去解决这个问题呢? 有三种方案可以参考: 1、使用JSONP的方式进行数据请求; 2、使用Nginx的方式进行反向代理; 3、使用CORS的方式进行跨域资源共享; 下面我们就介绍一下在SpringBoot如何使用COR原创 2020-08-13 13:53:26 · 621 阅读 · 0 评论 -
Java基础总结3(方法、方法重载、循环结构、数组)
方法:方法就是将一个功能抽取出来,单独定义在一个大括号里,形成一个单独的功能。方法的定义:修饰符 返回值类型 方法名(参数类型){代码…return ;}方法注意事项:1、方法应该定义在类当中,但是不能在方法内部定义方法。2、方法定义的前后顺序无所谓。3、方法定义后不会执行,如果希望执行,一定要进行调用。4、如果方法有返回值,那么必须写上return返回值,不能没有。5、return后面返回的数据,必须和方法的返回值类型对应。6、对于一个void没有返回值的方法,可以不用写ret原创 2020-08-10 22:28:07 · 139 阅读 · 0 评论 -
Java基础总结2(数据类型转换、ASCII码、运算符、方法)
数据类型转换分类:自动类型转换(隐式转换)、强制类型转换(显示转换)隐式转换特点:1、代码不需要进行特殊处理,自动完成2、当右边赋值的数在左边数据类型的范围内,赋值的数会自动转换为左边的数据类型例如:short a=1;int b = a;//b 自动转换为int类型显示转换特点:1、代码需要进行特殊处理,不能自动完成2、格式:范围小的类型 变量名 = (范围小的类型) 原来范围大的数据例如:int a=1;short b=(short)a;//需要强制转换为short类型注意事项:1、原创 2020-08-05 22:20:25 · 307 阅读 · 0 评论 -
Java基础总结1(JVM、JRE、JDK差异、关键字、标识符、数据类型)
JVM,又叫Java虚拟机。我们所编写的Java代码都运行在Java虚拟机上。 JRE,是Java程序的运行环境,包含JVM和运行时所需要的核心类库。 JDK,是Java程序的开发工具包,包含JRE和开发所需要的工具类库。 范围大小:JDK>JRE>JVM 关键字:是对Java编译器有特殊含义的字符串,告诉编译器其声明的变量类型、类、方法特性等信息。如public、private、class等等。 关键字的特点:完全小写的纯英文字母 标识符:程序中程序员自己定义的字原创 2020-08-01 20:32:13 · 169 阅读 · 0 评论 -
Javaweb--超简单实现图形验证码功能
图形验证码是网站登录注册中一个常能见到的东西,也十分实用。最近也是做了一下这个验证码小案例,希望能帮到有需要的朋友。 最终效果图: 上面的验证码是后台随机生成的,以流的方式通过响应发送给前端的,点击验证码可以切换新的验证码。我是通过集成第三方的sdk完成的,前端使用Layui+JQuery,后端使用的是SpringBoot。 第三方sdk依赖 <dependency> <groupId>cn.hutool</group原创 2020-07-25 11:53:41 · 811 阅读 · 0 评论 -
Javaweb--通过网页实现对数据库的增删查改
文章目录Javaweb--通过网页实现对数据库的增删查改1、功能需求2、技术选型2、最终效果图3、数据库准备4、前端开发5、后端开发Javaweb–通过网页实现对数据库的增删查改通常在写一些后台管理系统的时候,一定会有关于数据表格的增删查改的功能实现。最近也是闲来无事,做了这个小案例,希望能帮到有写这方面需求的朋友们。1、功能需求 这次以单个的员工数据表为例,实现以下功能需求: 1、能够正常从数据库中读取相应数据。 2、设置分页,能够通过点击页码,进行数据更新,同时支持输入页码更新数据原创 2020-07-23 20:07:48 · 11130 阅读 · 11 评论 -
Maven下载jar包太慢!一招教你如何解决
相信很多朋友更新maven项目的依赖时,发现下载jar包太慢了。十几分钟都没有下完,等了很久最后都不能下载完成。这是因为maven项目的中央仓库在外网,下载当然很慢。当然,我也可以换成国内源,这样就快很多了。国内源最出名的就是阿里源,我们改变maven配置的仓库源,只可以很快下载依赖。下面我以IDEA为例,显示一下如何改变仓库源。 1、打开IDEA,点击文件》其他配置》新的project 的默认配置,找到settings.xml文件路径。 2、打开本地目录,打开settings.xml文件。(原创 2020-07-21 12:23:59 · 3280 阅读 · 0 评论 -
你还在手动维护接口文档吗,快来试试Swagger2吧!
文章目录你还在手动维护接口文档吗,快来试试Swagger2吧!1、Swagger2简单介绍2、SpringBoot整合Swagger22.1、引入依赖2.2、设置Swagger2配置类2.3、访问页面你还在手动维护接口文档吗,快来试试Swagger2吧!1、Swagger2简单介绍 现在前后端分离逐渐成为了Web项目的一种标准开发方式,就是前端和后端由不同的人员开发,前端人员负责前端的项目开发,后端人员负责后端项目的开发。但是与此同时,项目开发的沟通成本也随之升高。主要在于前后端人员对于WebApi原创 2020-07-20 21:09:23 · 434 阅读 · 0 评论 -
Hibernate Validator:一款优雅的验证框架
文章目录Hibernate Validator:一款优雅的验证框架1、Hibernate Validator的简单介绍2、SpringBoot集成Hibernate Validator2.1、引入依赖2.2、使用Validator和手写验证对比3、Validator的全局异常捕获4、Validator的分组验证Hibernate Validator:一款优雅的验证框架1、Hibernate Validator的简单介绍 平常的项目当中,无论是从controller接受传递来的数据,还是内部方法接口的原创 2020-07-19 20:27:25 · 456 阅读 · 0 评论 -
你还在用控制台输出?快来学学这款日志框架吧!
文章目录1、前言1.1、为什么需要日志框架1.2、常用日志框架的介绍2、SpringBoot整合Logback2.1、配置logback-spring.xml2.2、常用标签的讲解2.3、效果图1、前言1.1、为什么需要日志框架 刚开始学Java的时候,想看看某个变量的值时,用的最多恐怕就是System.out.println()了吧。但是慢慢地就发现有这样一个问题?如何查看控制台的历史记录呢,能不能把控制台输出的内容保存起来,当有需要地时候去查询呢?嗯,日志框架就是为了解决这个问题的。它把控制台输原创 2020-07-16 20:38:24 · 293 阅读 · 0 评论 -
超容易的druid连接池的使用配置、监控页面配置
发现druid连接池的监控页面使用感良好,虽然之前写的博客有简单介绍过,但还是写一篇博客详细记录一下druid连接池的使用配置、监控页面的配置,包括自己遇到的一些坑。文章目录超详细的druid连接池的使用配置、监控页面配置1、druid连接池简单介绍(官网)2、SpringBoot整合druid连接池2.1、初始化配置连接池2.2、配置监控页面2.3、配置Spring监控(有坑)超详细的druid连接池的使用配置、监控页面配置1、druid连接池简单介绍(官网) druid连接池官网:地址2.原创 2020-07-15 19:53:27 · 1838 阅读 · 1 评论 -
带你了解Thymeleaf
文章目录1、简单了解Thymeleaf2、SpringBoot整合Thymeleaf2.1、导入依赖2.2、配置.properties文件2.3、配置语法提示3、Thymeleaf常用语法3.1、表达式使用3.2、赋值取值3.3、th常用标签1、简单了解Thymeleaf Thymeleaf简单的说,是一种模板引擎。模板引擎就是把模板文件和数据渲染成HTML显示的一种工具。具体可以看下图。常见的模板引擎有Thymeleaf、Freemarker等,而Spring官方推荐使用的是Thymeleaf这种模原创 2020-07-13 23:28:05 · 251 阅读 · 0 评论 -
浅析cookie、session、token的区别
Http协议是什么? HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。简单的说,它是基于现在B/S架构上,出现的一个请求-响应协议。它通常是运行在TCP上,指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。 Http协议它有一个很重要的特点是无状态。无状态就是指它这个协议是没有记忆能力的。你在上一个请求发送的信息,如果在下一个请求中也想获取,就要原创 2020-07-12 12:05:12 · 187 阅读 · 0 评论 -
手把手教你用SpringBoot整合Shiro(Shiro的前世今生)
文章目录手把手教你用SpringBoot整合Shiro1、shiro的前世今生1.1、shiro是什么?1.2、为什么要使用shiro?2、Shiro的运作流程3、实战--SpringBoot如何整合Shiro3.1、准备数据库3.2、引入依赖3.3、编写底层的CRUD方法3.4、设置CustomRealm3.5、设置ShiroConfig配置类3.6、设置CustomSessionManager3.7、编写对应的Controller3.8、测试手把手教你用SpringBoot整合Shiro1、shir原创 2020-07-09 20:33:02 · 263 阅读 · 0 评论 -
带你分析MySQL中的三种连接
MySQL中表连接一直是很多人比较混淆的地方。到底MySQL中有哪几种连接,它们有什么不一样的呢?下面笔者带你一一分析。 什么是表连接?表连接一般体现在表之间的关系上。当需要同时显示多个表中的字段时,就可以用表连接来实现。而表连接中,分为内连接和外连接。外连接中又分为左外连接,右外连接。有些人可能会疑惑,不是还有全外连接吗?是的,在其他的数据库中的确存在全外连接,但是在MySQL数据库中并不存在,所以全外连接我们暂时忽略掉。 内连接 内连接:选出两张表中互相匹配的记录。 SQL语句写法:原创 2020-06-26 17:07:40 · 538 阅读 · 1 评论 -
TortoiseGit的介绍和使用
Git是什么,相信大家都很清楚。Git不就是分布式版本控制系统嘛?那你知道TortoiseGit是什么吗?下面我们就介绍一下TortoiseGit它是什么?如何使用? TortoiseGit其实是一款开源的git的版本控制系统,也叫海龟git。TortoiseGit提供了人性化的图形化界面,不用像Git一样输入许多语句,像git init、git add、git commit这些语句就通通不用记了。轻松使用鼠标,就可以完成代码的提交和上传。对于使用本地Git的新手来说,TortoiseGit的更加简原创 2020-05-28 16:22:03 · 44875 阅读 · 6 评论 -
普通Java项目如何使用Druid连接池
首先我们先说一下,什么是连接池? 连接池是一种创建和管理连接的缓冲池技术,这些连接已经准备好被其他的线程进行调用。 那为什么要使用连接池呢? 我们知道,连接的创建和销毁时需要时间的,而连接池就是在服务器初始化的时候,创建好一些连接,然后把它们放到内存中的连接池里,使用的时候,可以直接从内存中获取。使用完成又归还给连接池。这样从内存中获取和归还连接的效率,远远高高每次连接的创建和销毁,大大提高了服务器的性能,所以使用连接池是很用必要的。 那主流连接池有什么呢? 现在主流连接池有:Dru原创 2020-05-19 23:32:55 · 7014 阅读 · 0 评论 -
关于JDBC使用的一些总结
首先,先说一下jdbc是什么?jdbc是一套统一的接口规范,方便程序员连接数据库,进行数据库的CRUD。 然后,我们怎们怎么使用JDBC呢? 首先,你需要下载JDBC的jar包。以连接Mysql8.0数据库为例,你需要到Mysql的官网下载JDBC的jar包。在下载jar包的时候,要注意jar包的版本,要与你的本地安装的Mysql数据库版本一致,不然就会出错。然后把下载好的jar包导入你的工程,那么准备工作就完成了。 这是我的数据库login表的数据截图:id是int类型字段,name是st原创 2020-05-16 23:24:17 · 514 阅读 · 0 评论