- 博客(288)
- 问答 (12)
- 收藏
- 关注
原创 用stream筛选出员工集合中年龄大于25的员工并根据年龄降序排序?
【代码】用stream筛选出员工集合中年龄大于25的员工并根据年龄降序排序?
2023-04-11 23:41:17 349 1
原创 lombok
lombok是一个在Java开发过程中用注解的方式,简化了 JavaBean 的编写,避免了冗余和样板式代码而出现的插件,让编写的类更加简洁。安装1、先在idea中安装Lombok插件(以下截图是在idea2022安装)File —> Settings —> Plugins —> Browse repositories —> 搜索lombok2、在项目pom.xml中添加相关依赖。
2022-12-21 17:04:24 505
原创 RocketMQ如何保证高可用?
消费者获取到消息之后,可以等到整个业务处理完成,再进行CONSUME_SUCCESS状态确认,如果业务处理过程中发生了异常那么就会触发broker的重试机制。当消息发送失败了,在消息重试的时候,会尽量规避上一次发送的 Broker,选择还没推送过该消息的Broker,以增大消息发送的成功率。避免用单节点或者简单的一主一从架构,可以采取多主从的架构,并且主从之间采用同步复制的方式进行数据双写。RocketMQ默认的异步刷盘,可以改成同步刷盘SYNC_FLUSH。3、生产消息的高可用。4、消费消息的高可用。
2022-12-11 11:34:48 1132
原创 git常用命令
git clone -b 远程分支名 仓库地址。拉取远程仓库新项目到本地(本地不用建文件夹)找到仓库目录下隐藏的 .git。2、新项目在本地和远程的操作。1、gitlab上的操作。
2022-10-24 20:07:20 137
原创 RocketMQ如何保证消费消息的幂等性?
首先mq都有回馈机制。首先得为每条消息加上一个全局唯一id。2、使用redis里面提供的setNX指令,比如对于MQ消费的场景,为了避免MQ重复消费导致数据多次被修改的问题,可以在接受到MQ的消息时,把这个消息通过setNx写入到redis里面,一旦这个消息被消费过,就不会再次消费。1、使用数据库的唯一约束实现幂等,比如对于数据插入类的场景,比如创建订单,因为订单号肯定是唯一的,所以如果是多次调用就会触发数据库的唯一约束异常,从而避免一个请求创建多个订单的问题。二、造成重复消费的原因。
2022-09-23 10:14:36 2854
原创 说说索引的创建建议?
1、在用于where判断order排序和join的(on)、group by的字段上创建索引。6、频繁更新的值,不要作为主键或者索引,因为B+树的平衡会导致页分裂 ,影响效率。5、区分度低的字段,例如性别,不要建索引,因为离散度太低,导致扫描行数过多。7、随机无序的值,不建议作为索引,例如身份证、UUID,因为无序会到页分裂。2、索引的个数不要过多,因为会浪费空间,更新变慢。8、组合索引把散列性高(区分度高)的值放在前面。9、创建复合索引,而不是修改单列索引。3、过长的字段,建立前缀索引。
2022-09-21 16:41:30 411
原创 说说mysql索引什么情况下会失效?
4、如果列类型是字符串,那在查询条件中需要将数据用引号引用起来,否则不走索引。2、查询条件中带有or,除非所有的查询条件都建有索引,否则索引失效。5、联合索引,查询时的条件列不是联合索引中的第一个列,索引失效。10、如果mysql估计全表扫描要比使用索引要快,会不使用索引。6、使用not in ,not exist不会走索引。9、在索引列上使用内置函数,索引失效。8、索引列上参与计算会导致索引失效。7、使用 ,>,
2022-09-21 16:19:23 2189
原创 为什么要使用mq?
如果某个系统不需要这条数据了,就取消对 MQ 消息的消费即可。这样下来,A 系统压根儿不需要去考虑要给谁发送数据,不需要维护这个代码,也不需要考虑人家是否调用成功、失败超时等情况。如果使用 MQ,那么 A 系统连续发送 3 条消息到 MQ 队列中,假如耗时 5ms,A 系统从接受一个请求到返回响应给用户,总时长是 3 + 5 = 8ms。MQ,A 系统产生一条数据,发送到 MQ 里面去,哪个系统需要数据自己去 MQ 里面消费。合,A 系统产生一条比较关键的数据,很多系统都需要 A 系统将这个数据发送过来。.
2022-08-29 09:32:00 125
原创 要求查询每个部门的工资收入排前三的雇员和部门名称
insert into emptest values(1,'王嘻嘻3',115000);insert into emptest values(1,'王嘻嘻1',15000);insert into emptest values(1,'王嘻嘻4',12300);insert into emptest values(1,'王嘻嘻2',1500);insert into emptest values(2,'王么么',11300);
2022-08-29 08:54:49 161
原创 说说oracle分页查询怎么实现的?
但是我们不能取到中间几行,因为rownum不支持大于号,只支持小于号或者等于号,如果想实现我们的需求怎么办呢?答案是使用子查询,也正是oracle分页的做法。ROWNUM:表示行号,实际上是一个列,但是这个列是一个伪列,此列可以在每张表中出现。我们可以根据rownum来取结果集的前几行,比如前5行。查询emp表带有rownum列。...
2022-08-28 14:45:18 210
原创 说说truncate和delete的区别?
1. delete删除的数据可以rollback,truncate删除的数据不可以rollback。2. delete删除可能产生碎片并且不释放空间,truncate删除没有碎片并且会释放空间。3. delete删除的是表中的数据,truncate是先摧毁表结构,再重构表结构。...
2022-08-28 14:25:34 302
原创 手写jdbc的使用步骤?
System.out.println("请输入用户名");//输入'u'or'1=1'System.out.println("请输入密码");//输入'p'or'1=1'//能够防止sql注入。statementMethod();//有sql注入风险。//6、处理结果集(查询才需要处理结果集)//5、处理结果集(查询才需要处理结果集)//4、sql语句占位符设置实际参数。//3、获取Statement对象。//3、获取预处理对象。//5、执行sql语句。...
2022-07-22 17:28:05 631
原创 说说对hashcode和equals方法的理解?
当向哈希表中存放元素时,会先调用对象的hashCode方法,算出对象在哈希表中的存放位置,如果该位置没有元素则直接存入,如果该位置有元素则说明存在哈希冲突,这时会调用对象的equals方法,比较这两个对象是不是同一个对象,如果equals方法返回的是true,那么就不会把第二个对象存放到哈希表,如果返回的是false,就会存入。equals它的作用是判断两个对象是否相等,如果对象重写了equals()方法,比较两个对象的内容是否相等;这个哈希码的作用是确定该对象在哈希表中的索引位置。............
2022-07-22 11:55:45 215
原创 说说常见的异常有哪些?
java.util.concurrent.TimeoutException执行超时异常。java.util.zip.DataFormatException数据格式化异常。java.lang.ClassNotFoundException类找不到的异常。java.lang.NumberFormatException数字格式异常。java.lang.ClassCastException类型转换异常。java.lang.ArithmeticException算数异常。...
2022-07-21 11:10:11 170
原创 Interrupt
一、非阻塞状态下的线程中断当其他线程通过调用当前线程的interrupt方法,表示向当前线程打个招呼,告诉他可以中断线程的执行了,至于什么时候中断,取决于当前线程自己。线程通过检查自身是否被中断来进行响应,可以通过isInterrupted()来判断是否被中断。import java.util.concurrent.TimeUnit;public class InterruptDemo { private static int i; public static void main(S
2022-04-27 15:30:13 339
原创 ReentrantLock实现原理分析
一、锁设计猜想1.1 设计目的满足线程的互斥特性意味着同一个时刻,只允许一个线程进入到加锁的代码中。多线程环境下,线程的顺序访问。1.2 设计过程猜想一定会涉及到锁的抢占,需要有一个标记来实现互斥。 全局变量(0,1)。抢占到了锁,怎么处理(不需要处理)。没抢占到锁,怎么处理a、需要等待(让处于排队中的线程,如果没有抢占到锁,则直接先阻塞->释放CPU资源)。wait/notify(线程通信的机制,无法指定唤醒某个线程)LockSupport.park/unpark(阻塞一个指定的
2022-04-25 11:30:29 438
原创 说说Interrupt的作用?
1、唤醒处于等待状态的线程2、修改中断的标记false=true我们平时在线程中使用的sleep、wait、join等操作,它都会抛出一个InterruptedException异常,为什么会抛出异常,是因为它在阻塞期间,必须要能够响应被其他线程发起的中断请求,而这个响应是通过InterruptedException来体现的。但是这里需要注意的是,在这个异常中如果不做任何处理的话,我们是无法去中断线程的,因为当前的异常只是响应了外部对于这个线程的中断命令,同时,线程的中断状态也会复位,如果需要中断,
2022-02-22 16:17:13 1047
原创 jvm g1题目整理
G1中有年轻代指向老年代的引用问题么?G1中初始标记会标记GC Roots能够关联的对象,并且修改TAMS的值,TAMS是什么?说说什么是临界区行为?说说对G1中TLAB的理解?说说对G1中RemerberSet的理解?G1为什么采用Point In方式记录引用、CMS为什么采用Point Out方式记录引用?说说多线程对同一个卡表项写入操作写入乱序的问题(cpu的指令乱序)?说说对写屏障的理解?说说对G1中的伪共享问题的理解以及要怎么处理?说说对三色标记算法的理解?说说为什么cms更关
2022-01-13 15:17:09 138
原创 说说StringBuffer和StringBuilder的底层原理?
首选String是常量,因此对String进行字符串追加操作是会不断创建新的字符串,这样效率非常低,而StringBuffer和StringBuilder底层维护的是字符数组,会将追加的字符串设置进字符数组,等到快要达到数组长度了才会进行数组复制扩容,相对于String追加字符串每次都要新建字符串来说会快很多。...
2021-12-03 17:24:32 485
原创 说说Thread类的sleep方法和wait方法的区别
1、调用sleep方法会释放cpu使用权,但是不会释放锁对象,达到设定时间线程会重新争夺cpu使用权。2、调用wait方法会释放cpu使用权,同时也会释放锁对象,需要被notify或者设置的超时已过就会重新获取锁对象以及重新争夺cpu使用权。...
2021-12-03 16:14:42 662
原创 说说对等待唤醒机制的理解?
1、概念多线程同时作用在同一个资源的不同任务上,并且多个任务之间是存在相互依赖关系,A任务没有执行完成B任务就不能执行,B任务没有执行完成A任务就不能执行,这个时候就需要用到线程之间的通信等待唤醒机制,线程1将A任务完成了就通知线程2执行B任务自己进入等待状态,反过来也是如此。2、前提条件多线程必须作用在同一对象的不同同步方法上。3、操作方法wait:释放锁对象,释放cpu使用权。notify:唤醒被wait的线程,一次只唤醒一个而且是任意的。注意:调用wait和notify的锁
2021-12-03 16:02:37 109
原创 说说对注解和元注解的理解?
1、注解和javadoc不同,可以通过反射获取注解内容,编译器生成类文件时注解内容也会一并生成到字节码中。2、元注解是作用在注解上的注解。
2021-12-03 14:33:22 416
原创 说说异常和错误的区别?
1、继承体系Exception和Error都继承自Throwable2、严重程度Error比Exception往往要严重很多,Exception即使发生了没作任何处理对整个程序的影响也往往是局部性的导致局部的功能走不通,而Error发生了如果不做处理对程序的影响往往是全局的比如OutOfMemoryError没有及时处理很有可能整个程序的功能都会受到影响。3、处理方式Exception可以捕获处理或者声明或者抛出让调用者处理,Error则需要通过修改代码或者对jvm进行调优来处理。..
2021-12-03 12:00:44 152
原创 说说进程与线程的关系
1、应用程序进入内存至少会开一个进程,而进程的最小执行单元就是线程。2、多个进程之间的资源是相互独立的,同一个进程里面的多个线程是共享该进程的资源。3、对于多核cpu多个进程是可以实现并行的,一个进程里面的多线程只能实现并发。...
2021-12-03 10:01:13 122
原创 说说序列化和持久化的区别
在计算机中存储数据和网络传输数据都是用二进制进行的,类实现序列化接口就是让该类的对象具备转换为二进制数据的能力,持久化是将对象数据存储到磁盘或者数据库,因此可以说类实现序列化是该类的对象进行持久化的前提,如果类不实现序列化接口,则该类的对象不能进行网络传输不能进行持久化。......
2021-12-02 18:05:32 739
原创 说说缓冲流的原理
对大文件进行读写操作,缓冲流比普通流效率高很多,是由于缓冲流会在内存中会开辟缓冲区,算是用空间换时间。比如BufferedInputStream的读操作,如果输入缓冲区没有数据,BufferedInputStream会一次性读取默认缓冲区大小的数据比如读取默认大小8192个字节存放在输入缓冲区,然后用FileInputStream进行读操作,同样BufferedOutputStream的写操作,首选是通过FileOutputStream将字节写入到输出缓冲区,然后等达到缓冲区默认大小时再一次性将缓冲区默认大
2021-12-02 17:11:53 439
原创 利用转换流将GBK格式文件以UTF-8输出
代码示例:package cn.zxj.temp;import java.io.*;public class Test { public static void main(String[] args) throws Exception{ //先造GBK编码的文件(windows下用记事本打开右下角显示ANSI,GBK是ANSI的子集) doGBK(); //转UTF-8写出(windows下用记事本打开显示两个文件比较右下角字符集) ...
2021-12-02 15:40:36 447
原创 说说转换流的作用
1、InputStreamReader(字符输入转换流)可以从字节输入流中读取字节,然后用指定编码集将字节解码成字符。2、字符输出转换流(OutputStreamWriter)先将字符写到自己的缓冲区,然后用指定编码集将字符编码成字节,再调用flush或者close或者缓冲区满了使用字节流将这些字节写入到指定的文件。3、与FileWriter和FileReader的区别FileWriter是OutputStreamWriter的子类,FileReader是InputStreamReade
2021-12-02 14:50:54 741
原创 说说字节流和字符流的区别
1、输入流区别字节输入流读取的是字节,字符输入流读取的是字节经过码表转换后的字符。2、输出流区别字节输出流输出的是字节,字符输出流直接输出的是字符,但是字符会经过码表转换为字节存储。...
2021-12-01 17:44:07 2813
原创 写一个contains 方法供集合判断元素唯一性?
package cn.zxj.com;import java.util.Iterator;import java.util.List;import java.util.Map;import java.util.Set;import java.util.concurrent.ConcurrentHashMap;public class Uniqueness { public void contains(List<String> list) { Concu...
2021-12-01 17:03:45 232
原创 第20个月繁殖多少对兔子?(利用BigInteger完成)
故事得从西元1202年说起,话说有一位意大利青年,名叫斐波那契。 在他的一部著作中提出了一个有趣的问题:假设一对刚出生的小兔一个月后就能长成大兔, 再过一个月就能生下一对小兔,并且此后每个月都生一对小兔,一年内没有发生死亡, 问:第20个月繁殖多少对兔子?代码示例:package cn.zxj.com;import java.math.BigInteger;class Test { public static void main(String[] args)...
2021-12-01 15:19:39 248
原创 说说java日期处理常见的坑?
1、Calendar获取的月份是0-11,实际月份处理需要加1。2、日期格式yyyy-MM-dd hh:mm:ss 大小写含义差别导致的问题。踩坑点年份大写YYYY:当天所在的周属于的年份,一周从周日开始,周六结束,只要本周跨年,那么这周就算入下一年。月份小写mm:小写mm是表示时间的分钟,如果月份位置写的小写mm则会设置到分钟位置,月份位置默认设置成1月。天大写DD:DD表示一年中的多少天。小时大小写: jdk8中测试小时hh和HH没有区别。分钟大写MM:大写MM表示月份,如果
2021-12-01 14:34:33 424
原创 说说以下代码的运行结果,并解释下原因?
package zxj.com.cn;public class Demo {public static void main(String[] args) {String strA = "abc";String strB = new String("abc");System.out.println("strA == strB ? " + (strA == strB ? true : false)); ...
2021-12-01 10:22:49 527
原创 关于String类的练习题,分析运行结果?
package cn.zxj.com;class Test { public static void main(String[] args) { //demo1(); //demo2(); //demo3(); //demo4(); demo5(); } private static void demo5() { String s1 = "ab"; String s2...
2021-12-01 10:10:49 357
原创 说说equals和==的区别?
1、==可以用来比较基本数据类型的数值,而基本数据类型是不能调用方法的是不能使用equals方法来做比较的。2、对于引用数据类型,==是比较变量引用的对象内存地址是否相同,==比较引用数据类型要求两边的操作数类型必须相同或者有子父类关系,Object中的equals方法用的是==因此也是比较变量引用的对象内存地址是否相同,如果是重写过的equals方法要看具体的实现,比如String重写后的equals方法是比较字符串的值是否相同。......
2021-11-30 15:05:36 107
原创 局部内部类访问局部变量,该局部变量必须用哪个关键字修饰,为什么?
该局部变量必须用final关键字修饰。局部变量如果没有被final修饰的话是会做为普通的局部变量存入到java虚拟机栈,随着方法的压栈而创建弹栈而销毁,方法执行完被销毁后局部内部类对象并不会马上被回收可能还在内存中,这个时候局部变量没有了,如果后面有执行到局部类里对于局部变量的引用部分就会出现异常,因此将局部变量用final关键字修饰然后存放在方法区的常量池中能比对象存活的更久就能避免这样的异常。...
2021-11-30 11:51:19 389
原创 说说static关键字的特点和使用场景?
一、特点1、static关键字修饰的成员被该类所有的对象共享。比如static修饰的成员变量属性值被其中一个对象修改了,那么其它对象访问到的属性值也会跟着改变。2、static关键修饰的成员可以用类名.变量名或者类名.方法名(参数)直接访问。二、使用场景1、当类的成员变量是共性数据,需要被该类的所有对象所共享时,需要使用static关键字来修饰该成员变量。比如银行卡账户余额,无论是直接刷银行卡还是通过电子支付创建交易都需要对银行卡账户余额进行减扣,因此在一个交易类中是可以用static修饰账
2021-11-30 10:44:16 1734
空空如也
springboot1.5.22下内置tomcat8.5.43配置jndi报错
2021-03-18
请教hive 查询sql里的多行注释怎么写
2017-11-22
hive sql语句中min后的[]的作用
2017-10-13
集合元素属性求最大值
2017-10-12
kettle作业中的运行结果怎样输出
2017-08-08
kettle作业中调用转换步骤
2017-08-08
hadoop大数据开发ETL清洗日志
2017-06-06
用户画像精准度验证方法
2017-06-02
用R语言绘制三维立体图
2017-06-02
mysql5.7.17声明光标报错
2017-05-15
用java代码判断相邻元素是否重复
2017-05-12
mysql两张表反复查询条件限制
2017-05-12
TA创建的收藏夹 TA关注的收藏夹
TA关注的人