自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(18)
  • 收藏
  • 关注

原创 二进制的加减乘除实现

1. 加法当二进制加法没有进位时,两个数的加法其实就是按位异或,例如3 + 4 = 7,011 + 100 = 111,这个结果就是按位异或得到的结果,但是我们的加法肯定是存在进位的,那我们进位怎么表示呢,我们想一下,我同样使用异或运算,当只考虑一位的时候(a表示其中一个数的第i位,b表示另外一个数的第i位),只有两个1才会有进位,这就和与运算是一样的,但是进位肯定是要往前移位的,所以进位可以表示为 a & b << 1递归写法public int sum(int a, int b

2021-08-27 23:21:47 2407 1

原创 设计模式之工厂模式

工厂模式(Factory Pattern)是 Java中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。1. 简单工厂模式公共的接口 Phone.javapublic interface Phone { void doSome();}具体的产品 Xiaomi.javapublic class Xiaomi implements Phone.

2021-06-01 11:18:18 115

原创 Spring AOP——面向切面编程

AOP(Aspect Orient Programming)1. 什么是AOPAOP是一种面向切面的编程思想,与OOP相似,同时也是OOP的补充,我们都知道Java是一门面向对象的语言,而这里的面向对象就指的是OOP,而AOP则是Spring中提出的一种编程思想。面向对象编程将程序抽象成各个层次的对象,而面向切面编程是将程序抽象成各个切面。AOP能在源代码不修改的情况下对业务进行增强,如增加日志功能,增加事务等2. AOP的实现原理AOP是基于动态代理的,可以使用JDK,CGLIB两种代理方式,

2021-05-15 20:33:52 206

原创 通过前序遍历序列和中序遍历序列构造二叉树

输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如,给出前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7]返回如下的二叉树:前序遍历:根节点->左子树->右子树中序遍历:左子树->根节点->右子树对于前序遍历序列,可以唯一确定根节点的值,由于前序遍历是先遍历根节点,所以根节点必然是前序遍历序列的第一个元素,得到根节点后,可以在中序遍历序列.

2021-05-15 09:06:57 936

原创 SpringMVC中拦截器(Interceptor)的配置和使用

拦截器1.1. 概念Java 里的拦截器是动态拦截action调用的对象。它提供了一种机制可以使开发者可以定义在一个action执行的前后执行的代码,也可以在一个action执行前阻止其执行,同时也提供了一种可以提取action中可重用部分的方式。在 AOP(Aspect-Oriented Programming,面向切面编程)中拦截器用于在某个方法(包括构造器)或字段被访问之前进行拦截,然后在之前或之后加入某些操作。特别地,现阶段 Spring 自身仅支持基于方法的拦截操作!如果基于方法的拦截操作不能

2021-05-09 09:21:12 1296

原创 ajax请求被SpringMVC拦截器拦截后如何进行页面跳转

背景在实现了一个用户登录的拦截器后,判断session中是否存在用户的id,如果没有就跳转到登录界面,如果有就放行,发现这样对ajax请求没有作用,那么如何对ajax请求拦截后进行页面跳转呢?首先判断是否是ajax请求,如果是ajax请求就输出一个标志,然后再success中判断这个标志,然后根据标志在前端利用 window.location.href 进行页面的跳转具体实现public boolean preHandle(HttpServletRequest request, HttpServlet

2021-05-06 21:51:18 1362

原创 SpringMVC裁剪并上传图片

SpringMVC上传文件SpringMVC上传文件很简单,只需要在form表单中使用file类型的input标签,form表单最好使用post请求方式,并且要加上 enctype=“multipart/form-data”,后端使用 MultipartFile 对象接收文件,MultipartFile中最重要的一个方法是getInputStream()方法,方法签名如下InputStream getInputStream() throws IOException;这个方法的作用就是获取输入流,通过

2021-05-05 13:39:06 122

原创 腾讯公益404接口

我们访问网站可能会经常遇到404,也就是找不到页面,我们可以将自己网站的404统一配置为腾讯的公益寻人页面,在404.html中加入以下代码<script type="text/javascript" src="//qzonestyle.gtimg.cn/qzone/hybrid/app/404/search_children.js" charset="utf-8" homePageUrl="你的主页地址" homePageName="回到我的主页"></script&gt

2021-04-28 10:49:50 860

原创 Spring + SpringMVC + MyBatis整合

ssm项目开发的主要步骤新建Maven项目,选择webapps模板设计好包的结构(controller,dao,service,entity等)书写配置文件3.1 applicationContext.xml,spring的主配置文件3.2 spring-mvc.xml,springmvc的配置文件3.3 mybatis-config.xml,mybatis的主配置文件(可选)3.4 jdbc.properties,数据库的配置信息web.xml文件编写4.1 配置spring的中央控制

2021-04-28 00:10:19 45

原创 for循环中为什么使用++i而不是i++

在之前看到别人的代码时,for循环里面一直用的是++i,而我用的i++,我一直以为是使用习惯问题,后来发现在刷算法题的时候,发现题解里面的for循环几乎都是++i,我才知道原来使用++i比i++的性能要好一些i++和++i如何使用i++和++i都是i的自增操作,区别是引用和自增的顺序不同,单独使用时效果相同i++使用先引用i再自增,而++i是先自增再引用int i = 1;System.out.println(i++); // 输出1System.our.println(++i); // 输

2021-04-23 21:20:05 3936

原创 132序列

给你一个整数数组 nums ,数组中共有 n 个整数。132 模式的子序列 由三个整数 nums[i]、nums[j] 和 nums[k]组成,并同时满足:i < j < k 和 nums[i] < nums[k] < nums[j] 。如果 nums 中存在 132模式的子序列 ,返回 true ;否则,返回 false 。public boolean find132pattern(int[] nums) { // 使用一个双向队列维持一个单调递减的序列 Dequ.

2021-04-19 21:23:46 388

原创 01矩阵

给定一个由 0 和 1 组成的矩阵,找出每个元素到最近的 0 的距离。 两个相邻元素间的距离为 1 。在一个矩阵里只有0和1两种数字,求出每一个元素到最近一个0的距离,如果元素本身为0,则距离为0,在找最近0的过程只有四个方向,上下左右从题目描述来看,不难得出我们在求某个元素的最近一个0的距离时,可以根据旁边的元素得到,因此我们可以使用动态规划同时对于每一个元素1,我们可以从这个元素的上下左右去寻找一个最近的0,类似于广度优先遍历,因此我们也可以考虑用BFS的思想去完成1. 动态规划publi.

2021-04-19 19:04:03 807

原创 设计模式之代理模式

在代理模式(Proxy Pattern)中,一个类代表另一个类的功能。这种类型的设计模式属于结构型模式。代理模式分为静态代理和动态代理1. 静态代理模式在静态代理中,我们需要一个依赖现有对象的代理对象来执行现有对象的方法,代理对象和现有对象都要实现同一个接口,就好像我们租房子一样,我们可能直接找到房东,也可能通过中介租房,那么通过中介就是一种代理,他们之间的关系如下图public interface Rent { public void rent();}// 房东public .

2021-04-18 19:45:46 79

原创 将矩阵旋转90度,要求在原来的矩阵上进行操作

对于一个给定的n*n的矩阵,将矩阵顺时针旋转90度,要求在原来的矩阵上进行操作对于矩阵的旋转来说,无论是旋转90度还是180度,无论是顺时针还是逆时针,对于矩阵的元素总能找一个规律可以得到旋转后的位置,那么如果是顺时针旋转90度,对应的坐标变换为newMatrix[i, j] = oldMatrix[n - j - 1, i],所以很容易得出下列的代码public int[][] rotate(int[][] arr) { int n = arr.length; int[][] ne.

2021-04-16 21:12:05 657

原创 无重复字符的最长子串

给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。在写算法题目的时候,首先要有思路,不要盲目动笔,同时要注意题目的要求,在看到不含有重复字符的时候,应该想到用哪个数据结构,在Java集合中,Set集合符合这个条件(无序且不重复),那么该怎么写呢?可以想到要用到滑动窗口的思想,一个左指针,一个右指针,两个指针的范围都是0-len,所以我们可以让右指针一直前进,直到遇到重复的字符,然后得到此时子串的长度,并与之前的结果取一个较大值,然后就是左指针前进一步,重复上述步骤,直到左指针到达字符串的.

2021-04-16 20:30:10 48

原创 src目录下的资源文件(.xml等)无法编译到target目录下

src目录下的资源文件无法编译到.class文件目录下,在pom.xml中加入以下代码<build> <resources> <resource> <directory>src/main/java</directory> <includes> <include>**/*.xml</include> </incl.

2021-04-16 17:29:18 293

原创 二叉树的最小深度-递归算法和非递归算法

递归算法最小深度是从根节点到最近叶子节点的最短路径上的节点数量。在使用递归算法求得二叉树的最小深度时与求最大深度的思路类似,代码如下public int minDepth(TreeNode root) { if (root == null) return 0; return Math.min(minDepth(root.left), minDepth(root.right)) + 1;}那么代码是不是就这样呢?这样写看起来是对的,但其实这种解法忽略了一种情况,就是说,如果一个

2021-04-16 17:08:38 239

原创 二叉树的最大深度-递归算法和非递归算法

递归算法递归算法:指一种通过重复将问题分解为同类的子问题而解决问题的方法。如何通过递归求出一棵二叉树的最大深度,首先递归算法特别重要的一个部分就是结束条件,那么结束条件怎么定义呢?对于二叉树而言,递归就是不断递归二叉树的左右结点,那么结束条件自然就是当结点为null时if (root == null) { return 0;}递归还有一个部分就是递归的规律,那么对于求解二叉树最大深度,递归规律是什么呢?我们在每次调用递归函数的时候相当于遍历一个树的结点,那么如何得到最大深度呢?就是在调用递归

2021-04-16 16:37:53 367

空空如也

空空如也

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

TA关注的人

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