自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 记我的第一个springboot项目,Roomstore寝室小卖部系统

       在这之前,自己尝试过很多次在b站上学习后端框架,但都只是看了十集左右就放弃了。有些教程在配置环境的时候给你分析源码,对于我这种小白来说,和听天书没什么区别。大部分教程劝退我的主要原因是,我明明是一步一步跟着视频一起敲的代码,为什么视频里的可以,我的不行。然后就得暂停去搜博客解决,搜了一通,改了一堆看不懂的配置。这一关过了,继续跟着视频敲代码,又出错了,我都怀疑是之前改的配置导致的。整个过程就是特别的痛苦,最后也没能跑出样例,

2021-07-06 14:54:40 1622 5

原创 leetcode第238场周赛,为这一星期的leetcode刷题收尾<数组一>

       这一专栏的博客与我原来写的leetcode刷题专栏不同,用文字记录我这一星期的算法学习以及一些心得体会。之后的每个星期我都会写一篇类似的博客。       在过去的一个星期里,我写了十五道数组专栏的题目。以前的我图个题量,每天近十道题,坚持了两个月,刷了五百多道题。刷了那么多题之后,我发现我的算法能力并没有提升多少,回顾我的刷题历程,为了赶进度,我几乎没

2021-04-25 19:16:33 1385

原创 2021年美赛M奖,圆我两年建模梦

        美赛官方公布会在4月24号公布成绩,但没说是几点!!!根据往年数据,因为时差,成绩会在4月23号九点左右相继公布,然后我就在寝室从七点躺到了九点,还没出。不过感觉十二点之前一定会出,但是这样干等时间过得太慢了,于是开了把游戏,直到凌晨过三十分钟,队友在群里说成绩查到了(我们之前有商量,如果成绩出来了一定要先提醒,不能着急说,让大家做好心理准备)。在此之前,我们三个人都指望能拿个H奖就心满意足了,因为我个人感觉自己

2021-04-24 10:20:24 7316 4

原创 论小白是如何手撕Github项目源码,一步步想成为dai佬的---(三)用户区功能模块理解2.0

(一)前言       对于留言板这块一直是挺好奇怎么实现的,包括使用第三方登录,还有评论时的一些表情包的写入。虽然原来有想过这些表情包会不会是一些链接的引用,但事实证明,整个留言板都是引用第三方库的。。。!下面言归正传(二)功能版块分析2.1留言板功能的实现       感觉很炫有没有,看了一下源码,只有下面这一段,所以懂我意思了吧。src="https:/

2021-01-21 11:24:49 786

原创 论小白是如何手撕Github项目源码,一步步想成为dai佬的---(三)用户区功能模块理解1.0

(一)前言       功能模块划分已经完成了,接下来就是对每个模块进行代码研究和学习了,确实还是很期待的。对与代码的研究,我的方法是这样的:考虑到自身基础薄弱,所以每学习一个功能模块,我都会把其中涉及到的知识点列出并加以总结。对整个功能的实现代码加以分析,可以的话,也会自建一个小项目来实际操作一下。接下来我会逐次分析每个模块,每个版块格式不一定统一,但都会记录下我认为比较有价值的地方,最后也会做一个大总结来归纳当天学习到的知识点和方法

2021-01-20 17:54:52 701

原创 论小白是如何手撕Github项目源码,一步步想成为dai佬的---(二)项目功能分解

(一)前言       在对项目功能分解之前,我也做了些其它工作。因为我并不确定项目学习的步骤是否如此,所以在网上搜索了一些牛人对项目学习的看法,在这大致总结一下。首先,我们不是为了读源码而读源码,意思是要带有目的的去读源码,而不是依次的点开每个文件,匆匆浏览一下代码,这得看睡着我感觉 。对于一些大型的项目,几十万行代码,就算全都看了一遍又有什么用呢,到头来什么也没记住,也没有学习到好的项目经验。因为我本身对阅读源码这块也了解不多,其它

2021-01-20 14:51:39 765

原创 论小白是如何手撕Github项目源码,一步步想成为dai佬的---(一)查找合适的项目

(一)前言       博主本身并没有项目经验,写这系列文章是出于兴趣,想记录下整个过程。同时想和那些打算在Github上找项目练手的朋友们分享一下经验。因为这次也是我第一次做项目(以前写的一些简易购物商城什么的都不算哈),所以总结出来的经验和方法并不一定是最合适的,但一定是我觉得有价值的。这系列文章会介绍我是如何从Github上找到合适的开源项目,理解其中架构,学习优秀的编码风格和方法,总结归纳,并搭建完成自己的项目。这里面肯定是会遇

2021-01-19 13:36:17 762

原创 如何使用maven中引入的jquery依赖,亲测有效!

网上有关该类问题的文章并不多,按照大部分博主的方法试了试,貌似都不成功。虽然也有人说试成功了,但概率问题的还是算了吧。重点说在前头要想使用maven中jquery依赖,一定要重启tomcat,一定要重启tomcat,一定要!!!所以大部分博主提供的方法并不是没有用的,只是我们使用的方法不对,在此厚葬友军。错误示范在pom.xml中导入依赖后,在html页面/jsp页面上导入引用,然后直接点击右上角浏览器运行不启动项目的tomcat的话是使用不到maven中的依赖的,正确做法如下1.在pom

2021-01-16 11:16:48 9096 2

原创 准备一周后的比赛,对JAVA基础的查漏补缺

1.Java标识符类名、变量名以及方法名都被称为标识符。关于 Java 标识符,有以下几点需要注意:所有的标识符都应该以字母(A-Z 或者 a-z),美元符、或者下划线开始首字符之后可以是字母(A-Z 或者 a-z),美元符、下划线或数字的任何字符组合关键字不能用作标识符标识符是大小写敏感的合法标识符举例:age、$salary、_value、__1_value非法标识符举例:123abc、-salary2.Java 局部变量局部变量是在栈上分配的。局部变量没有默认值,所以局部变

2020-12-03 20:36:48 638

原创 看完这专栏带你入门MyBatis框架(五)---MyBatis Java API

1.Java API       既然你已经知道如何配置MyBatis和创建映射文件,你就已经准备好来提升技能了。MyBatis的Java API就是你收获你所做的努力的地方。正如你即将看到的,和JDBC相比,MyBatis很大程度简化了你的代码而且保持简洁,很容易理解和维护。还记得第一篇博客嘛,如下图,那些一连串的对象创建是不是看得头都晕了,但其实不多,因为你只需要将这些代码封装,之后再调用操作数据库的方法时,只要两行代码就够了。下面

2020-11-20 16:55:40 651 1

原创 看完这专栏带你入门MyBatis框架(四)---MyBatis动态SQL

1.动态 SQL       MyBatis 的强大特性之一便是它的动态 SQL。如果你有使用 JDBC 或其他类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句有多么痛苦。拼接的时候要确保不能忘了必要的空格,还要注意省掉列名列表最后的逗号。利用动态 SQL 这一特性可以彻底摆脱这种痛苦。       通常使用动态 SQL 不可能是独立的一部分,MyBati

2020-11-20 15:58:27 644

原创 看完这专栏带你入门MyBatis框架(三)---MyBatis XML映射文件

1.MyBatis XML映射文件1.1Mapper XML文件       MyBatis的真正强大在于它的映射语句,也是它的魔力所在。映射器的XML文件显得相对简单。如果拿它根具有相同功能的JDBC代码进行对比,你会立即发现省掉了将近95%的代码。MyBatis就是针对SQL构建的,并且比普通的方法做的更好。SQL映射文件偶很少几个顶级元素(按照它们应该被定义的顺序):cache:给定命名空间的缓存配置。cache-ref

2020-11-20 08:42:40 709

原创 看完这专栏带你入门MyBatis框架(二)---MyBatis XML配置

1.MyBatis XML配置       MyBatis的配置文件包含了影响MyBatis行为甚深的设置(setting)和属性信息。1.1properties这些属性都是可外部配置且可动态替换的,既可以在典型的java属性文件中配置,亦可通过properties元素的子元素来传递。例如:       这个例子中的username、driver、url、

2020-11-19 15:30:50 671

原创 看完这专栏带你入门MyBatis框架(一)---MyBatis入门

1.MyBatis入门1.1安装       要使用MyBatis,只需要将mybatis-x.x.x.jar文件置于类路径(classpath)中即可。如果使用Maven来构建项目,则需将下面的依赖代码置于pom.xml文件中<dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifac

2020-11-19 14:27:16 676

原创 LeetCode每日十题---深度优先搜索(三)

1.题目描述1.1笔者分析以本题为例对深度优先搜索算法和广度优先搜索算法进行一个小小的总结。结合下列代码进行说明。public class Test { private int m; private int n; private int[][] pos={{-1,0},{1,0},{0,1},{0,-1}}; private Queue<List<Integer>> queue=new LinkedList<>();public

2020-11-10 10:35:30 658

原创 LeetCode每日十题---广度优先搜索

1.题目描述1.1笔者分析对于Tree的BFS大家都已经掌握的不错了:要把root结点先入队,然后再一层一层的无脑遍历就行了。对于图的BFS也是一样滴~与Tree的BFS区别如下:1.tree只有一个root,而图可以有多个源点,所以首先要把多个源点都入队。2.tree是有向的因此不需要标志是否访问过,而对于无向图来说,必须标志是否访问过。而且为了防止某个结点多次入队,需要在入队之前就将其设置成已访问。对于本题而言,我们只要先把所有的陆地都入队,然后从各个陆地同时开始一层层的向海洋扩散,那么最后扩

2020-11-09 10:29:04 633

原创 LeetCode每日十题---深度优先搜索(二)

1.题目描述1.1笔者分析个人觉得这题还是很值得研究的,重点不在如何求解这题,而是一个算法思想,如何将一种类型的题目转换成另一种类型题。虽然这题可以用深度优先搜索来解,但显然是有点复杂的。下面对原问题进行分析。原问题等同于:找到nums一个正子集和一个负子集,使得总和等于target。我们假设P是正子集,N是负子集例如:假设nums={1,2,3,4,5},target=3,一个可能的解决方案是+1-2+3-4+5=3这里正子集p=[1,3,5]和负子集N=[2,4],那么让我们看看如何将其转换为子

2020-11-09 09:15:46 674

原创 LeetCode每日十题---深度优先搜索

1.题目描述1.1笔者解答class Solution { public int maxAreaOfIsland(int[][] grid) { int max=0; for(int i=0;i<grid.length;i++){ for(int j=0;j<grid[0].length;j++){ if(grid[i][j]==1){ max=Math.

2020-11-08 09:09:08 627

原创 LeetCode每日十题---树(二)

1.题目描述1.1笔者解答class Solution { public boolean isSubPath(ListNode head, TreeNode root) { if (head == null) return true; if (root == null) return false; //这样子如果满足条件,那么一直从根节点往下找,无法退回到以左右孩子为根节点寻找 if

2020-10-28 09:33:45 581

原创 LeetCode每日十题---树(一)

1.题目描述1.1笔者分析对于这种高度平衡二叉树,我原来一直认为是很复杂的,左旋转右旋转的。没有想到一个二分就解决了。class Solution { public TreeNode sortedArrayToBST(int[] nums) { return help(nums,0,nums.length-1); } TreeNode help(int[] nums,int l ,int r){ if(r<l)return null;

2020-10-23 16:56:48 583

原创 你所不太了解的位运算

前言与、或、非、异或这些运算符的含义就不过多介绍了,本篇文章主要通过一个例题来介绍如何灵活使用位运算符,来给我们的算法锦上添花。例题如下:算法代码如下class Solution { public int singleNumber(int[] nums) { int ones = 0, twos = 0; for(int num : nums){ ones = ones ^ num & ~twos; two

2020-10-17 10:10:26 680

原创 LeetCode每日十题---位运算(一)

1题目描述1.1笔者分析以下均为leetcod官网某一大佬的分析思路:大脑的思考过程这题拿到手,第一反应是用hash表,没有思考细节,只是觉得hash表肯定是可以搞定的,但是空间复杂度是O(n),不满足题意。接着开始思考,如何才能做到空间复杂度是O(1)呢?脑袋开始疯狂打转,但没有思路。没办法,退回原点。心想,如果使用暴力破解法,该如何解决,很简单:每次从数组中去一个数,记为cur,然后从剩下的数中查找,如果找不到,则cur即为要找的那个数,这种解法时间复杂度是O(n*n)。继续思考,如何再

2020-10-15 21:10:21 615

原创 LeetCode每日十题---回溯算法(一)

1.题目描述1.1笔者分析很经典的一道递归题目,这里比较巧妙的是+256,只要不会影响到结果,可直接在原数组上修改来实现visited数组的功能。class Solution { public boolean exist(char[][] board, String word) { for(int i=0;i<board.length;i++){ for(int j=0;j<board[0].length;j++){ i

2020-10-14 15:52:19 593

原创 CSS中你不太了解的细节---(三)

1.定位positionrelative 元素开启相对定位:如果不设置偏移量元素不会发生任何的变化,当元素开启了定位以后,可以通过偏移量来设置元素的位置。(top,bottom,left,right)设置后它的位置只会影响自己,不会影响别人,不存在把别的块元素挤下去。相对定位是参照于元素在文档流中的位置进行定位的。相对定位会提升元素的层级。4.相对定位不会使元素脱离文档流,相对定位不会改变元素的性质。absolute 元素开启绝对定位:如果不设置偏移量元素的位置不会发生变化。元素会从文档流中

2020-10-14 14:51:50 683

原创 LeetCode每日十题---动态规划(二)

1.题目描述1.1笔者分析写动态规划简单题的时候,你会发现套路都一模一样,一个传递函数,到了中等题,就多加了几个传递函数。class Solution { public int maxProfit(int[] prices) { int n=prices.length; if(n==0)return 0; int[] sell=new int[n+1]; int[] buy=new int[n+1]; int[]

2020-10-10 14:48:23 673

原创 CSS中你不太了解的细节---(二)

1.盒子的大小默认情况下,盒子可见框的大小由内容区、内边距和边框共同决定。box-sizing 用来设置盒子尺寸的计算方式(设置width和height的作用),可选值如下:content-box 默认值,宽度和高度用来设置内容区的大小。border-box 宽度和高度用来设置整个盒子可见框的大小2.轮廓阴影box-shadow 用来设置元素的阴影效果,阴影不会影响页面的布局。第一个值 水平偏移量。第二个值 垂直偏移量。第三个值 阴影的模糊半径。第四个值 阴影的颜色。举例:box

2020-10-09 17:26:31 605

原创 Andrew Ng机器学习课后笔记---(一)

1.监督学习       从给定的训练数据集中学习出一个函数(模型参数),当新的数据到来时,可以根据这个函数预测结果。监督学习的训练集要求包括输入输出,也可以说是特征和目标。训练集中的目标是由人标注的。监督学习就是最常见的分类问题,通过 已有的训练样本(即已知数据及其对应的输出)去训练得到一个最优模型(这个模型属于某个函数的集合,最优表示某个评价准则下是最佳的),再利用这个模型将所有的输入映射为相应的输出,对输出进行简单的判断从而实现分

2020-10-08 20:33:20 787

原创 LeetCode每日十题---分治法

1.题目描述1.1笔者解答class Solution { public int majorityElement(int[] nums) { Map<Integer,Integer> map=new HashMap<Integer,Integer>(); for(int i=0;i<nums.length;i++){ map.put(nums[i],map.getOrDefault(nums[i],0)

2020-10-08 10:30:32 666

原创 尚硅谷新版Web前端HTML5+CSS3全套基础教程 CSS重置样式表

reset.csshtml, body, div, span, applet, object, iframe,h1, h2, h3, h4, h5, h6, p, blockquote, pre,a, abbr, acronym, address, big, cite, code,del, dfn, em, img, ins, kbd, q, s, samp,small, strike, strong, sub, sup, tt, var,b, u, i, center,dl, dt, dd,

2020-10-07 15:06:31 1516

原创 CSS中你不太了解的细节---(一)

1.常用选择器id选择器 作用:根据元素的id属性值选中一个元素;语法:#id属性值{ };例子:#box{ }。类(class)选择器 作用:根据元素的class属性值选中一组元素,可以同时为一个元素指定多个class属性,用空格隔开;语法:.class属性值{ };例子:.box{ }。通配选择器 作用:选中页面中的所有元素 语法:* 。元素选择器 作用:根据标签名来选中指定的元素;语法:标签名{ };例子:p{ }。2.复合选择器交集选择器 作用:选中同时符合多个条件的元素;语法:选

2020-10-07 15:00:03 602

原创 LeetCode每日十题---二分查找(二)

1.题目描述1.1笔者分析动态规划的方法大家都能想到,关键是用二分法来提高效率。看了下评论区大佬们的方法,确实挺新颖的,把二分法用的如此巧妙。针对这题,dp[i]:所有长度为i+1的递增子序列中,最小的那个序列尾数。由定义知dp数组必然是一个递增数组,可以用maxL来表示最长递增子序列的长度。对数组进行迭代,一次判断每个数num将其插入dp数组相应的位置:1.num>dp[maxL],表示num比所有一直递增序列的尾数都大,将num添加入dp数组尾部,并将最长递增序列长度maxL加1.2.d

2020-10-07 10:58:10 632

原创 HTML中你不太了解的细节---(一)

1.实体在网页中编写的多个空格默认情况会自动被浏览器解析为一个空格。在HTML中有些时候,我们不能直接书写一些特殊符号,比如:多个连续的空格,比如字母两侧的大于和小于号。如果我们需要在网页中书写这些特殊的符号,则需要使用html中的实体(转义字符)。实体的语法: &实体的名字; &nbsp;空格 &gt;大于号 &lt;小于号2.meta标签meta主要用于设置网页中的一些元数据,元数据不是给用户看的。charset 指定网页的字符集。

2020-10-06 19:34:00 615 1

原创 LeetCode每日十题---二分查找

1.题目描述2.笔者分析先对二分查找做个总结吧,两指针起始位置分别为数组的最小下标和最大下标;比较中间下标对应的值与目标值的大小。若小于目标值,则左指针下标增加到M+1(假设数组递增排序),若大于目标值,则右指针下标递减到M-1;跳出循环的条件为找到目标值或左指针下标大于右指针下标。但二分查找的题一定要学会变通,并非都是这种格式。该题代码如下:int left=0;int right=array.length-1;int mid;while(left<=right){ mid=le

2020-10-05 10:54:20 681 1

原创 LeetCode每日十题---字符串

题目描述1笔者分析1.1没有想到这题也能用递归吧,自我感觉没必要,应该还有更好的办法,但没有想到的是这题递归效率这么高。class Solution { private List<String> res; public List<String> generateParenthesis(int n) { int leftBracket=n,rightBracket=n; this.res=new ArrayList<&g

2020-10-04 21:01:05 564

原创 LeetCode每日十题---双指针

题目描述1笔者分析1.1开始觉得这道题每三个数都是必须要相加比较的,也确实是。但是可以将同一个值的数数量累加,这样也能快捷许多,而且用两层for循环就能实现,值得注意的是用排列组合求数量是有多种情况要分类讨论。不过,秀还是秀的,时间效率超过百分之百。class Solution { public int threeSumMulti(int[] A, int target) { int kMaxN=100; int mod=(int)Math.pow(10,9)+7;

2020-09-29 10:31:25 598

原创 LeetCode每日十题---链表(三)

题目描述1笔者解答1.1public class Solution { public ListNode detectCycle(ListNode head) { Map<ListNode,Integer> map=new HashMap<>(); while(head!=null){ if(!map.containsKey(head)){ map.put(head,1); }el

2020-09-28 14:22:15 625

原创 LeetCode每日十题---链表(二)

题目描述1笔者解答1.1class Solution { public ListNode removeElements(ListNode head, int val) { while(head!=null&&head.val==val){ head=head.next; } if(head==null)return head; ListNode head_copy=head; while(

2020-09-27 10:55:30 556

原创 LeetCode每日十题---链表

题目描述1笔者分析1.1我的常规想法是新建两个逆序链表,从后往前比较,但我发现我理解错题目意思了。这个题并不是问两个链表值相等的后缀,它是真的相交与同一链表,所以原来想法不仅复杂了,而且也解决不了问题。看到评论区的大佬解法,链表用的这么秀也是太大佬了。平时我们遍历链表都喜欢用while(node.next),而且一遍遍历解决问题,但如果一遍遍历解决不了问题的话就开始慌了。这题的解法巧妙之处在于while(pA!=pB)这样可以遍历两次链表,而且确实需要两次遍历链表,通过交叉遍历来达到同步的目的是真的六

2020-09-25 15:10:39 565

原创 LeetCode每日十题---哈希表(四)

题目描述1笔者解答1.1class Solution { public List<List<String>> groupAnagrams(String[] strs) { List<List<String>> IList=new ArrayList<List<String>>(); Map<Map,Integer> IMap=new HashMap<Map,Integer>();

2020-09-23 14:53:07 593

原创 LeetCode每日十题---哈希表(三)

题目描述1笔者解答1.1class Solution { public int findMaxLength(int[] nums) { int res=0,sum=0; for(int i=0;i<nums.length;i++){ if(nums[i]==0){ nums[i]=-1; } } Map<Integer,Integer> map=n

2020-09-22 16:08:19 581

空空如也

空空如也

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

TA关注的人

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