- 博客(88)
- 收藏
- 关注
原创 记一次迷之错误:无法import自己写的类
简单介绍一下环境笔者在写一个SSM的小demo,复制了一些类过来,但是神奇的是,在一个类中无法import另一个类,具体来说是:service实现类中无法import dao和service接口,就是如此简单的问题,Cannot resolve symbol xxx,按照我目前的水平,这种问题应该能解决的,但是定位了一个多小时,最终发现在这些包里建的类在别的类里面都无法import,但是没有找到为什么这样。解决方案定位了问题原因,解决就简单了,新建一个不一样的包,把那个有问题的包里面的类移到新建
2021-04-22 11:29:22
693
原创 springboot模块分化,实体模块分离出来之后报错
用于搜索引擎抓取2021-04-12 10:53:30.965 ERROR 25268 — [ restartedMain] o.s.b.d.LoggingFailureAnalysisReporter :Description:Failed to configure a DataSource: ‘url’ attribute is not specified and no embedded datasource could be configured.Reason: Failed to d
2021-04-12 12:54:51
293
原创 mybatis使用笔记:resultMap没有全部对应的字段处理
记录说明在使用mybatis的时候,使用mapper将表记录和实体对应起来的方法大概有:resultType和resultMap两种。resultType,直接指定需要封装的实体,mybatis会利用反射,将数据库中字段对应到实体中的属性,对应规则是:下划线 对应为 驼峰,如:user_phone对应到userPhone。resultMap,比上面的方法灵活一些,可以自己指定对应。现在碰到的问题是:只有几个特殊的字段由于数据库字段和实体名字对应不上,需要手动写,但是其他大部分的属性和字段都是能正
2021-04-01 10:55:26
5322
原创 java异常深入理解与提升(含面试题)
前言作为一个java开发者,异常肯定是天天都在使用的,但是很多时候我们对异常的了解、认知都只是停留在表面。好像现在不会多线程、高并发、微服务、性能调优、容器……这些高逼格的东西,都不好意思说自己是java开发,诚然,这些东西是很重要,但是基础、本质的东西一样重要。今天我就“详细、深入”的学习一下java中的异常,包括体系结构、异常处理、自己使用、异常本质、细节等等,吃透这些东西,能让我们更好的理解、学习java,当然,异常相关的面试题也将不在话下。当然,受限于个人水平、认知、经验等等因素,如果发现错误,还
2021-03-26 11:16:40
1002
原创 Assert使用的一个坑
简介Assert 断言,如果不经常使用,的确觉得这个概念有点难用,断言?什么意思,即便是知道意思,刚开始用着也不顺手,不过用久了,就觉得挺顺手的。Assert和我们通常的if条件判断相反,if是如果xxx,就yyy,而Assert大概意思是:我断言xxx,如果不xxx,我就yyy(并不准确,后面会解释)。举个例子,前端参数验证 // if验证 if (StringUtils.isEmpty(reqVo.getUsername())) { throw new RuntimeExcept
2021-03-23 11:08:25
2110
原创 mysql与redis的区别与使用场景
目录起因正文各自介绍mysqlredis相同点不同点使用场景结束语起因写这篇博客是有一个起因的,来自于我身边一个朋友面试的经历。我朋友跟我讲她面试的经历:面试官问她:什么时候用mysql?什么时候用redis?我朋友可能对这个问题不是很了解,说了句:缓存用redis我当时也就打趣的笑过了,当作一个笑料。没有过多的讨论,我以为下来她知道了这个问题的答案。但是没格一会儿,她找来一张图,然后给我说:我靠,居然还是对的应该是别人做的总结,上面有一个红色的小箭头,指向了一句话:redis用于缓存。这、
2020-12-23 18:53:58
3441
4
原创 Windows下mysql服务无法启动:服务没有报告任何错误。
前言本地一直好好的MySQL突然出问题了(我的机器是Windows的),问题是这样的虽然本地的mysql里没什么重要的数据,但我自己平时练手的那些项目,数据可都在本地,没了还是很心疼的,练手的项目还有有参考价值的,所以我要将这个问题解决了!!着手分析就这提示,也没啥具体的参考、提示信息,想解决也无从下手啊。不过我马上想到了MySQL的日志,可以去看日志嘛,emmm,不过没在本地看过mysql的日志,我也找不到日志在哪里,而且我当初安装MySQL的时候选择了默认安装,把MySQL的服务和数据分开了,
2020-12-15 10:20:00
29480
16
原创 @Autowired和@Resource注解的区别与联系
联系两者都能对bean的属性进注入,都可以用在成员变量上或者方法上。区别1. 来源@Autowired是spring中的注解,@Resource是JDK中的注解2.用法@Autowired:默认是根据类型注入,如果容器中满足类型的实例有多个,会再根据名字(bean的ID)注入,无法根据指定bean进行注入。虽然无法单独的指定bean进行注入,不过可以配合@Qualifier来实现指定bean注入的功能@Resource注解可以根据唯一类型进行注入,也可以根据默认名字进行注入,还可以根据
2020-12-09 11:32:55
326
原创 java设计模式之——简单工厂
简单介绍我们在写的程序,难免遇到需要新增功能的时候,但是新增功能,不能在原本的代码上进行修改,因为在原本的代码上修改,因为修改已经完备的代码可能会导致以前正常的功能变得不可用。最好的办法是:在新增的功能就重写写代码,原本的代码不懂,然后将新实现的功能与原本的代码进行合并,使新功能可用,而又不修过原本的代码。这就是我们经常说的,对扩展开放,对修改关闭。如果此时用简单工厂模式,就可以很好的解决这个问题。例子例如,我们要实现一个计算器,我的第一想法可能就是写在一个方法里,搜集输入数据、运算逻辑、展示输出(
2020-12-07 15:20:18
354
原创 java设计模式之——单例模式(八种实现)
一、介绍有时,我们需要某个类的实例始终只有一个,举个例子,如果用面向对象语言写的操作系统,那么桌面这个实例肯定就只有一个,无论从哪个地方进入的桌面,都是同一个。所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法(静态方法)。比如Hibernate的SessionFactory,它充当数据存储源的代理,并负责创建Session对象。SessionFactory并不是轻量级的,一般情况下,一个项目通常只需要一个Sess
2020-12-07 11:11:08
144
原创 tars的寻址方式
tarstars是腾讯的分布式框架,可类比于Springcloud,微服务的那一套东西:注册中心、服务调用、负载均衡、容错保护、链路追踪都是有的。这个框架在腾讯内部使用了十多个年头,17年开源,以腾讯的体量,这套框架应该是比较稳定的。目前在学习,记录一下学习心得。寻址方式对比spirngcloud中的Zuul网关来理解,tars是基于名字来实现服务的注册与发现的,但是这个名字会有三层,和Java中的包有点像,分别是应用名app、服务名server和服务提供者Servant,通过三层来限定这个名字,条理
2020-12-03 11:22:48
645
1
原创 probobuffer学习笔记
简单介绍特点基本语法syntax = "proto3"option java_package = "com.ql.protobuftest.util";option java_outer_classname = "MultSerializer";message Teacher{ required string name = 1; option int32 age = 2; repeated string number = 3; // 这是注释 /*这也是注释*/}一、非结构体内
2020-11-27 10:31:22
237
原创 使用springboot写一个可以响应protobuffer的接口
写在前面几经波折,最终进了一家公司实习,不过实习公司用的技术我都很陌生。但是的确,面试上没有要求这些技术。办完了入职手续之后,就给我了个练习,给了我两个GitHub的链接,一个是protobuffer的,另一个是tars的,练习是:使用springboot写一个可以响应protobuffer的接口。准备工作因为都不知道protobuffer是什么东西,所以得先学习protobuffer。protocol buffer是Google的一种独立的数据交换格式,可运用于多种领域。protobuff
2020-11-26 10:36:06
1996
1
原创 SQL查询——查询和和xxx同学所选课程完全一样的同学
前言今天碰到一个sql问题,想了半天才想出来,为了记录,所以写了这篇博客。题目和环境是这样的有四张表:学生表、教师表、课程表、成绩表学生表(student):编号(sno)、姓名(sname)、年龄(sage)、性别(ssex)教师表(teacher):编号(tno)、姓名(tname)课程表(course):编号(cno)、课程名(cname)、教师编号(tno)成绩表(sc):学生编号(sno)、课程编号(cno)、分数(score)问题是:查询和“s001”号的同学学习的课程完全相同的
2020-09-16 20:16:07
8584
9
转载 linux下安装mysql
这位大佬写得非常全,按照步骤来OK有一点需要注意的是:在第六步中,my.cnf这个配置文件可能没在/etc/my.cnf这个路径下,可以用下面这个命令查找find / -name my.cnf地址:https://www.jianshu.com/p/276d59cbc529...
2020-09-06 08:26:36
118
原创 八大排序算法之归并排序(结合算法领域圣经《算法4》)
写在前面如果说各种编程语言是程序员的招式,那么数据结构和算法就相当于程序员的内功。想写出精炼、优秀的代码,不通过不断的锤炼,是很难做到的。八大排序算法排序算法作为数据结构的重要部分,系统地学习一下是很有必要的。1、排序的概念排序是计算机内经常进行的一种操作,其目的是将一组“无序”的记录序列调整为“有序”的记录序列。排序分为内部排序和外部排序。若整个排序过程不需要访问外存便能完成,则称此类排序问题为内部排序。反之,若参加排序的记录数量很大,整个序列的排序过程不可能在内存中完成,则称此类排序问
2020-08-14 15:59:19
328
原创 阿亮的算法之路——14. 最长公共前缀
题目描述按照直觉应该不难,不就是遍历,然后挨个比较是否相等嘛,话不多说,直接开始写代码,然后再调试边界情况。首次尝试我的思路是:两层for循环,外层控制每个字符串第几个字符,内存控制是第几个字符串。但是问题就来了,外层在控制第几个字符的时候,边界不好确定,按道理是字符数组中最短的那个字符串,但是那样的话,就以为着需要多遍历一次,多这一次遍历,就纯粹的是为了找到最短的那个字符串,我觉得太浪费了。那我就直接假设字符串数组中的第一个字符串就是最短的,如果是就好,如果不是,那我就用异常处理机制,一旦捕捉到
2020-08-11 19:14:31
168
原创 阿亮的算法之路——13. 罗马数字转整数
题目描述第十二题的逆过程,还是比较简单的。初次尝试也是通过从高位开始往下匹配,匹配成功一个,就将这个数加相应的值,然后再匹配下一个字符。需要注意的是,匹配字符的时候,有的字符是两个同时匹配的,所以需要确定先匹配两个还是一个。 public static int romanToInt(String s) { int[] nums = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1}; Stri
2020-08-11 18:06:13
157
原创 阿亮的算法之路——12. 整数转罗马数字
题目描述一开始看到这题,想到的是动态规划、递归等,但是边想边写搞了半天,好像都不大好实现,索性来个简单的,大数字不就是由小数字起来的吗?首次尝试那我就搞个死循环,挨个的判断,由大到小,这个数如果大于等于1000,就给需要返回的字符串拼接一个“M”,然后将这个数字减去1000……直到最后这个数等于0,就将字符串返回。 public static String intToRoman(int num) { StringBuilder re = new StringBuil
2020-08-11 11:10:34
142
原创 阿亮的算法之路——11. 盛最多水的容器
题目描述看起来挺复杂的,要考虑宽度、长度,还要考虑之前是否就已经存在最大的容量了。首次尝试是有点复杂,但如果用暴力,就很简单,思路简单,代码更简单。我一开始是想着用效率高一点的方式来做的,但想了好一会而也没有思路,所以决定先用暴力的方法做出来。一写代码,发现暴力破解如此的简单:双层循环,从头开始遍历,每遍历到一个数,就从头遍历到当前位置,用一个变量记录最大的容量,遍历完成就ok。代码 public int maxArea(int[] height) { int
2020-08-11 09:01:50
188
原创 阿亮的算法之路——9. 回文数
题目描述题目难度简单,emm,按暴力来做的话,思路是比较简单。初次尝试我一开始,想到的就是用字符串来做,先将这个数字转成字符串,然后再进行判断,可能是平时字符串用得比较多,所以第一时间会想到用字符串。但可能,将其转换成字符串,还不如不转效率更高,当然只是推测,类似的,可以看我的这篇博客:阿亮的算法之路——7. 整数反转但题目的进阶要求:是否可以不将这个整数转成字符串来解决问题?那我就不用字符串做了,直接用这个数来进行操作。怎么操作呢?判断一个数是否是回文数,不就是比较它对称位置的数是否相等吗?比
2020-08-10 21:15:13
185
原创 阿亮的算法之路——8. 字符串转换整数 (atoi)
题目描述这题目难度被归为了中等,但其实我觉得没那么难,当然,我指的是用暴力方法。无非就是判断一下,然后将其拼成一个数字。首次尝试按着思路来,将这个字符串转成一个字符数组,先判断第一个字符,正负号、数字或是其它,然后再往后依次判断后面的字符,将满足要求的数字放在一起,最后将其转成一个数字返回即可public static int myAtoi(String str) { if (str == null || str.trim().length() == 0) { retur
2020-08-10 19:17:14
168
原创 阿亮的算法之路——7. 整数反转
题目描述这题难度是简单,的确是这样。首次尝试思路其实我一开始想到了移位,因为进行移位运算,效率更高,但是没不知道要怎么移位,或者说移位能不能实现,所以就用了最笨的办法,先实现功能。要将一个数反转,计算出他的位数,然后再依次取出每一位,乘以相应的位权即可,最后求和。例如:12,首先计算出它又两位,然后,取出2 乘以 10(2-1),再取出1乘以10(2-2),最后将其求和。代码 int y = x; int count = 0; while (y != 0)
2020-08-10 09:11:41
178
原创 阿亮的算法之路——6. Z 字形变换
题目描述看到题目就觉得有戏,看起来复杂了一点,但是凭我的感觉,这题用暴力是比较容易做的,只是可能比较繁琐。z型变换,实际上是n型,不过都无所谓,我用一个二维数组往里一套,后面再遍历拼接成字符串,就OK了。只是在往二维数组里放值的时候,条件不容易控制,需要慢慢找规律。自己尝试思路因为需要慢慢找规律,所以我在草稿纸上画了一下图:就是字符串的每个字符索引,与这个字符被放入二维数组中的位置关系。仔细观察,我们可以将这些分组,例如:当numRows=3时,这个变量代表着这个字符串需要被分成一个多少行的z型
2020-08-08 20:47:05
300
原创 阿亮的算法之路——2. 两数相加
题目描述我一开始的思路是:遍历这两个链表,将这两个数还原回去,然后做运算,将运算完的结果再按照要求逆序取出来,做成一个链表。实际上应该是可行的,初次尝试但是:我还原回去的数用了一个int类型的变量来接收,但是当第1559个用例时,这个还原回去的数就已经超过了int类型了……迫于无奈,我将类型换成了long类型,我想着这下应该够了把,结果:第1560个用例,直接来了这么长,好像有30位,long类型范围好像是在20位左右,头大,难道换成继续换成double类型的?要是他来个几百位怎么办?换思路换思
2020-08-08 15:49:19
709
1
原创 阿亮的算法之路——122. 买卖股票的最佳时机 II
题目描述题目连接:https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-ii/一开始看到这个题目的时候,有点不知从何下手。想到了动态规划,当前可以获取的最高价格,可以从当前的价格和前几个可以获得的最高价格产生练习,但是我又想到了:万一后面的某个数很大,需要用这个最大的数去减去最小的那个数呢?那岂不是又要倒回去找最小的数?其实是我想错了,正确的思路是:利用分段的思想。因为后面的价格不能比前面的更大,更大的话,那么即便数组里多了
2020-08-06 11:46:01
203
原创 使用java代码增加一点博客访问量
声明:\color{red}{声明:}声明:本人写这个小程序和写这篇博客的目的是用于学习研究,并且\color{red}{本人写这个小程序和写这篇博客的目的是用于学习研究,并且}本人写这个小程序和写这篇博客的目的是用于学习研究,并且只是在测试的时候用了一下,并没大规模的为自己或别人增加\color{red}{只是在测试的时候用了一下,并没大规模的为自己或别人增加}只是在测试的时候用了一下,并没大规模的为自己或别人增加访问量。请读者也以学习为目的,不要作用在其它不法的方面\color{red}{访问量。
2020-08-05 19:56:43
1250
1
原创 用java做一个简易的小爬虫(可以爬美女图片哦)
前言爬虫一直python的强项,其它语言也能做,只是没有python那么方便快捷,今天正好学到java中了一些和网络相关的知识,就做了一个小爬虫。主要功能是:爬取百度图片中的图片,一键下载。效果图为了吸引大家继续看下去,先上效果图功能就是这样,根据输入的关键字不同,自动下载不同的图片,当然,这些图片都是从百度图片中爬取出来的。思路随便输入一个关键字,百度图片就会展示出很多图片我们都知道,网络中的每个资源,都是有唯一确定的位置的。所以展示出来的每张图片,也都有一个唯一路径。在图
2020-08-04 08:33:50
4691
16
原创 阿亮的算法之路——121买股票的最佳时机
题目描述这题被归纳为了动规,但好像往动规的方向思考,没有思路,索性用原始一点的方法首次提交代码 public static int maxProfit(int[] prices) { int len ; if (prices == null || (len = prices.length) == 0) { return 0; } int min = prices[0]; int diff = 0; for
2020-08-03 09:37:44
226
原创 IDAE中一些令人舒服的和顺手的细节设置
写在前面关于IDEA的快捷键,网上都有很多的,而且很全,很容易就能找到,我就不去赋值粘贴了。我总结的,是我自己在使用IDEA过程中,一些很顺手、很舒服的细节设置和快捷键。快捷键F2:可以快速定位到错误位置。本来不想把这个加上的,但是真的很好用诶。Shift+Enter:可以不用将光标移到行尾,而实现换行的操作。正常情况下,我们换行都是:先将光标移动到行尾,然后按Enter。光标在行中时,点击Enter,会把这行拆成两行,但是如果按Shift+Enter,就能不移动光标换行了。Ctrl+
2020-07-31 13:43:45
902
原创 java多线程之——生产者和消费者(详解及提高)
前情引入做一些简单的认识和告知一些前置知识简单介绍生产者和消费者是一种特殊的业务需求的抽象,这种业务就是:需求和供给达到平衡关系,生产一个,就消费一个,或者是生产一部分,就消费一部分。利用多线程,可以对这种业务需求进行简单的模拟和实现,主要是利用Object中的wait方法和notify方法。注意,不能同时生产和消费,因为在多线程下,对共享的数据进行了修改,必须使用同步机制,不然会出现数据安全问题。预备知识首先对java中的多线程,有一定的认识。再者呢,就是Object中的wait方法和no
2020-07-30 11:26:33
1363
2
原创 阿亮的算法之路——343整数拆分
动态规划集中练习题目详情自己思考看到这个题目,会想到用动态规划来做,但是我在想,可不可以用一种统一的思想来解决这个问题呢?类似的,比如给定一个周长,求围成面积最大的图形,那一定是园,将各个方向都崩得最大。我觉得这个题和求面积最大的图形那个题很类似,那这个题的思路肯定也是,将拆分的个数和每一个数的大小都要最大。经过多次尝试,都不行,因为,要拆分成整数,就无法很好的同时兼顾,比如10,按照我的思路,就是应该拆分成3、3、3、1,但是应该是拆成2、3、2、3才是最优的解。而且,应该因数的个数和因数的大小
2020-07-26 09:04:35
300
1
原创 阿亮的算法之路——279完全平方数
动态规划集中练习题目详情自己尝试因为是动态规划的集中练习,所以第一思路就是用动态规划去做。其实这种后面的会受到前面的影响的题,大都会第一想到动态规划。这题我想了一会儿,有了大概的思路,思路就是:状态转移:当前n的最小次数= 所有可以组成n的两个整数的最小次数的和中最小的第一次代码 public static int numSquares(int n ) { int [] dp = new int[n+1]; for (int i = 1; i
2020-07-25 11:15:59
286
1
原创 ArrayList的扩容机制,扩容为原容量的1.5倍这种说法严谨吗?
起因最开始学ArrayList的时候,老师也带着我们翻过一下源码,但是那时初学,看了也不知道个啥。只是记了死结论:会进行数组的复制,扩容为原来的1.5倍今天再次温习ArrayList,然后翻到了源码(jdk11),如下: private int newCapacity(int minCapacity) { // overflow-conscious code int oldCapacity = elementData.length; int new
2020-07-24 17:39:01
7423
10
原创 为什么hashCode和equals方法要一起重写?
声明一下,我是针对哈希表在存这个这个类型的元素分析的默认实现首先要明确,hashCode和equals这两个方法Object中的默认实现hashCode方法 @HotSpotIntrinsicCandidate public native int hashCode();Object中,hashCode方法是被native修饰的,说明底层调用了c或c++的内容。其实做的事情是:根据对象实际的物理内存地址,通过某种算法得出一个数值。equals方法 public bo
2020-07-23 22:34:39
534
原创 阿亮的算法之路——213. 打家劫舍 II
动态规划集中练习题目描述题目链接:https://leetcode-cn.com/problems/house-robber-ii/解题思路动态规划的典型题目,是上一个打家劫舍 题目的升级版,不同的是,上一个是一个单链,这个是一个环形。其实核心都是动态规划,但是就算上一个题会做,这个题也不一定会做,这里还有一点需要考虑和处理。(当然方法可能不止一种),如果以上来就考虑:环形的怎么写状态转移方程,那么就很难跳出来。其实,我们想:换成了环形之后,有什么影响?其实影响就是:偷第一个就不能偷最后一个,偷最
2020-07-23 12:38:06
234
原创 阿亮的算法之路——198. 打家劫舍
集中练习动态规划的题目。题目描述题目链接:https://leetcode-cn.com/problems/house-robber/解题看了一遍题目之后,我知道这个题目是那种当前状态需要由前面的状态来确定的题目,也就是用动态规划,但是我不知道状态怎么确定,怎么写状态转移。本着先完成,后完美的想法。我决定先用自己的思路做一遍,不用动态规划,然后我就思考用最笨的办法来做一往这个方向思考,就陷入了一个漩涡:会不会有两个很大的数,它们俩中间夹了两个数,导致他们俩中间的那那个数都不会取?如果要考虑,就需
2020-07-22 21:43:15
268
原创 正则表达式入门——java语言
前情引入什么是正则表达式?正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本—— 来自百度的解释。说得简单一点,正则表达式就是一套模式,一套对应规则。就像我们使用的字符集一样,有对应关系。字符集是用来与我们使用的语言文字对应的,正则表达式则是用来与字符对应的。比如在ASCII码中,97对应的是小写字母a,在正则表达式中,\w 就对应任何一个单词
2020-07-22 11:51:28
1307
1
原创 双栈法求字符串算数表达式的运算结果
前情引入今天助教给我们布置了一道题,是这样的:给一个算数表达式,要能运算出结果。不用太复杂,要求能支持加减乘除和小括号。听到这个,我马上就想到了用栈来做,因为在《算法导论》第四版中,在介绍栈的时候,用的就是这个例子。其实那本书我没看几页,但是栈那里刚好翻到过。大概思路就是:利用栈FILO: first in last out,先进后出 的特性。用两个栈,一个栈用来存运算符(包括小括号),另一个栈用来存操作数,在需要运算的时候,就从符号栈中弹出一个运算符,从操作数栈中弹出两个操作数,将运算后的结果再压入栈
2020-07-21 16:14:30
670
7
原创 阿亮的算法之路——5. 最长回文子串
题目详情题目链接:https://leetcode-cn.com/problems/longest-palindromic-substring/初次完成老规矩,确保自己的第一思路能先完成功能。反正是各种运行调试,有问题就debug public String longestPalindrome(String s) { String maxSubstr = ""; int in; a:for (int i = 0; i < s.le
2020-07-21 13:43:37
238
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅