自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

江璇Up

你若对得起时间,时间便对得起你!

  • 博客(116)
  • 收藏
  • 关注

原创 2022,从阅读开始

前言2022 年的第一周已经要过去了,跟很多小伙伴们一样,我对自己过去的一年做了总结,也对新的一年做了规划。不过今年我没有打算直接公布我的计划,至少我现在开始更新文章,对我来说一个好的信号。正文新年的第一篇推文就从我为大家推荐的新年书单开始吧:不多不少,我从书架挑选了 12 本书作为推荐,里面有我没看过的,也有我看过几遍但是还想看的。在过去的一年里,我读的课外书太少了,尤其是关于这种启发个人思考,促进成长类的书籍。更多的是一些专业相关的书籍,而读这些书籍的目的当初就是为了增加找工作时候的筹码,当

2022-01-09 11:31:06 526

原创 详解Java SPI机制

1. 什么是 SPI1. 背景在面向对象的设计原则中,一般推荐模块之间基于接口编程,通常情况下调用方模块是不会感知到被调用方模块的内部具体实现。一旦代码里面涉及具体实现类,就违反了开闭原则。如果需要替换一种实现,就需要修改代码。为了实现在模块装配的时候不用在程序里面动态指明,这就需要一种服务发现机制。Java SPI 就是提供了这样一个机制:为某个接口寻找服务实现的机制。这有点类似 IOC 的思想,将装配的控制权移交到了程序之外。SPI 英文为 Service Provider Interface

2021-11-23 09:52:45 361

原创 关于三方协议不得不说的注意事项

前言在之前的文章里面有说到我最近违约了上一家公司,并且为之付出了巨额的违约金,反正对还没有经济能力的我来说就是一笔巨款“一个月转正后的薪资”。关于我为什么要支付这么多的违约金,那我这次就详细说说应届生的就业协议,也算是给后面的学弟学妹们科普一下:在本科阶段的大四时期很多学校对学生的培养计划就是:企业实习+毕业设计的形式,很多学校大四下学期学校都不会再继续排课,有的甚至大四上学期就已经结课了。这个时候学校会给学生下发实习手册和《普通高等学校毕业生就业协议书》,对于本科毕业就走向职场的同学来说,这些材料至

2021-05-10 14:27:44 1407 6

原创 SpringMVC 常见面试题整理

本篇大概两千多字,预计阅读十分钟左右。主要是对网上的一些常见问题进行收集整理,自己结合平时的项目中出现的一些问题的总结。如果大家在阅读过程中有什么疑问的地方可以一起交流讨论。1. 什么是 SpringMVC ?说说你对 SpringMVC 的理解SpringMVC 其实是基于 Spring 框架下的的 webmvc 模块发展而来的,底层的实现是 基于 Servlet API 的。做到 M(Model)— V(View)— C(Controller)分层。降低各层次之间的耦合性,简化开发。2. S

2021-03-13 21:33:11 312 1

原创 Spring面试问题整理

1. Spring 是什么?Spring是一个开源的轻量级、侵入性小、松散耦合的开发框架,能够与多种框架进行集成,并进行不同的操作,可以称之为框架的框架。具有以下几个模块:Spring 核心容器:Spring Core:核心类库,所有功能都依赖于该类库,提供IOC和DI服务;Spring BeansSpring SpEL(Spring Expression Language)Spring Context:提供框架式的Bean访问方式,以及企业级功能(JNDI、定时任务等);Data

2021-03-12 16:21:42 191

原创 面试题27. 二叉树的镜像

问题:面试题27. 二叉树的镜像思路:说白了就是一个交换操作,可以理解为两个数交换位置;借助一个中间的变量,递归对子树进行操作;实现:/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */clas

2021-01-30 20:59:52 78

原创 二叉树的遍历

二叉树的两种遍历:递归版: /** * 先序遍历 * * @param head */ public static void preOrder(Node head) { if (head == null) return; System.out.print(head.value + " "); preOrder(head.left); preOrder(head.right); }

2021-01-30 20:59:11 111 1

原创 Git问题总结

1.修改代码未提交,想恢复未修改前状态修改文件后,文件与版本库存在冲突,所以会以红色感叹号标红,此时,选中文件右键 TortoiseGit 选择 Revert 即可返回未修改前的状态,具体步骤如下:2.删除某些文件但未提交,想恢复文件两种方法:使用命令行的方式:git statusgit checkout -- <fileName> 注意上面的两杠一定要有,否则就是切换分支。使用 TortoiseGit 快捷方式:3.提交代码(commit)但是未push,

2021-01-30 20:57:58 580 2

原创 Redis入门基础

视频学习资料https://www.bilibili.com/video/BV1CJ411m7Gc?p=1一、Redis简介1. 抛出问题海量用户高并发导致原因:关系型数据库性能瓶颈:磁盘IO性能低下扩展瓶颈:数据关系复杂,扩展性差,不便于大规模集群2. 解决问题降低磁盘IO次数,次数越少越好;——内存存储去除数据间的关系,越简单越好;——不存储关系,仅存储数据3. NoSQLNoSQL:即 Not-Only SQL (泛指非关系型数据库)作为关系型数据库的补充。能够应

2020-10-08 18:19:11 145

原创 centos7配置docker阿里云镜像加速

登陆阿里云账号,没有的可以注册一个;一开始我使用的是华为云的服务器,我以为是只能用华为云的镜像加速服务,但是后面没有在华为云里面找到相应的模块,所以试了一下阿里云的发现同样可以使用。阿里云官网登陆后进入控制台;选择容器镜像服务;点击镜像加速,选择centos;按照要求分步骤操作,在满足条件的前提下,先创建文件夹,可以按照下面的布置分步粘贴;# 1. 创建文件夹sudo mkdir -p /etc/docker# 2.sudo tee /etc/docker/daemon.json.

2020-09-04 22:48:39 394

原创 深入理解synchronized关键字

1. 对Synchronized的认识1.1 为什么需要使用Synchronized?在并发编程中会存在多个线程操作同一个资源的情况,此时原本在单线程下正常运行的程序可能会在多线程情况下发生一些难以预料的错误;这里我举一个例子:初始化一个计数变量,开启10个线程,然后每个线程对这个计数变量进行10000次的累加,按照单线程的常规操作,最后这个程序的执行结果应该是10*10000 = 100000,我们可以通过下面的程序进行论证:public class SynchronizedDemo {

2020-08-15 15:58:21 201

转载 SpringBoot 访问不到static文件夹下的静态资源

最近在看尚硅谷的SpringBoot教程,看到有个疑问,我的SpringBoot项目总是访问不到static目录下的静态文件;给后面踩坑的小伙伴一个解决方案吧:静态资源的文件夹"classpath:/META-INF/resources/", "classpath:/resources/","classpath:/static/", "classpath:/public/" "/":当前项目的根路径这是静态资源的存放位置:此时 :需要 maven clean,然后重启项目即可☀️

2020-08-08 11:19:59 10173 9

原创 用Java实现MD5加密工具类

什么是MD5加密算法?MD5信息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。MD5加密算法的功能和常见用途:功能:将任意长度的信息经过处理后,能够转换为128位的信息。(唯一性,不会产生重复,可以理解为信息的唯一身份ID)常见用途:密码管理: 系统在对用户注册的密码进行MD5加密后再做持久化操作,这样即使是拥有最高权限能够查看数据库信

2020-08-08 00:12:17 1697

原创 idea创建springboot项目初始化失败解决方案

最近在学springboot和微服务相关的内容,有一起学习的小伙伴可以以及交流交流。使用IDEA一键创建springboot项目省了不少事,但是IDEA有时候会出现无法初始化springboot项目的问题:卡在一步一直转一直转:然后就出现错误无法创建:但是此时,你使用浏览器访问 springboot网址:https://start.spring.io 正常访问,就是idea无法正常创建项目。这时候只要改一下就好了:https://start.aliyun.com...

2020-08-07 11:45:27 1945

原创 Mybatis 环境搭建并简单测试

Mybatis 环境搭建很多新人在一开始学习mybatis 的时候虽然看懂开发者文档不是什么难事,但是在搭建环境的时候就总会出现一些莫名其妙的错误信息,比如说我自己。所以我现在整理了一下步骤,做一个记录,也提供给一些初学者做一个参考,我使用的是IDEA开发工具。1. 新建Maven项目然后:然后点击 finish 就好了:新建的项目工程结构如图;2. 配置文件项目已经创建成功,既然是 Mybatis 项目,那么久需要引入Mybatis的依赖:maven下载地址下载Mybatis

2020-06-13 23:50:57 1183

原创 面试题22. 链表中倒数第k个节点

题目面试题22. 链表中倒数第k个节点思路这个题目有点太简单了,两次循环,一次得到链表的长度;第二次求出需要返回元素的正序索引,再次遍历,实现public ListNode getKthFromEnd(ListNode head, int k) { if (head == null) return null; int len = 0; ListNode node = head; while (head.next != null

2020-05-20 22:34:10 122

原创 面试题21. 调整数组顺序使奇数位于偶数前面

题目面试题21. 调整数组顺序使奇数位于偶数前面思路双指针法,两个指针,一个从数组的头部开始,一个从数组的尾部开始。若头部指针指向的当前数据为奇数,那么向后移动指针,直到遇到不满足的情况;尾指针向前移动,若当前尾指针指向的元素不满足;交换两指针指向的元素。实现class Solution { public int[] exchange(int[] nums) { int len = nums.length - 1; int left = 0;

2020-05-20 22:08:57 208

原创 面试题15. 二进制中1的个数

题目:面试题15. 二进制中1的个数思路:可以使用字符串思维解题,先把这个二进制数看成一串字符串,然后统计该字符串中 ” 1 “ 出现的频率即可。使用二进制数的移位和 与运算每次对该二进制数的最后一个数字进行处理,首先我们需要知道一个运算:任何一个二进制数与 1 进行与运算,只要这个 二进制数的最后一位数是 1 那么运算的结果就是 1 。否则为 0 ;对二进制数进行 与 1 运...

2020-05-07 17:34:09 148

原创 面试题11. 旋转数组的最小数字

题目:面试题11. 旋转数组的最小数字思路:原始数组递增有序,经过一定的位移后得到现在的数组。需要找到数组中最小的元素,方法一:定义一个变量保存数组的第一个元素,顺序遍历数组,若存在后面的元素比当前元素小,那么说明后面的元素是最小的元素。方法二:原基础顺序遍历查找效率较低,因此可以使用二分查找优化实现:class Solution { //...

2020-05-01 20:21:22 146 1

原创 面试题10- II. 青蛙跳台阶问题

问题:面试题10- II. 青蛙跳台阶问题思路:简化思维,就是简单的递归方程,求 n 就是就 斐波那契函数 f(n) 的值,可用 递归方式求解,但是应该会超时;动态规划解法:dp[ 0 ] = 1 ; dp [ 1 ] = 1 ; dp [ i ] = dp [ i-1 ] + dp [ i -2 ] ;注意取模具体可以参考这一题的解法 面试题10- I. 斐波那契数列【L...

2020-05-01 17:39:31 373

原创 面试题10- I. 斐波那契数列【LeetCode剑指offer】

问题:面试题10- I. 斐波那契数列思路:在这里我的第一想法是使用递归,两行代码提交,直接超时,无法通过,仔细一想,确实递归的性能并不是很好的。非递归解法:for循环,递归的逆过程,数组规律:1 1 2 3 5 8 13 ... 下一个数字等于前面两个数字的和定义一个式子: sum = a + b ; (a = 0,b=1 )循环赋值:a = b, b = sum ;...

2020-05-01 17:31:07 300

原创 面试题09. 用两个栈实现队列【LeetCode剑指offer】

题目:面试题09. 用两个栈实现队列思路两个栈,一个size(队列中数据的数量)入队列直接压入栈1,并且size++;出队列时,先判断size是否为0,若size 为 0,则说明队列空,返回-1;否则直接取出栈2的栈顶元素,若栈2为空,则把栈1 的所有元素一次性出栈压入栈2,此时栈2,按顺序弹出则是队列出队列的顺序,先进先出;出队列时,要相应的的size–;实现:class ...

2020-05-01 14:26:00 551

原创 面试题07. 重建二叉树【LeetCode剑指offer】

题目:面试题07. 重建二叉树思路:要明白先序遍历和中序遍历的具体顺序,先找到先序遍历的第一个元素,然后再去中序遍历里面查找这个元素,得到这个元素在中序的索引,那么,在中序数组中,这个元素前面的元素都是这个元素的左子树结点,这个元素的右边都是这个元素的右子树结点。对这个元素的左子树结点数组进行递归,对这个元素的右子树结点数组进行递归。实现:/** * Definition ...

2020-05-01 11:02:45 260

原创 面试题06. 从尾到头打印链表【LeetCode剑指offer】

题目:面试题06. 从尾到头打印链表思路:两次遍历链表,第一次得到链表的 length ;定义一个返回数组,长度为 链表的 length ;为数组反向赋值,赋值完成,也就将链表反向存储到数组中。实现:/** * Definition for singly-linked list. * public class ListNode { * int val; * ...

2020-05-01 10:24:22 375

原创 面试题05. 替换空格【LeetCode剑指offer】

题目:面试题05. 替换空格思路:思路一:使用一个额外的字符串在存放修改后的字符串,遍历这个字符串,遇到空格就将当前的空格进行转换,并将转换后的字符拼接后保存在额外的字符串中。缺陷:在Java中 String 是一个final修饰的,不可改变的,所以每次在原有的String 字符串后追加新的字符时候,等于在堆内存中新建了一个 String 对象,然后再保存到 字符串常量池中。所以...

2020-05-01 10:15:01 285

原创 面试题04. 二维数组中的查找【LeetCode剑指offer题解】

题目:面试题04. 二维数组中的查找思路:二维数组是有序的数组,从左向右递增,从上到下递增,所以只要比较每一行的最后一个数字,只要最后一个数字比当前数字小,那么直接跳过(剪枝)这一行;若某一行的最后一个数字恰好是要找的target,那么直接返回true;若最后一个数字比当前数字大,接着就看这一行的第一个数字,若第一个数字小于target,就说明要找的数字可能在这一行中,那么就对这一行进行...

2020-05-01 09:50:15 246

原创 面试题03. 数组中重复的数字【LeetCode剑指offer题解】

题目:面试题03. 数组中重复的数字本题考查的知识点是:数组、哈希表思路:思路一:使用数据结构哈希表 Set 来实现。题目要求只找到任意一个重复的数字即可。在向set中添加元素时,set会对已有的元素进行对比,若已经存在相同元素,那么久返回false。思路二:自定义一个哈希表结构进行存储,在插入哈希表时对已有元素进行判断优势:相对线性表的查找要更加的迅速,哈希查找,不需要经过遍...

2020-05-01 09:35:21 243

原创 关于哈希表(Hashtable)个人学习理解

数据结构–哈希表(Hashtable、又称散列表)最近做了一个题目:想要查看集合中的某个指定元素,但是不知道具体的位置。一般情况下是遍历这个数组的全部,然后去找到这个元素。若此时元素基数不是很大的话,还好,若集合的长度 n 趋于无穷大,而恰恰不巧的是这个元素的位置刚好在最后,那么可想而知消耗的时间是非常巨大的。那么就需要一个高效的存储结构来存储这个集合----哈希表。使用了这种结构能够提高查...

2020-05-01 08:33:37 488 1

原创 Kaptcha验证码生成指南

Kaptcha 是google以前维护的一个开源的验证码生成工具类库,后来google公司放弃了,现在用的 Kaptcha 版本都是由 GitHub上进行维护的版本了。虽然由GitHub托管了,但是可以看到里面的很多的包结构都是有google的。虽说现在前端完成的功能越来越全面了,有很多不同类型的机器验证,但是作为一个后端开发还是有必要学一学如何使用Servlet 生成 验证码。1. 使用Ma...

2020-04-18 22:24:05 427 1

原创 ERR_PROXYCONNECTION_FAILED错误,浏览器无法上网问题 MacOS

今天早上起来打开浏览器突然发现浏览器上不了网了,但是qq,WeChat,都可以联网,于是立马 ping 了一下百度,发现没有问题啊,但是就是浏览器无法访问网络,错误代码:ERR_PROXYCONNECTION_FAILED 就是代理连接出问题了,浏览器自身也有提示:如下,其实就按照提示步骤来解决就好了,我这里是提供MacOS的解决方案,因为MacOS 和 Windows 会存在一些不同。 打开...

2020-04-17 07:53:07 14450 1

原创 解决Tuxera试用过期重装问题

不知道怎么回事,最新版的 Tuxera 总是不能激活,根本就无法输入注册码。所以只能用这个蠢方法,到期后就完全卸载一次,然后重装,OK 两三分钟搞定,虽说麻烦点,但是免费的也挺香哈哈哈哈!下面是完全卸载的指令,如果不能完全卸载,单纯的将它移入废纸篓是不能解决问题的,应用数据仍然存在。所以需要强力清除应用留下来的数据。sudo rm -rf /Applications/Tuxera\ Disk\...

2020-04-12 08:37:35 3173

原创 Servlet重定向和请求转发的区别

Servlet 请求转发和重定向的区别先看看怎么实现的// 1、容器内请求转发request.getRequestDispatcher("url").forward(request,response);// 2、浏览器重定向response.sendRedirect("url");共同点:都可以产生页面跳转。不同点:url的变化请求转发不会发生 url 的改变。...

2020-04-11 22:56:27 373

原创 基于阿里数据库连接池Druid和Apache封装工具类DBUtil的JDBC实现对数据库视图的查询和表的增删改查操作

1. DruidDruid首先是一个数据库连接池。Druid是目前最好的数据库连接池,在功能、性能、扩展性方面,都超过其他数据库连接池,包括DBCP、C3P0、BoneCP、Proxool、JBoss DataSource。Druid已经在阿里巴巴部署了超过600个应用,经过一年多生产环境大规模部署的严苛考验。Druid是阿里巴巴开发的号称为监控而生的数据库连接池!它有三个特点:处...

2020-02-18 19:43:27 917

原创 nginx 动态添加ssl模块

这篇博客写的非常详细https://www.cnblogs.com/zoulixiang/p/10196671.html

2020-02-14 12:03:23 284

原创 MariaDB允许远程登录

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'IDENTIFIED BY '你的密码' WITH GRANT OPTION;授权远程登录

2020-02-13 13:12:25 1658

原创 CentOS7安装JDK

一、先去oracle官网下载好jdk的安装包,对应自己的Linux版本,我这里以安装jdk1.8为例子,如果大家去官网下载不方便的话可以私聊我发包给你们。(现在jdk以前的版本好像要账号才能下载,而且网速也比较慢)二、工具FileZilla,ftp文件传输用;putty,远程控制用;具体用法自己学。三、先拷贝安装包到Linux下(这里使用FileZilla)在远程ssh...

2020-02-13 09:31:45 147

原创 Mac下ssh报错,清除原有密钥

KENFORFORLIN:~ kenforstar$ sudo ssh [email protected]:@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @@@@@@@@@@@@@@...

2020-02-13 09:03:33 1482

原创 微信小程序实现登录Java前后端分离

最近在学习微信小程序相关的知识,找了很多资料虽然文档很多,但是自己需要的的并不多,现在我把自己学会的做一个小小的demo,以便给那些还没有经验的入门者一些小小的指引,我这是一篇基于Java后端的前后端分离的微信小程序实现的登录。鉴于是简单的前后端demo就没有用Java框架了。前端也是简单的导入了一些组件。该项目是一个完整的登录项目,实际中应用到了MySQL,jdbc进行数据的查询,json作为数...

2020-02-05 10:44:17 8909 8

原创 解决哈希冲突的几种方法

Hash冲突的概念哈希算法 的目的就是将一串很大的数据根据一定的规则转换为较小的数据。把任意长度的二进制值串映射为固定长度的二进制值串,这个映射的规则就是哈希算法,而通过原始数据映射之后得到的二进制值串就是哈希值。在这个转换过程中,总会出现两个不同的数据在经过哈希算法的计算后生成了相同的哈希值。这就是哈希冲突。哈希冲突带来的影响:在哈希表中,两个不同数据的哈希值相同,那么不论这两个数据中...

2020-01-16 14:37:21 1157

原创 接口和抽象类的区别

相同点:都不能被实例化,位于继承树的顶端,都包含抽象方法不同点:1、设计目的:接口体现的一种规范,类似与整个系统的总纲,制订了系统各模块应该遵循的标准,因此接口不应该经常改变,一旦改变对整个系统是辐射性的。 抽象类作为多个子类的共同父类,体现的是一种模板式设计,可以当作系统实现过程中的中间产品,已经实现了系统部分功能。 2、使用不同:(...

2020-01-16 13:32:03 796 1

空空如也

空空如也

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

TA关注的人

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