Daily
JZ20
这个作者很懒,什么都没留下…
展开
-
剑指offer算法题之数组中出现次数超过一半的数字
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。思路若满足,则一定先满足他是一个众数,先找出众数,再判断是不是超过了一半public class Solution { public int MoreThanHalfNum_Solution(int [] array) { if(array.length == 0){原创 2020-08-21 09:26:24 · 190 阅读 · 0 评论 -
剑指offer算法题之变态跳台阶
一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。public class Solution { public int JumpFloorII(int target) { if(target == 0 ||target == 1){ return 1; }else{ double a = target; double b =Math.p原创 2020-08-21 09:24:30 · 208 阅读 · 0 评论 -
剑指offer算法题总结之不用加减乘除做加法
写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。思路:把按位运算计算加法的操作分成两步(其实和列竖式计算的思路一致,就是拆分成两步而已):1 每一位的计算结果在不考虑进位的情况下 异或 ,记作数a,2 把进位给加上,也就是按位与,然后左移一位 (和列竖式时进一位写个小1道理一样)记作数b ;3 把1,2的结果相加 ,但是1,2相加操作本身又需要使用1,2 直到不需要再进位也就是 2的结果是0即可(相当于列竖式时上下相加没有进位了,这时实际的相加结果和步骤1也就是按位异或结果原创 2020-08-21 09:20:14 · 195 阅读 · 1 评论 -
剑指offer算法题之两个和为s的最小数
输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。思路:前后逼近的双指针用while if,用for没法分情况(大了就头指针往后移动,小了就尾指针往前移)import java.util.ArrayList;public class Solution { public ArrayList<Integer> FindNumbersWithSum(int [] array,int sum) {原创 2020-08-21 09:17:49 · 145 阅读 · 0 评论 -
剑指offer算法题总结之二进制数中1的个数
输入一个整数,输出该数32位二进制表示中1的个数。其中负数用补码表示。总结 : 如果一个整数不为0,那么这个整数至少有一位是1。如果我们把这个整数减1,那么原来处在整数最右边的1就会变为0,原来在1后面的所有的0都会变成1(如果最右边的1后面还有0的话)。其余所有位将不会受到影响。举个例子:一个二进制数1100,从右边数起第三位是处于最右边的一个1。减去1后,第三位变成0,它后面的两位0变成了1,而前面的1保持不变,因此得到的结果是1011.我们发现减1的结果是把最右边的一个1开始的所有位都取反了。这个原创 2020-08-19 18:50:48 · 130 阅读 · 0 评论 -
剑指offer算法题总结之调整数组顺序使得奇数在偶数前面
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。*思路 :这个其实考察的还是排序算法,例如利用冒泡排序的思想,排大小和排奇偶也没什么区别public class Solution { /** * 冒泡 * @param array */ public static void reOrderArray(int [] array) {原创 2020-08-19 18:48:40 · 132 阅读 · 0 评论 -
剑指offer算法题总结之最小的k个数
输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4。这个题我用的比较直接的方法,用hashmap,但是这题目用堆排序更契合,后续待补充import java.util.*;public class Solution { public ArrayList<Integer> GetLeastNumbers_Solution(int [] input, int k) { Arrays.sort(input原创 2020-08-19 18:46:41 · 198 阅读 · 0 评论 -
剑指offer算法题总结之反转单词序列
牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?思路:先反转整个句子,再一个个反转单词,靠空格判断单词起始位置public class Solution { public String原创 2020-08-19 18:45:00 · 164 阅读 · 0 评论 -
剑指offer算法题目总结之机器人走格子
地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+5+3+8 = 19。请问该机器人能够达到多少个格子?//思路:dfs,搜索四个方向,vis记录该方格是否被搜索过,// 预判方格是否合法,合法就从该方格接着搜索public class Solution {原创 2020-08-19 18:42:45 · 573 阅读 · 0 评论 -
剑指offer算法题总结 丑数
之前老早就准备贴过来的,一直没做,现在把剑指offer上遇到的写的不好的收藏的题拿过来整理总结一下把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。想法:丑数也可以理解为一种迭代,并且按从小的到大排列的话,就是不断地从已经得到的已知的丑数里再继续乘以2,3,5得到新的,但是根据直觉很容易知道除了第一个1之外(也就是目前只有一个丑数),肯定先乘以2,然后就需要判断了因为产生的原创 2020-08-19 18:40:19 · 146 阅读 · 0 评论 -
拖延了好久的ssm框架的整合与开发实例问题总结
1.首先要注意以下几个版本的匹配问题,idea版本与maven版本(不推荐用2020的,bug太多,我用的2019.1,maven不要版本太高,我3.9换成了3.5),mysql版本与jdbc驱动版本,servlet依赖的版本(2.5和3.0),数据库连接池的版本,这些版本不同都会导致出bug,报错,各种很烦人又难以查找的bug2.如果数据库测试连接失败了,看一下这里大概率是你的默认的版本有问题,之前这里有问题一直在调,改jdbcurl,换驱动,换版本都不行,后来发现是这里的问题3. web路径:不原创 2020-08-19 18:34:50 · 182 阅读 · 0 评论 -
剑指offer算法题笔记总结之跳台阶和斐波那契
1.斐波那契数列入门方法就是递归方式,即f(n)=f(n-1)+f(n-2);其中n=1,2时都等于1,但是递归方法在很多时候都是性能比较差的一种算法,因为在计算的时候会涉及很多重复的计算,比如算F5,就需要计算F4.F3,计算F4就又需要计算F3,从F5开始分成的两支会有很多值被重复计算,浪费了效率,我看大家都说面试的时候不推荐写,我写了一下确实,测试用例500ms,用了自底向上循环迭代的方法,只有十几ms,可以使用这种方式,这里给的是青蛙上台阶的样例,和斐波那契基本一致,只不过多了f0=1的定义,也就原创 2020-08-05 16:38:05 · 155 阅读 · 0 评论 -
新版edge浏览器换主题皮肤,使用Chrome浏览器的主题皮肤
新版edge更新以后,感觉页面看起来更加清爽美观 ,但是商店一直没有以前Chrome浏览器的一些扩展插件,没Chrome全,比如主题皮肤,之前按照网上查到的进入谷歌商店https://chrome.google.com/webstore/category/themes然后下载,在本地c盘找到文件,然后在edge里加载扩展的方法经常不行,**原因:**edge里打开谷歌商店下载扩展,添加至Chrome会出错,提示重新加载,或者有的Chrome因为没相关插件打不开商店,这里说一种最方便的方法在新版edge的原创 2020-08-04 17:57:57 · 5215 阅读 · 1 评论 -
java动态代理的invoke以及源码理解
invoke 方法介绍想要知道 invoke方法为什么会自动调用我们先要来了解一下这个方法public interface InvocationHandler {public Object invoke(Object proxy, Method method, Object[] args)首先 该方法来自于接口InvocationHandler ,该接口中仅有一个invoke方法 ,该方法中有三个参数12345@param proxy the proxy instance that转载 2020-07-29 17:44:47 · 671 阅读 · 0 评论 -
java动态代理原理详解
记录一下看到的一篇写的很好的博客:在学习Spring的时候,我们知道Spring主要有两大思想,一个是IoC,另一个就是AOP,对于IoC,依赖注入就不用多说了,而对于Spring的核心AOP来说,我们不但要知道怎么通过AOP来满足我们的功能,我们更需要学习的是其底层是怎么样的一个原理,而AOP的原理就是Java的动态代理机制,所以本篇随笔就是对Java的动态机制进行一个回顾。首先问一个问题,为什么需要动态代理?代码混乱:越来越多的非业务需求(日志和验证等)加入后,原有的业务方法急剧膨胀。每个方法在处转载 2020-07-29 17:27:54 · 185 阅读 · 0 评论 -
java动态代理中invocationhandler和Proxy.newProxyInstance的原理理解
最近看动态代理和aop,对一些问题有一些疑惑和自己的理解,希望大佬能看看我说的哪里有问题,给我指正,欢迎讨论 //调用该方法Proxy.newProxyInstance(obj.getClass().getClassLoader(),obj.getClass().getInterfaces(),myInvocationHandler);} //返回一个代理类的对象,实现第一步,而我们自己写的InvocationHandler的接口实现类,看似和静态代理的代理类比较像, //但在动态原创 2020-07-29 17:23:08 · 905 阅读 · 0 评论 -
java笔记随时整理
数组长度为0和null不同, int 【】arr = new int【0】和 int 【】arr = null的区别是一个堆空间确实new了对象有地址,null是空引用string不可变,底层是char数组,所以string虽然是引用类型数据,但是复制赋值时,string a = “a”;string b = a;b = “change”;此时虽然ab同时指向原来a那一份的堆空间,但是修改了之后,因为不可改所以就重新开辟空间又存放这些数据,string的两种创建方式:直接赋值,从常量池中找,有了直接拿原创 2020-07-26 22:12:53 · 107 阅读 · 0 评论 -
Java反射等相关知识回顾总结
框架= 反射 + 注解 + 设计模式反射可以用来:在运行时判断任意一个对象所属的类在运行时构造任意一个类的对象在运行时判断任意一个类所具有的成员变量和方法在运行时获取泛型信息在运行时调用任意一个对象的成员变量和方法在运行时处理注解生成动态代理Class类对象照镜子后可以得到的信息:某个类的属性、方法和构造器、某个类到底实现了哪些接口。对于每个类而言,JRE 都为其保留一个不变的 Class 类型的对象。一个 Class 对象包含了特定某个结构(class/interface/en原创 2020-07-22 10:07:00 · 116 阅读 · 0 评论 -
java的向下转换即引用数据类型的强制类型转换与多态的
在java中强制类型转换分为基本数据类型和引用数据类型两种,这里我们讨论引用数据类型的强制类型转换。 在Java中由于继承和向上转型,子类可以非常自然地转换成父类,但是父类转换成子类则需要强制转换。因为子类拥有比父类更多的属性、更强的功能,所以父类转换为子类需要强制。那么,是不是只要是父类转换为子类就会成功呢?其实不然,他们之间的强制类型转换是有条件的。 当我们用一个类型的构造器构造出一个对象时,这个对象的类型就已经确定的,也就说它的本质是不会再发生变化了。在Java中我们可以通过继承、向上原创 2020-07-21 10:23:33 · 245 阅读 · 0 评论 -
java有关线程创建方式,线程池,sync,lock锁等的内容再次补充以及sleep,wait
线程四种创建方式:(Thread类也是继承了runnable接口的)1 继承thread类 共享数据 成员变量得是static的,比如卖票2 实现runnable接口 ,然后把实现类的一个实例化对象放到thread类的构造器中充当task参数,通过thread.start()启动线程并执行run方法,thread类源码的run()方法是先判断task是否是null,若不是null,在执行run方法时,执行的是task.run() ,也就是自己实现接口的那个实现类的run有利于多个线程共享数据().原创 2020-07-20 17:18:24 · 166 阅读 · 0 评论 -
java的stringbuffer和stringbuilder区别
1、StringBuffer 与 StringBuilder 中的方法和功能完全是等价的,2、只是StringBuffer 中的方法大都采用了 synchronized 关键字进行修饰,因此是线程安全的,而 StringBuilder 没有这个修饰,可以被认为是线程不安全的。3、在单线程程序下,StringBuilder效率更快,因为它不需要加锁,不具备多线程安全而StringBuffer则每次都需要判断锁,效率相对更低...原创 2020-07-20 17:19:07 · 105 阅读 · 0 评论 -
简洁易懂举例理解jdk5.0之后java的自动装箱和自动拆箱
之前就遇到过类似的疑惑,为什么基本数据类型有时候能当成对象用,例如一个method(object o);需要一个对象作为参数传入,但是int i= 1;这样的一个i可以传入,或者说这个时候的i可以当成一个对象用,这就是jdk5之后就有的新特性,自动装箱,意思就是本身是个基本数据类型,但是在他需要时可以直接封装成一个包装类的对象,在需要他变成基本数据类型时,他就自动拆箱变成里面的那个数据;它们分别对应着在jdk5之前没有自动装箱和拆箱的两个步骤:装箱int i = 1对应: 实例化一个对象:integer原创 2020-07-20 11:19:48 · 153 阅读 · 0 评论 -
Java集合知识点回顾总结
一方面, 面向对象语言对事物的体现都是以对象的形式,为了方便对多个对象的操作,就要对对象进行存储。另一方面,使用Array存储对象方面具有一些弊端,而Java 集合就像一种容器,可以动态地把多个对象的引用放入容器中。数组在内存存储方面的特点:数组初始化以后,长度就确定了。数组声明的类型,就决定了进行元素初始化时的类型数组在存储数据方面的弊端:数组初始化以后,长度就不可变了,不便于扩展数组中提供的属性和方法少,不便于进行添加、删除、插入等操作,且效率不高。同时无法直接获取存储元素的个数数组存储的原创 2020-07-19 11:15:51 · 217 阅读 · 0 评论 -
java四个权限修饰符的区别
原创 2020-06-25 16:17:53 · 183 阅读 · 0 评论 -
java的次方表示式以及if else 和 switch case区别
java表示一个数的次幂必须得用这个方法才行,Math.pow(底,次方)if else 和switch case:switch case 都可以 转换成if else ,反之则不定;因为switch case都是对离散值的筛选,比如case:1,2,3…时;但是if else 可以是一个范围比如if(a<10)时,所以当if else 是一个范围的话,就不能用switch case代替了...原创 2020-06-07 10:05:12 · 589 阅读 · 0 评论 -
java的junit测试类的@test在测试时一直运行转圈圈以及为什么声明成public
Junit是自动化的测试,手动的输出会导致一直阻塞,也就是说junit不支持手动输入,否则会导致当前线程一直阻塞,转圈圈,所以test类不要用scanner那种控制台手动输入数据的方式,把数据直接写成形参,测试的时候直接写成参数测试吧;JUnit总是为每个@Test方法创建一个测试类实例,所以必须要声明成public,也就是公共的,才能让junit给你创建,否则权限不够的....原创 2020-06-06 10:56:32 · 4542 阅读 · 0 评论 -
idea2019.1导入maven3.6.3依赖失败的问题解决
最近在学springboot,在网上查了最好自己下载maven,熟悉整个流程原理,然后自己去maven官网下了一个最新版本的3.6.3,然后在配置完之后idea创建项目提示导入失败,我查了log日志之后发现是版本不兼容问题,查了一下官网maven3.6.3是2019的10月份才发布的,比我的idea版本还新,换一个maven版本低一点的就好,下载了一个3.3.9的版本,配置xml文件,加个阿里云镜...原创 2020-04-12 20:01:59 · 2118 阅读 · 0 评论 -
代码上传github问题:*** Please tell me who you are. Run git config --global user.email
1.今天学习了一下使用github,登上之前注册的github账号,把自己做的项目上传,结果在执行commit命令时,提示我意思是,第一次创建git仓库,需要核实你的个人信息,所以按照提示用git config命令配置你自己的email和用户名就行了2.在ssh链接的时候,出现问题,执行push命令之后,出现了这个$ git push -u origin masterThe authe...原创 2020-04-09 16:19:46 · 609 阅读 · 0 评论 -
a href超链接到指定servlet失败的问题解决
这个问题之前踩过坑,但是我居然忘了把这个问题总结到博客上,结果今天排查了半天,说一下问题,页面设置注销的时候要销毁session,然后设置了a href到自己写的servlet里,结果发现url里有action参数,但是页面空白,后来在servlet里加了一句打印,发现没有跳转成功,后来想起来,a href超链接这个是get方法,所以要在servlet的doGet方法里写一句这个代码,让get方法...原创 2020-03-31 17:12:21 · 1333 阅读 · 0 评论 -
idea的out文件夹重新打包
1原创 2020-03-30 10:08:21 · 1849 阅读 · 0 评论 -
写网站分页的js时遇到问题,js代码不起作用
写好了js代码发现分页不起作用,检查了一下发现分号忘记加了,记得一定要加分号记得写分号,不加的话编译不报错,但是执行时无效,原创 2020-03-29 11:27:30 · 344 阅读 · 0 评论 -
idea的1099和8080端口被占用的问题解决
今天电脑抽风了,各种问题,之前遇到过然后就用其中一种方法解决了,可以改tomcat的端口号,但是有时候还是会遇到这种问题 ,然后就用了方案二方案二:打开cmd输入netstat -aon|findstr 1099,查看占用端口号的进程,然后 输入taskkill -f -pid (占用1099的端口号),然后解决问题,8080同理 ...原创 2020-03-27 16:14:10 · 756 阅读 · 0 评论 -
idea点右上角浏览器快捷键出现网页源码,以及不能注解使用/manager/xxxServlet的问题解决
1.补充一下昨天和今天又遇到的问题,区分网站前后端的时候,我在servlet的url-pattern注解前面加了一个/manager之后出现了一个报错404,大概意思是/manager有特殊意义,如果你有url前面带了这个,就会认为是你进了tomcat里的xxx,所以把manager随便改成其他的只要能有辨识作用就行2.因为出现那个404,然后我就试了试把注解去了,改成在web.xml里配置,结...原创 2020-03-27 15:58:01 · 1169 阅读 · 0 评论 -
网页中文乱码+idea的的vmoption配置文件3/17
最近写代码调bug调的我逐渐失去意识,然后还遇到各种意料之外的问题,比如请求分发的时候页面乱码,后来找了各种帖子找解决办法,一个个试还是不管用,idea的vmoption文件改了改,tomcat的xml,bat各种改,都没有解决问题,重启和重新部署吐了,中午觉都没睡,后来想了一下,发现不启动tomcat在idea打开页面没有问题,一部署访问就出错,应该是tomcat的问题,然后我就把之前配置的全都...原创 2020-03-17 11:14:59 · 233 阅读 · 0 评论