- 博客(153)
- 收藏
- 关注
原创 正则表达式匹配
题目描述请实现一个函数用来匹配包括'.'和'*'的正则表达式。模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但是与"aa.a"和"ab*a"均不匹配public class Solution { public boolean matchStr(char[] str, int i, char[] pattern, int j) {
2020-08-26 15:31:04
209
原创 剑指offer——从上往下打印二叉树
题目描述从上往下打印出二叉树的每个节点,同层节点从左至右打印。package com.sunny.offer;import java.util.ArrayList;import java.util.LinkedList;import java.util.Queue;class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int
2020-08-14 21:07:24
206
原创 剑指offer——对称的二叉树
题目描述请实现一个函数,用来判断一棵二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。package com.sunny.offer;class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; }}public class treeNode2 { public s
2020-08-14 20:42:53
194
原创 死锁
死锁产生的四个必要条件:互斥条件:一个资源一次只能被一个进程访问。即某个资源在一段时间内只能由一个进程占有,不能同时被两个或两个以上的进程占 有。这种独占资源如CD-ROM驱动器,打印机等等,必须在占有该资源的进程主动释放它之后,其它进程才能占有该资源。这是由资源本身的属性所决定的。 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。进程至少已经占有一个资源,但又申请新的资源;由于该资源已被另外进程占有,此时该进程阻塞;但是,它在等待新资源之时,仍继续占用已占有的资源。 不剥夺条件
2020-08-14 10:35:11
166
原创 剑指offer——机器人的运动范围
题目描述地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+5+3+8 = 19。请问该机器人能够达到多少个格子?package com.sunny.offer;public class shuzu1 { public static void main(S
2020-08-13 10:31:08
124
原创 剑指offer——二叉树中和为某一值的路径
题目描述输入一颗二叉树的根节点和一个整数,按字典序打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。package com.sunny.offer;//二叉树中和为某一值的路径import java.util.ArrayList;import javax.xml.bind.helpers.AbstractUnmarshallerImpl;class TreeNode { int val = 0; TreeNode l
2020-08-13 09:53:49
119
原创 数据库事务
存储过程和函数的区别是什么?存储过程是用户定义的一系列SQL语句的集合,涉及特定表或其他对象的任务,用户可以调用存储过程。 函数通常是数据库已定义的方法,它接收参数并返回某种类型的值,而且不涉及特定用户表。什么是数据库事务?数据库事务是指作为单个逻辑工作单元执行的一系列操作,这些操作要么全做,要么全不做,是一个不可分割的工作单位。事务的开始与结束可以由用户显式地控制。如果用户没有显式地定义事务,则由DBMS按默认的规定自动划分事务。事务具有原子性、一致性、独立性及持久性等特点。(1)事务的原子性
2020-08-12 19:28:31
132
原创 数据库设计中的四个范式
在创建一个数据库的过程中,必须依照一定的准则,这些准则被称为范式,从第一到第六共六个范式,一般数据库设计只要遵循第一范式,第二范式,和第三范式就足够了。满足这些规范的数据库是简洁的、结构明晰的,同时,不会发生插入(insert)、删除(delete)和更新(update)操作异常。反之则是乱七八糟,不仅给数据库的编程人员制造麻烦,而且面目可憎,可能存储了大量不需要的冗余信息。第一范式(1NF)无重复的列所谓第一范式(1NF)是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中
2020-08-12 16:41:51
1124
原创 剑指offer——复杂链表的复制
题目描述输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针random指向一个随机节点),请对此链表进行深拷贝,并返回拷贝后的头结点。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)题解:利用循环遍历:/*public class RandomListNode { int label; RandomListNode next = null; RandomListNode random = null;
2020-08-12 14:04:26
97
原创 剑指offer——字符串的全排列
题目描述输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则按字典序打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。输入描述:输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。import java.util.ArrayList;import java.util.Arrays;import java.util.Collections;import java.util.HashSet;pu
2020-08-12 13:34:17
259
原创 剑指offer——删除链表中重复的节点
题目描述在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5方法一:三个指针进行删除:package com.sunny.offer;/*class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }.
2020-08-10 16:55:57
272
原创 SpringMVC异常处理与拦截器
SpringMVC异常处理流程:编写自定义异常类(做提示信息的) 编写异常处理器 配置异常处理器(跳转到提示页面)SpringMVC的拦截器:SpringMVC的拦截器类似于Servlet开发中的过滤器Filter,用于对处理器进行预处理与后处理;先在拦截器中执行代码1,可以放行之后进入到controller中,再从controller中回到拦截器中,执行代码2再返回;拦截器链,拦截器链就是将拦截器按一定的顺序联结成一条链。在访问被拦截的方法或字段时,拦截器链中的拦截器就会按其
2020-08-07 15:56:02
282
1
原创 请求参数
请求参数绑定入门:1.请求参数的绑定说明绑定机制表单提交的数据都是 k=v 格式的 username=haha&password=123 SpringMVC的参数绑定过程是把表单提交的请求参数,作为控制器中方法的参数进行绑定的 要求︰提交表单的name和参数的名称是相同的支持的数据类型基本数据类型和字符串类型 实体类型(JavaBean ) 集合数据类型(List、map集合等)2.基本数据类型和字符串类型提交表单的name和参数的名称是相同的 区分大小写3.实体类型
2020-08-06 17:04:38
1706
原创 SpringMVC入门
入门需求分析:入门案例流程总结:视图解析器可以跳转到某某某具体页面;处理器适配器可以根据不同的请求跳转到不同的页面;处理映射器、处理器适配器、视图解析器称为MVC三大组件RequestMapping注解的作用:用于建立请求URL和处理请求方法之间的对应关系;注解可以放到方法上,也可以放在类上,不过访问的href就不同的,如果加在类上,需要将访问路径写全;RequestMapping属性:value 和 path 是一样的,都可以表示访问页面的地址; me
2020-08-06 16:34:30
141
原创 SpringMVC框架
服务器的三层架构:C/S开发架构一般都是基于两种形式B/S,一种是C/S 架构,也就是客户端/服S务器,另一种是B/SB/S架构,也就是浏览器服务器。在JavaEE开发中,几乎全都是基于B/S架构的开发。那么在B/S架构中,系统标准的三层架构包括:表现层、业务层持久层。MVC模型:MVC全名是Model View Controller,是模型(model)一视图(view)一控制器(controller)的缩写,是一种用于设计创建web应用程序表现层的模式。MVC中每个部分各司其职:Mo
2020-08-06 15:42:51
700
原创 剑指offer——按之字形打印二叉树
题目描述请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。题解:使用两个栈,一个栈用于存放当前节点,一个栈用于存放当前节点的子节点package com.sunny.offer;import java.util.ArrayList;import java.util.List;import java.util.Queue;import java.util.Stack;class Tre
2020-08-06 14:13:25
286
原创 MyBatis 缓存
什么是MyBatis缓存使用缓存可以减少Java应用与数据库的交互次数,从而提升程序的运行效率。比如查询出id=1的对象,第一次查询出之后会自动将该对象保存到缓存中,当下一次查询时,直接从缓存中取出对象即可,无需再次访问数据库。MyBatis缓存分类1、一级缓存:SqlSession级别,默认开启,并且不能关闭。操作数据库时需要创建SqlSession对象,在对象中有一个HashMap用于存储缓存数据,不同的SqlSession之间缓存数据区域是互不影响的。一级缓存的作用域是SqlSess
2020-08-06 10:08:55
166
原创 MyBatis延迟加载
什么是延迟加载?延迟加载也叫懒加载、惰性加载,使用延迟加载可以提高程序的运行效率,针对于数据持久层的操作,在某些特定的情况下去访问特定的数据库,在其他情况下可以不访问某些表,从一定程度上减少了Java应用与数据库的交互次数。案例:查询学生和班级的时,学生和班级是两张不同的表,如果当前需求只需要获取学生的信息,那么查询学生单表即可,如果需要通过学生获取对应的班级信息,则必须查询两张表。不同的业务需求,需要查询不同的表,根据具体的业务需求来动态减少数据表查询的工作就是延迟加载。1、在config.
2020-08-06 09:35:08
135
原创 MyBatis 逆向工程
MyBatis框架需要︰实体类、自定义Mapper 接口、Mapper.xml传统的开发中上述的三个组件需要开发者手动创建,逆向工程可以帮助开发者来自动创建三个组件,减轻开发者的工作量,提高工作效率。如何使用:MyBatis Generator,简称MBG,是一个专门为MyBatis框架开发者定制的代码生成器,可自动生成MyBatis框架所需的实体类、Mapper接口、Mapper.xml,支持基本的CRUD操作,但是一些相对复杂的SQL需要开发者自己来完成。1、新建Maven工程,pom.x
2020-08-05 21:40:11
116
原创 MyBatis Mapper详解
Mapper.xml:statement标签: select、update、delete、insert分别对应查询、修改、删除、添加操作。 parameterType:参数数据类型1、基本数据类型,通过id查询Account2、String类型,通过name查询Account3、String类型,通过name查询Account4、多个参数,通过name和age来查询5、Java BeanresultType:结果类型:1、基本数据类型,统计Account总数
2020-08-05 20:59:41
3818
原创 Mapper代理
通过Mapper代理实现自定义接口自定义接口,定义相关业务方法 编写与方法对应的Mapper.xml1、自定义接口2、创建接口对应的Mapper.xml,定义接口方法对应的SQL语句statement标签可根据SQL执行的业务选择insert、delete、update,select。 MyBatis框架会根据规则自动创建接口实现类的代理对象。规则:Mapper.xml中namespace为接口的全类名。 Mapper.xml中statement的id为接口中对应的方法名。
2020-08-05 20:13:49
163
原创 MyBatis快速入门
MyBatisMyBatis,是一个实现了数据持久化的开源框架,简单理解就是对JDBC进行封装MyBatis的优点:与JDBC相比,减少了50%以上的代码量。 MyBatis是最简单的持久化框架,小巧并且简单易学。 MyBatis相当灵活,不会对应用程序或者数据库的现有设计强加任何影响,SQL写在XML里,从程序代码中彻底分离,降低耦合度,便于统一管理和优化,并可重用。 提供XML标签,支持编写动态SQL语句。 提供映射标签,支持对象与数据库的ORM字段关系映射。MyBatis的缺点:
2020-08-05 19:50:58
229
原创 剑指offer——顺时针打印矩阵
题目描述输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.题解:简单来说,就是不断地收缩矩阵的边界定义四个变量代表范围,up、down、left、right向右走存入整行的值,当存入后,该行再也不会被遍历,代表上边界的 up 加一,同时判断是否和代表下边界的 down 交错
2020-08-05 16:02:58
103
原创 剑指offer——字符串转换成整数
题目描述将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0public class Solution { public int StrToInt(String str) { if(str.length() == 0 || str == null){ return 0; } char[] ch = str.toCharArray(); boole
2020-08-03 10:30:39
91
原创 剑指offer——翻转单词顺序列
题目描述牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?public class Solution { public String ReverseSentence(String
2020-08-02 18:31:10
105
原创 剑指offer——树的子结构
题目描述输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)题解:基本思路就是遍历大树,找到与子结构跟节点相同的节点,然后传入判断函数进行遍历比较/**public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val;
2020-08-02 16:54:42
72
原创 剑指offer——二叉搜索树的第k个节点
题目描述给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4。题解:中序遍历即可/*public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; }}*/i..
2020-07-28 21:33:03
96
原创 剑指offer——二叉搜索树的后序遍历序列
题目描述输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。题解:本题是利用递归思想,判断根节点的左子树元素是否小于根节点,右子树元素是否大于根节点。重点在于对左右子树的划分(因为传入的是个数组)1.从第0位开始,找到第一位比根节点大的元素,记录此位置i。在此位置之前都属于左子树(此时已经断定左子树都小于根节点)2.检查右子树是否都大于跟节点(从第i位开始,到根节点前)3.判断左右子树是否都属于二叉搜索
2020-07-28 21:16:54
111
原创 JMM(Java内存模型)
JMM概述:Java内存模型是Java Memory Model(JMM)的意思简单的说,JMM定义了一套在多线程读写共享数据时(成员变量、数组)时,对数据的可见性、有序性、和原子性的规则和保障;JMM-原子性-synchronized:更换了synchronized的位置之后,进行优化处理,减少了加锁解锁的处理...
2020-07-26 13:58:02
221
原创 Java教程Spring框架开发——第三天
基于aspecj的注解aop操作: 创建对象在spring核心配置文件中,开启AOP操作在增强类上使用注解完成AOP操作测试:Spring的jdbcTemplate操作:1、spring 框架—站式框架针对javaee三层,每一层都有解决技术 在dao层,使用jdbcTemplate2、spring对不同的持久化层技术都进行了封装jdbcTemplate对jdbc进行封装3、jdbcTemplate和dbutils使用很相似,都对数据库进行...
2020-07-25 21:43:51
162
原创 Java教程Spring框架开发——第二天
spring的bean管理注解准备:代码里面持殊标记,使用注解可以完成功能 注解写法@注解名称(属性名称-属性值) 注解使用在类上面,方法上面和属性上面Spring注解开发准备:导入jar包: 1、导入基本的jar包 2、导入aop的jar包 创建类,创建方法 创建Spring的配置文件,引入约束第一天做 ioc 基本功能,引入约束beans 做spring 的 ioc 注解开发,引入新的约束 开启注解的扫描...
2020-07-25 19:53:23
121
原创 Java教程Spring框架开发——第一天
Spring概念:1、Spring是一个开源的轻量级框架,即是免费的提供源码的不需要依赖其他组件的框架;2、Spring是一个一站式的框架;web层:springMVC service层:spring的IOC dao层:spring的jdbcTemplate3、Spring核心主要是两部分:AOP:面向切面编程,扩展功能不是通过修改源代码实现; IOC:控制反转 |- 创建类对象的过程,需要new出来对象,比如有一个类,类里面有方法(不是静态的方法),调用类里面的方法,...
2020-07-25 15:09:27
313
原创 剑指offer——滑动窗口的最大值
题目描述给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6,6,6,5}; 针对数组{2,3,4,2,6,2,5,1}的滑动窗口有以下6个: {[2,3,4],2,6,2,5,1}, {2,[3,4,2],6,2,5,1}, {2,3,[4,2,6],2,5,1}, {2,3,4,[2,6,2],5,1}, {2,3,4,2,[6,2,5],1}, {2,3,4,2
2020-07-24 21:09:22
86
原创 剑指offer——二维数组中的查找
题目描述在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。方法一:public class Solution { public boolean Find(int target, int [][] array) { for(int i = 0; i < array.length; i++){ for(i
2020-07-24 20:36:49
78
原创 剑指offer——替换空格
题目描述请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。方法一:public class Solution { public String replaceSpace(StringBuffer str) { return str.toString().replaceAll(" ", "%20"); }}方法二:public class Solu
2020-07-24 19:56:54
68
原创 剑指offer——从尾到头打印链表
题目描述输入一个链表,按链表从尾到头的顺序返回一个ArrayList。/*** public class ListNode {* int val;* ListNode next = null;** ListNode(int val) {* this.val = val;* }* }**/import java.util.ArrayList;public class Solution {
2020-07-24 19:37:40
77
原创 剑指offer——调整数组顺序
题目描述输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。题解:原数组分成一个奇数组一个偶数组,再按顺序复制回去,这样,只需要遍历两次原数组即可public class Solution { public void reOrderArray(int [] array) { int[] arrayOdd = new int[array.length];
2020-07-24 15:42:07
79
原创 剑指offer——把数组排成最小的数
题目描述输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。题解:比较两个字符串s1, s2大小的时候,先将它们拼接起来,比较s1+s2,和s2+s1那个大,如果s1+s2大,那说明s2应该放前面,所以按这个规则,s2就应该排在s1前面。import java.util.ArrayList;import java.util.*;public class Solu
2020-07-24 15:08:24
91
原创 剑指offer——第一个只出现一次的字符
题目描述在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).(从0开始计数)public class Solution { public int FirstNotRepeatingChar(String str) { if(str == null){ return -1; } int[] co
2020-07-24 14:42:37
71
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人