- 博客(61)
- 资源 (1)
- 收藏
- 关注
原创 arthas查看spring bean及调用其方法
因为可能存在很多个类加载器,每个classloader都有可能加载spring的ApplicationContext类,所以需要确定具体是哪个类加载器,找到其hashcode。第三步:调用bean的方法。第一步:寻找类加载器。第二步:查看bean。
2023-11-06 19:32:52
4587
原创 Spring中初始化和销毁方法的执行顺序
在Spring中我们可以通过InitializingBean、@PostConstruct、以及制定init-method等方式在bean初始化时做一些初始化相关的操作,以及通过DisposableBean、@PreDestroy和destroy-method等方式在bean销毁时执行一些销毁操作。那么这些不同方式的执行顺序是什么呢?接下来我们通过实战来看下具体的执行顺序。定义beanpackage com.example.demo.service;import org.springframe
2021-11-07 22:40:20
1195
原创 关于Git中版本回退的几种场景总结
场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file 还没执行git add添加到暂存区 场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD,就回到了场景1,第二步按场景1操作 执行了git add添加到了暂存区 场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库 执行了git ...
2021-04-11 10:21:48
197
原创 一次数据库varchar字段长度设置问题引发的异常
先上图--- Cause: com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column 'activity_id' at row 1; nested exception is com.ibatis.common.jdbc.exception.NestedSQLException: 图中的异...
2020-04-01 21:29:23
2657
原创 Java线程中断机制
概述中断代表线程状态, 每个线程都会有一个中断状态, 用boolean表示, 初始值为false, 而线程的中断其实就是修改这个中断状态为true的过程.中断只是一个状态, 并不能决定线程的运行.假设当前线程处于阻塞等待状态, 例如调用了wait()、join()、sleep()方法后, 调用线程的interrupt()方法, 此时中断状态被置为true, 线程会立马退出阻塞并抛出In...
2020-04-01 20:54:27
230
原创 利用keras破解captcha验证码
本文参考了知乎上的一篇文章,只做了少许改动,感觉挺好玩的,自己实现了一下,准确率比原作者的要高一些。如果想要了解原创文章的话,请移步知乎:使用深度学习来破解captcha验证码本文通过keras深度学习框架来实现captcha验证码的识别,具体的环境配置如下:Python:2.7.12keras:1.2.2theano:0.9.0rc2captcha:0.2.4nu
2017-11-23 16:00:18
5155
3
原创 653. Two Sum IV - Input is a BST
两数之和的第四个版本:输入是一颗二叉查找树。首先讲一下我的解法:二叉查找树的一个重要特点是其中序遍历的结果是一个有序数组。我们可以很好的利用该性质:首先得到BST的中序遍历结果,然后采用167. Two Sum II - Input array is sorted中的方法进行搜索,找到返回true,否则返回false。/** * Definition for a bina
2017-10-30 15:24:01
347
原创 167. Two Sum II - Input array is sorted
两数之和的第二个版本:这次假定给定的数组是按升序排好序的。 1.仍然可以采用暴力求解法(brute force),这种方法的分析与1. Two Sum中的第一种方法是一样的。这里就不给出解法了。 2.既然数组是有序的,我们可以设置两个下标,分别指向数组的两端,如果两个下标对应的数组元素之和等于target,则正好找到,返回相应的下标+1即可;若大于,则右端的指针应该左移;若小于
2017-10-30 14:55:24
354
原创 1. Two Sum
两数之和的第一个版本:给定一个整形数组和一个整数target,如果在数组中存在两个元素之和为target,则返回这两个元素的下标。 1.暴力求解法(brute force) 我的第一个思路当然是暴力求解法(brute force),这种方法只需要两重循环即可,其实是一种排列组合的方式,求出所有可能的组合方式,然后从其中查找是否存在和为target的组合,如果有则返回对应的下标。
2017-10-30 14:25:56
353
原创 数据结构-树
大二的时候数据结构这门课老师教的很水,自己学得也很水,所以很多知识都忘了,现在有时间来好好学习一下曾经的知识,这里简单总结一下。树这部分的知识还是很多的,这里我不再一一去总结,我简单列出了一些写得不错的博客,在这里收藏一下,希望经常翻阅,领会大佬们的精华所在。 树大致可以分为以下几种:树二叉树二叉查找树/二叉排序树/二叉搜索树平衡二叉树平衡二叉查找树之AVL树平衡二叉查找树之红黑
2017-10-23 15:31:29
238
原创 web.xml中load-on-startup的含义
我们先来看一段配置: MyServlet com.cao.servlet.MyServlet myparam 100 0 MyServlet /MyServlet它里面包含了这样一段配置:0这段配置有什么用呢?我们先来看一段描述:总结为以下的几点:load-on-startup元素
2017-10-09 16:05:52
320
原创 Java中的comparable和comparator详解
这两个概念也是我比较困惑的,每次都是看懂了之后,再去用的时候又忘了,所以在这里做好笔记,以便随时查阅。
2017-09-26 21:07:22
695
原创 Java中的Iterable和Iterator详解
关于这两个概念,我还是在使用Java中的集合类的时候产生的疑问,有时候分不清这两个概念之间的区别,于是查了很多资料,终于搞懂了,在这里写下自己的笔记,以便随时查找。
2017-09-26 20:59:42
2466
原创 67. Add Binary
二进制字符串相加:给定两个二进制字符串,返回他们的和。这道题的解法比较简单,将两个二进制字符串右对齐,然后逐元素相加就可以了,同时设置一个进位变量。时间复杂度为O(n)(n为两个字符串长度中的较大者)。
2017-09-24 15:23:57
300
原创 66. Plus One
大数加1:给定一个数组表示的非负整数,最高位在数组的前面,对这个整数加1.这道题最直观的解法是逆向遍历数组,同时处理进位,如果最后一位仍然有进位,则直接在数组的最前面插入1.时间复杂度为O(n),空间复杂度为O(1)。但是这道题可以减少一些计算的次数,只有当数组中全是9时,才能一直产生进位,最后遍历到最高位时,仍然还有进位。
2017-09-24 15:01:00
365
原创 226. Invert Binary Tree
二叉树倒置:总的来说就是交换二叉树的左右孩子,使得交换前后的两棵树是镜像对称的。关于树的问题用递归的思想来做肯定是没有问题的,我第一个解法也就是递归的方法,这里我就不再介绍我的解法了,我们看一下leetcode上给出的详细介绍。
2017-09-17 09:48:25
254
原创 203. Remove Linked List Elements
移除链表中的元素:从一个整型链表中删除所有值等于val的元素这个题目让人想到的第一个解法就是遍历链表一一比较来删除值等于val的元素。提交结果如下图所示:这种方法还是很不理想的,只打败了7.28%的提交者,当然要思考问题出在了哪里。思考了很久,也没有发现更快的方法,而且上述方法的时间复杂度为O(n),已经是很低了,但是我发现自己第一次提交的代码重复代码太多了
2017-09-16 09:14:39
237
原创 26. Remove Duplicates from Sorted Array
数组中重复元素的移除:要求空间复杂度是常量级的我的第一个想法还是跟 27. Remove Element里面的第一个相同,遇到重复的就移动数组,把前面的重复值覆盖了,但是这样的时间复杂度比较大O(n2)提交结果果然不尽人意这时候脑子里的第一个反应就是肯定还有更快的,然后想法跟 27. Remove Element的第二种也是一样的,我惊奇的发现这两个问题的解决思
2017-09-15 19:42:49
242
原创 27. Remove Element
移除元素:给定一个数组和一个值,移除数组中该值出现的所有实例,最终返回移除后的新的数组长度。要求不能分配额外的数组空间,空间复杂度是常量级的,原数组中的元素顺序是可变的,超出长度的部分的值无关紧要我的第一个想法是移动数组元素,也就是把数组中与该值相等的元素统统往后移,利用两个for循环即可实现,但是这样的话时间复杂度是O(n2),确实比较慢。提交结果如图所示:
2017-09-15 19:20:32
285
原创 338. Counting Bits
位计数:给定一个数num,求从0-num之间每个数字的二进制位中1的个数。要求:1.时间复杂度是O(n)2.空间复杂度也是O(n)以上两个要求也就限制了我们不能使用简单的暴力求解的方法去解决该问题,必须去总结数据中的规律,找到更简单的方法。0011210311410051016110711181000
2017-09-14 15:24:36
280
原创 461. Hamming Distance
汉明距离:两个整数中对应的字节不同的个数。这里我介绍一下自己的两种解法。第一种解法是先对x和y做异或^运算,然后对结果中1的个数进行计数。第二种解法是直接比较x和y中不同字节的个数。
2017-09-14 11:00:45
230
原创 70. Climbing Stairs
爬楼梯问题:假设你正在爬楼梯,可以在n步之内到达顶端,但每次你只能爬1步或2步,求到达顶端的不同方法的个数。这道题的第一个解法是我无意间发现的,我从n=1算到n=4,发现答案其实是一个斐波那契数列,所以就有递归和循环两种解法,亲测递归的解法会发生超时,所以这里不再给出递归的解法。第一种方法的提交结果如图所示,感觉一般般。第二种解法是基于动态规划的思想:当n=
2017-09-13 17:09:22
308
原创 28. Implement strStr()
子串查找问题:在haystack中查找needle第一次出现的索引,如果needle不是haystack的一部分,则返回-1子串匹配问题在数据结构(C语言版)(严蔚敏、吴伟民)这本书里面已经讲得很详细了,包括暴力求解法、KMP算法、改进的KMP算法等。在刷题的时候,怀着侥幸的心理首先尝试了一下暴力求解法。然而,通过了!!!而且打败了47.65%的提交者,于是乎没有尝试KMP
2017-09-13 13:45:27
334
原创 21. Merge Two Sorted Lists
合并两个有序链表:这道题主要是比较两个链表中的元素大小,并以此为依据,选择相应的结点进行重组,最后将生成的链表返回。这里我采用了两种方法:循环和递归首先是循环的方法,这种方法主要是遍历两个链表,直到其中一个为空,最后将提前为空的链表直接插入到结果链表之后即可,返回时请注意,是head.next,而不是head,因为头结点没有存储任何信息:然后是递归的方法:
2017-09-12 13:43:09
228
原创 Java数据类型(收藏)
先引用一张图,这张图出自博客[1]:从图中可以看到,Java的数据类型分为基本数据类型和引用数据类型。Java有8种基本类型,分为四类:1.逻辑型,boolean只能取true或false2.字符型,char3.整型,byte,short,int long4.浮点型,float,double基本类型数据直接在栈中进行数据的内存分配,而对于引用类型的数据,数据的引
2017-09-11 19:06:49
192
原创 20. Valid Parentheses
括号匹配问题:这个题基本上没什么技术含量,稍微复杂点的可能会在输入字符串中包含别的字符,比如说判断一个Java源代码中的所有括号是否匹配等。我的解法如下代码所示:
2017-09-11 16:49:52
202
原创 8. String to Integer (atoi)
字符换转化为整形:这道题在leetcode上归为easy,其实并不easy,就是在考察一个人考虑问题的全面性,我提交了很多次才通过,都是因为考虑不全,导致部分测试用例无法通过。这道题题目描述很简单,就是字符串转化为整形,但是要考虑的可能的输入情况是很多的,在Requirements for atoi里给出了具体的要求。1.丢弃字符串中第一个非空格字符前的所有空格字符2.字符串的
2017-09-11 14:23:48
228
原创 7. Reverse Integer
整数翻转,大概情况如图所示。 以前也做过这样的题,只不过没有考虑翻转之后溢出的情况,我的解法如下,其实跟以前的实现并没有什么区别,只是在每次res改变之前判断一下它是否已经超过了最大值和最小值除以10的值,如果已经超过,那么res乘以10之后肯定是溢出的,所以直接返回0。
2017-09-11 13:19:51
194
原创 Java String判等问题
“==”判断符号左右两个对变量(引用类型)是否指向同一内存地址equals()方法判断两个对象是否一样(所有成员的值相同)例1:String a = "abc";String b = "abc";System.out.println(a == b); //trueSystem.out.println(a.equals(b)); //true在例1中,“abc”是放在常量池(con
2017-08-13 15:44:16
2019
原创 辗转相除法详解
欧几里得算法,又称辗转相除法,用于求两个自然数的最大公约数。算法基于数论等式gcd(a,b)=gcd(b,a mod b),其时间复杂度为O(logk),其中k=max(a,b),若k的位数为n,则时间复杂度为O(logn)。时间复杂度的证明比较麻烦,这里就不证明了,知道是这样就行了。辗转相除法基于如下原理:两个整数的最大公约数等于其中较小的数和两数的相除余数的最大公约数。辗转相除法可
2017-08-13 10:02:12
9068
原创 排序算法
排序算法排序:整理文件中的记录,使之按关键字递增(递减)的次序排列起来被排序对象-文件排序运算的依据-关键字 1.排序的稳定性当待排序记录的关键字均不相同时,排序结果是唯一的,否则不唯一稳定性的前提:待排序的文件中,存在多个关键字相同的记录经过排序后: 若具有相同关键字的记录之间的相对次序保持不变,该排序方法是稳定的若具有相同关键字的记录之间的相
2017-08-12 11:41:30
419
原创 筛选法查找100以内的素数
所谓筛选法,是指从小到大筛去一个已知素数的所有倍数。(这是我第一次听说筛选法)例如:根据2,我们可以筛去4,6,8,...,98,100等根据3,我们可以筛去9,15,...,99等(6和12已经被筛去)根据5,......package com.cao.test;public class Example_2 { public static void main(Stri
2017-08-10 17:12:27
915
原创 0-n之间的1的个数何时等于n(Java程序员面试宝典)
Consider a function which ,for a given whole number n, returns the number of ones required when writing out all numbers between 0 and n.for example, f(13)=6. notice that f(1)=1. what is the next lar
2017-08-10 16:22:20
374
原创 MyBatis实例
上篇博客中我讲解了如何配置MyBatis的开发环境,这里我就直接拿一个例子来说明如何在实际的开发中使用MyBatis。项目目录结构在MyEclipse中新建一个Java web项目,并导入MyBatis的jar包,同时在src目录下新建一些包,以区分不同的功能,目录结构如下图所示。我们来一一讲解一下这些文件的具体内容以及功能。(1)log4j.properties该文件
2017-06-25 20:22:35
385
原创 MyBatis开发环境搭建
大三的时候简单学习了SSH框架,现在忘得差不多了,本来想再学习一遍的,到网上搜了搜,发现时过两年,我完全out了,好像最近有个什么SSM框架,spring+springmvc+mabatis,怀着好奇的心理,想学学这些新的知识,先从底层数据库这块开始把,于是乎我开始了漫长的学习之旅。。。。。不扯淡了,最近在看MyBatis这个框架,感觉还挺不错的。之前学习Hibernate的时候,好像都不用写
2017-06-21 16:29:42
402
原创 575. Distribute Candies-分糖果问题
说实话,自己非常讨厌刷题,而且对算法这方面不太感兴趣,只怪本科的时候玩的太多了,没有好好学习,学不会数据结构和算法,才导致今天特别讨厌算法。但是。。。。。我还是注册了LeetCode,开始看看有没有简单容易的、适合自己的题做做。今天看到了575这道题,大意如下:一个整数数组,长度为偶数,里面的不同的数字代表了不同的糖果,而每一个数字代表了对应种类糖果中的一个。现在你要开始分糖果了,但是弟弟
2017-06-15 21:23:29
514
原创 numpy各种函数的axis属性
最近在做深度学习的一些工作,然而里面关于多维矩阵的操作搞得自己晕头转向,特别是axis参数,搞不清它到底是在哪个维度上进行的操作,于是上网搜集了各种资料,见到了一个写得不错的总结,分享在这里numpy mean函数的axis参数
2017-06-14 16:15:52
1269
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人