java
文章平均质量分 61
秋风不问归客
这个作者很懒,什么都没留下…
展开
-
<JAVA学习笔记>SpringBoot中的@Retryable重试注解
Retryable注解的功能顾名思义,即重试。它可以作用在方法上,当方法抛出指定的异常时,整个方法将会被重新执行。在使用时需要先在pom.xml中导入相关依赖,再在启动类中添加@EnableRetry注释以开启重试功能,最后在相应的方法上添加@Retryable注释。原创 2023-07-19 14:55:07 · 528 阅读 · 0 评论 -
面试必备Java核心技术120面试题
本文梳理了Java核心技术常见面试题,整理了120道题目,包括Java基础、集合框架、并发编程、NIO、反射等部分的内容。语法基础面向对象的特征有哪些方面?hashCode和equals方法的理解?两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对?深拷贝和浅拷贝区别?&和&&的区别?Math.round(11.5) 等于多少?Math.round(-11.5)等于多少?switch是否能作用在by原创 2022-01-15 15:55:08 · 259 阅读 · 0 评论 -
线程的几种状态转换
线程在一定条件下,状态会发生变化。线程一共有以下几种状态:1、新建状态(New):新创建了一个线程对象。2、就绪状态(Runnable):线程对象创建后,其他线程调用了该对象的start()方法。该状态的线程位于“可运行线程池”中,变得可运行,只等待获取CPU的使用权。即在就绪状态的进程除CPU之外,其它的运行所需资源都已全部获得。3、运行状态(Running):就绪状态的线程获取了CPU,执行程序代码。4、阻塞状态(Blocked):阻塞状态是线程因为某种原因放弃CPU使用权,暂时停止运行原创 2021-08-12 10:23:13 · 3736 阅读 · 0 评论 -
电话号码的字母组合
问题描述:给定一个仅包含数字2-9的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。示例:输入:digits = "23"输出:["ad","ae","af","bd","be","bf","cd","ce","cf"]解题思路:我想的是按照树的dfs做,不知道怎么动手打开评论区,先做出来再理解吧。本题是一个电话号码组合的问题,或者说是一个全排列问题。路径:也就是已经做出的选择。选择列表..原创 2021-07-02 18:00:07 · 101 阅读 · 0 评论 -
关于SpingAop切面拦截的问题 protect方法代理问题
问题貌似不能拦截私有方法?试了很多次,都失败了,是不是不行啊?我想了一下,因为aop底层是代理,jdk是代理接口,私有方法必然不会存在在接口里,所以就不会被拦截到;cglib是子类,private的方法照样不会出现在子类里,也不能被拦截。我不是类内部直接调用方法,而是通过维护一个自身实例的代理execution(* test.aop.ServiceA.*(..))public class ServiceA { private ServiceA sel......原创 2021-01-20 14:14:04 · 2084 阅读 · 0 评论 -
RedisTemplate常用方法总结
Redis常用的数据类型:String Hash List Set zSet Sorted setString类型判断是否有key所对应的值,有则返回true,没有则返回falseredisTemplate.hasKey(key)有则取出key值所对应的值redisTemplate.opsForValue().get(key)删除单个key值redisTemplate.delete(key)批量删除keyredisTemplate.delete(key原创 2021-01-13 22:54:29 · 384 阅读 · 0 评论 -
Spring AOP 切面利用@Around注解实现幂等性
@Around注解可以用来在调用一个具体方法前和调用后来完成一些具体的任务。比如我们想在执行controller中方法前打印出请求参数,并在方法执行结束后来打印出响应值,这个时候,我们就可以借助于@Around注解来实现;再比如我们想在执行方法时动态修改参数值等类似功能的注解还有@Before等等,用到了Spring AOP切面思想,Spring AOP常用于拦截器、事务、日志、权限验证等方面。完整演示代码如下:需要说明的是,在以下例子中,我们即可以只用@Around注解,并设置条件,见原创 2021-01-11 14:28:23 · 2113 阅读 · 1 评论 -
@RequestParam和@PathVariable的用法与区别
SpringBoot——@PathVariableURL变量Web应用中的URL通常不是一成不变的,例如微博两个不同用户的个人主页对应两个不同的URL:http://weibo.com/user1和http://weibo.com/user2。我们不能对于每一个用户都编写一个被@RequestMapping注解的方法来处理其请求,也就是说,对于相同模式的URL(例如不同用户的主页,他们仅仅是URL中的某一部分不同,为他们各自的用户名,我们说他们具有相同的模式)。定义URL变量规则可以原创 2021-01-06 14:22:23 · 255 阅读 · 0 评论 -
服务端与客户端传对象以及 I/O 流顺序问题
创建要传输的实体对象UserInfo:package com.NIO.socket;import java.io.Serializable;public class UserInfo implements Serializable { private long id; private String userName; private String password; public UserInfo(){} public UserInfo(long i原创 2020-10-27 09:57:14 · 266 阅读 · 0 评论 -
comparable接口和comparator接口
comparable 接口和 comparator 接口实现比较的区别和用法1.定义 Comparable 接口:使用 Array 或 Collection 的排序方法时,自定义类需要实现 Java 提供 Comparable 接口的 compareTo(TOBJ)方法,它被排序方法所使用,应该重写这个方 法,如果“this”对象比传递的对象参数更小、相等或更大时,它返回一个负整数、0 或正整 数。 使用 Comparator 接口的情景:在大多数实际情况下,我们想根据不同参数进行排序。比如, 作为原创 2020-10-24 20:13:45 · 267 阅读 · 0 评论 -
详解 & 0xff 的意义及作用
首先我们要都知道, &表示按位与,只有两个位同时为1,才能得到1, 0x代表16进制数,0xff表示的数二进制1111 1111 占一个字节.和其进行&操作的数,最低8位,不会发生变化.下面着重来说说&0xff都有哪些应用:1. 只是为了取得低八位通常配合移位操作符>>使用例如:java socket通信中基于长度的成帧方法中,如果发送的信息长度小于65535字节,长度信息的字节定义为两个字节长度。这时候将两个字节长的长度信息,以Big-Endian的原创 2020-10-23 11:37:29 · 24531 阅读 · 1 评论 -
剑指offer:重建二叉树(JAVA实现最新版)
题目描述输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。代码实现及解题思路/** * Definition for binary tree * public class TreeNode { * int val; * TreeNode left; * TreeNode rig原创 2020-10-19 14:41:00 · 114 阅读 · 0 评论 -
剑指offer:二维数组的查找(JAVA实现最新版)
题目描述在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。代码实现及解题思路public class Solution { public boolean Find(int target,int array[][]){ int row = array.length; int col = array[0].leng原创 2020-10-19 14:20:31 · 91 阅读 · 1 评论 -
剑指offer:链表中倒数第K个节点(JAVA实现最新版)
题目描述输入一个链表,输出该链表中倒数第k个结点。代码实现及解题思路public class Solution { public ListNode FindKthToTail(ListNode head,int k) { ListNode pre=null,p=null; //两个指针都指向头结点 p=head; pre=head; //记录k值 int a=k; //记录节原创 2020-10-19 14:03:24 · 113 阅读 · 0 评论 -
java nio buffer中文乱码问题
public static void main(String[] args) throws IOException { String charsetName = "GBK"; String fileName = "data.txt"; bufferToTxt(charsetName, fileName); txtToBuffer(charsetName, fileName); } public static void txt.原创 2020-10-13 16:22:51 · 428 阅读 · 0 评论 -
拼多多笔试题(六):选靓号
问题描述:A 国的手机号码由且仅由 N 位十进制数字(0-9)组成。一个手机号码中有至少 K 位数字相同则被定义为靓号。A 国的手机号可以有前导零,比如 000123456 是一个合法的手机号。小多想花钱将自己的手机号码修改为一个靓号。修改号码中的一个数字需要花费的金额为新数字与旧数字之间的差值。比如将 1 修改为 6 或 6 修改为 1 都需要花 5 块钱。给出小多现在的手机号码,问将其修改成一个靓号,最少需要多少钱?输入描述:第一行包含2个整数 N、K,分别表示手机号码数字个数以及靓原创 2020-09-28 15:21:00 · 927 阅读 · 0 评论 -
拼多多笔试题(五):二维表第k大数
问题描述:在一块长为n,宽为m的场地上,有n✖️m个1✖️1的单元格。每个单元格上的数字就是按照从1到n和1到m中的数的乘积。具体如下n = 3, m = 31 2 32 4 63 6 9给出一个查询的值k,求出按照这个方式列举的的数中第k大的值v。例如上面的例子里,从大到小为(9, 6, 6, 4, 3, 3, 2, 2, 1)k = 1, v = 9k = 2, v = 6k = 3, v = 6...k = 8, v = 2...原创 2020-09-27 10:45:55 · 790 阅读 · 0 评论 -
拼多多笔试题(四):骰子期望
问题描述:扔n个骰子,第i个骰子有可能投掷出Xi种等概率的不同的结果,数字从1到Xi。所有骰子的结果的最大值将作为最终结果。求最终结果的期望。输入描述:第一行一个整数n,表示有n个骰子。(1 <= n <= 50)第二行n个整数,表示每个骰子的结果数Xi。(2 <= Xi <= 50)输出描述:输出最终结果的期望,保留两位小数。输入例子:22 2输出例子:1.75思路分析:分析:这道题本身是蛮简单的,但比较难理解的是题意,主原创 2020-09-25 14:15:23 · 1352 阅读 · 0 评论 -
拼多多笔试题(三):多多的电子字典
问题描述:多多鸡打算造一本自己的电子字典,里面的所有单词都只由a和b组成。每个单词的组成里a的数量不能超过N个且b的数量不能超过M个。多多鸡的幸运数字是K,它打算把所有满足条件的单词里的字典序第K小的单词找出来,作为字典的封面。输入描述:共一行,三个整数N, M, K。(0 < N, M < 50, 0 < K < 1,000,000,000,000,000)输出描述:共一行,为字典序第K小的单词。输入例子:2 1 4输出例子:ab原创 2020-09-25 11:00:59 · 863 阅读 · 1 评论 -
拼多多笔试题(二):多多的排列函数
问题描述:数列 {An}为N的一种排列。例如N=3,可能的排列共6种:1, 2, 31, 3, 22, 1, 32, 3, 13, 1, 23, 2, 1定义函数F(X):其中|X|表示X的绝对值。现在多多鸡想知道,在所有可能的数列 {An} 中,F(N)的最小值和最大值分别是多少。输入描述:第一行输入1个整数T,表示测试用例的组数。( 1 <= T <= 10 )第二行开始,共T行,每行包含1个整数N,表示数列 {An} 的元素个.原创 2020-09-24 12:05:02 · 546 阅读 · 0 评论 -
拼多多笔试题(一):多多的魔术盒子
问题描述:多多鸡有N个魔术盒子(编号1~N),其中编号为i的盒子里有i个球。多多鸡让皮皮虾每次选择一个数字X(1 <= X <= N),多多鸡就会把球数量大于等于X个的盒子里的球减少X个。通过观察,皮皮虾已经掌握了其中的奥秘,并且发现只要通过一定的操作顺序,可以用最少的次数将所有盒子里的球变没。那么请问聪明的你,是否已经知道了应该如何操作呢?输入描述:第一行,有1个整数T,表示测试用例的组数。(1 <= T <= 100)接下来T行,每行1个整数N,表示有.原创 2020-09-24 11:15:25 · 2139 阅读 · 0 评论 -
List、Set、Map的区别
List、Set、Map的区别 (图一)1.面试题:你说说collection里面有什么子类。(其实面试的时候听到这个问题的时候,你要知道,面试官是想考察List,Set)正如图一,list和...原创 2018-09-14 12:21:02 · 170 阅读 · 0 评论 -
深入理解java虚拟机 精华总结
一、运行时数据区域 31.1 程序计数器 31.2 Java虚拟机栈 31.3 本地方法栈 31.4 Java堆 31.5 方法区 31.6 运行时常量池 4二、 hotspot虚拟机对象 42.1 对象的创建 41. 检查 42. 分配内存 43. Init 42.2 对象的内存布局 42.3 对象的访问定位 41. 使用句柄访问 42...原创 2018-09-14 12:53:20 · 134 阅读 · 0 评论 -
电商网站的秒杀是如何实现的
秒杀与其他业务最大的区别在于:秒杀的瞬间,(1)系统的并发量会非常的大(2)并发量大的同时,网络的流量也会瞬间变大。 关于(2),最常用的办法就是做页面静态化,也就是常说的前后端分离,把静态页面直接缓存到用户的浏览器端,所需要的数据从服务端接口动态获取。这样会大大节省网络的流量,再加上CDN,一般不会有大问题。 关于(1),这里的核心问题就在于如何在大并发的情况下能保证DB能扛得住压力,因为大并发...原创 2018-09-25 13:10:05 · 1434 阅读 · 1 评论 -
Java String中的==和equals()
//测试类public Test{ public static void main(String[] args) { String str1 = new String("java"); String str2 = new String("java"); String str3 = "java"; String str4 =...原创 2018-09-15 13:21:12 · 418 阅读 · 0 评论 -
按之字形顺序打印二叉树(java版)
【题目描述】请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。【解题思路1】1.使用两个栈来分别存储奇数层节点和偶数层节点。2.注意两个栈的插入顺序是不同的。3.对于奇数层来说,也就是从左往右的顺序,先添加左子树,然后添加右子树。对于偶数层,刚好相反,先添加右子树,然后添加左子树。i...原创 2018-09-23 10:33:24 · 442 阅读 · 1 评论 -
java设计模式之建造者模式
概述:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。适用性: 1.当建造复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。 2.当构造过程必须允许被构造的对象有不同的表示时。参与者: 1. Builder: 为创建一个Product对象的各个部件指定抽象接口。 2. ConcreteBuilder:实现Builder的接口以构...原创 2018-04-16 20:42:44 · 173 阅读 · 0 评论 -
集合各实现类的底层实现原理
ArrayList实现原理要点概括参考文献: http://zhangshixi.iteye.com/blog/674856l https://www.cnblogs.com/leesf456/p/5308358.htmlArrayList是List接口的可变数组非同步实现,并允许包括null在内的所有元素。 底层使用数组实现 该集合是可变长度数组,数组扩容时,会将老数组中的元素重新拷...原创 2018-09-14 11:04:37 · 206 阅读 · 0 评论 -
最全的Spring面试题和答案
1、什么是Spring框架?Spring框架有哪些主要模块? Spring框架是一个为Java应用程序的开发提供了综合、广泛的基础性支持的Java平台。Spring帮助开发者解决了开发中基础性的问题,使得开发人员可以专注于应用程序的开发。Spring框架本身亦是按照设计模式精心打造,这使得我们可以在开发环境中安心的集成Spring框架,不必担心Spring是如何在后台进行工作的。...原创 2018-09-07 16:11:53 · 2473 阅读 · 0 评论 -
用一个栈实现另一个栈的排序
问题描述 一个栈中元素的类型为整型,现在想将该栈从顶到底按从大到小的顺序排序,只许申请一个栈。除此之外,可以申请新的变量,但不能申请额外的数据结构。 解答 将要排序的栈记为stack,申请的辅助栈记为help,在stack上执行pop操作,弹出的元素记为cur。 如果cur小于或者等于help的栈顶元素,则将cur直接压入help; 如果cur大于help的栈顶元素,则将h...原创 2018-04-23 16:50:02 · 278 阅读 · 0 评论 -
如何仅用递归函数和栈操作逆序一个栈(JAVA)
问题描述: 一个栈依次压入1、2、3、4、5,即从栈顶到栈底分别为5、4、3、2、1。将这个栈转置之后,从栈顶到栈底为1、2、3、4、5,也就是完成栈的逆序。只能用递归函数来实现,不能使用其他的数据结构。解答:递归函数一:将栈stack的栈底元素返回并移除。代码如下:public static int getAndRemoveLastElement(Stack<Integer&...原创 2018-04-23 11:18:28 · 599 阅读 · 0 评论 -
Java表达式转型规则
当使用 +、-、*、/、%、运算操作是,遵循如下规则:只要两个操作数中有一个是double类型的,另一个将会被转换成double类型,并且结果也是double类型,如果两个操作数中有一个是float类型的,另一个将会被转换为float类型,并且结果也是float类型,如果两个操作数中有一个是long类型的,另一个将会被转换成long类型,并且结果也是long类型,否则(操作数为:byte、shor...原创 2018-04-04 20:03:19 · 273 阅读 · 0 评论 -
JAVA中类加载时候的初始化问题
类加载时候的初始化,在执行这个类的 main方法时,会导致类进行加载,而类加载的属性如下:1、虚拟机在首次加载Java类时,会对静态初始化块、静态成员变量、静态方法进行一次初始化。我们不要去纠结这里的顺序,一般来说我们只需要知道,静态方法一般在最后。 2、只有在调用new方法时才会创建类的实例 3、类实例创建过程:按照父子继承关系进行初始化,首先执行父类的初始化块部分,然后是父类的构造方法;再执行...原创 2018-04-04 17:35:39 · 938 阅读 · 0 评论 -
JAVA并发编程总结
进程与线程几乎所有的操作系统都支持同时运行多个任务,一个任务通常就是一个程序,每个运行中的程序就是一个进程。当一个程序运行时,内部可能包含了多个顺序执行流,每个顺序执行流就是一个线程。 几乎所有操作系统都支持进程的概念,所有运行中的任务通常对应一条进程(Process)。当一个程序进入内存运行,即变成一个进程。进程是处于运行过程中的程序,并且具有一定独立功能,进程是系统进行资源分配和调度的一个独立...原创 2018-04-17 15:24:14 · 231 阅读 · 1 评论 -
Java设计模式---工厂方法模式(Factory-Method)
概述:定义一个用于创建对象的接口,让子类决定实例化哪一个类。FactoryMethod使一个类的实例化延迟到其子类。适用性: 1.当一个类不知道它所必须创建的对象的类的时候。 2.当一个类希望由它的子类来指定它所创建的对象的时候。 3.当类将创建对象的职责委托给多个帮助子类的某一个,并且你希望将哪一个帮助子类使代理者这一信息局部化的时候。参与者: 1.Product:定义工...原创 2018-04-16 13:02:58 · 200 阅读 · 0 评论 -
Java单例模式以及实现
一. 什么是单例模式因程序需要,有时我们只需要某个类同时保留一个对象,不希望有更多对象,此时,我们则应考虑单例模式的设计。二. 单例模式的特点1. 单例模式只能有一个实例。2. 单例类必须创建自己的唯一实例。3. 单例类必须向其他对象提供这一实例。三. 单例模式VS静态类在知道了什么是单例模式后,我想你一定会想到静态类,“既然只使用一个对象,为何不干脆使用静态类?”,这里我会将单例模式和静态类进行...原创 2018-04-15 22:38:12 · 363 阅读 · 0 评论 -
JAVA内部类
为什么使用内部类?使用内部类最吸引人的原因是:每个内部类都能独立地继承一个(接口的)实现,所以无论外围类是否已经继承了某个(接口的)实现,对于内部类都没有影响1.1.使用内部类最大的优点就在于它能够非常好的解决多重继承的问题,使用内部类还能够为我们带来如下特性:(1)、内部类可以用多个实例,每个实例都有自己的状态信息,并且与其他外围对象的信息相互独。(2)、在单个外围类中,可以让多个内部类以不同的...原创 2018-04-10 14:18:31 · 129 阅读 · 0 评论 -
JAVA中抽象类和接口总结
区别1:抽象类体现继承关系,一个类只能単继承。接口体现实现关系,一个类可以多实现。区别2:抽象类中可以定义非抽象方法和抽象方法,子类继承后可以直接使用非抽象方法。接口的方法都 是抽象的,必须由子类去实现。接口中的成员都有固定的修饰符。区别3:抽象类有构造方法,用于给子类对象初始化。而接口没有构造方法。特点1:抽象类不可以实例化,即不能用new创建对象。抽象类必须由其子类覆盖了...原创 2018-03-24 21:22:15 · 240 阅读 · 1 评论 -
Hashtable和HashMap详解与区别
1. 关于HashMap的一些说法:a) HashMap实际上是一个“链表散列”的数据结构,即数组和链表的结合体。HashMap的底层结构是一个数组,数组中的每一项是一条链表。b) HashMap的实例有俩个参数影响其性能: “初始容量” 和 装填因子。c) HashMap实现不同步,线程不安全。 HashTable线程安全d) HashMap中的key-value都是存储在Entry...原创 2018-03-24 21:20:29 · 131 阅读 · 0 评论 -
生成窗口最大值数组
有一个整型数组arr和一个大小为w的窗口从数组的最左边滑到最右边,窗口每次向右边滑一个位置。例如,数组为【4,3,5,4,3,3,6,7】,窗口大小为3时: 窗口数组 最大值 [4 3 5] 4 3 3 6 7 5 4 [3 5 4] 3 3 6 7 5 ...原创 2018-04-23 21:21:11 · 781 阅读 · 3 评论