- 博客(206)
- 资源 (3)
- 收藏
- 关注
原创 25届秋/春招最新面经答案总结(Java基础、数据库、JVM、计网、计操、集合、多线程、Spring)持续更新
一、引言(秉持开源的想法) 经过残酷的春招实习面试,自己从中也从牛客和各个大神那些收集了很多面经,我再次深感谢谢(尤其是JavaGuide),秉持开源的想法。 话不多说直接上干货,有没有用自己点进去看就知道了,如果你看了我总结的面经后,得到满意的OFFER记得过来留言哦!毕竟不做白嫖党二、目录1.计算机网络 链接:面试必掌握之计算机网络_万小猿的博客-CSDN博客2.Java基础 链接:Ja...
2021-04-23 23:30:24 28696 12
原创 快速突破面试算法(内含从简到难的高频题型目录及每题的详解,已经归类整理好并外带博主的免费答疑)
前言:初衷(共同进步) 由于随着计算机的工资日益升高,越来越多的人都踏入了计算机行业(博主也是一枚机械人)。当初我也很迷茫,听着师兄们说刷题,刷题,刷题!想要高工资,没有一点算法功底,我们就真的是8K~15K中的8K了,更甚者:因为一个排序没有写出来,直接面试刷掉了。可想刷题的重要了!!但是这些都是有套路,有方法的,不能乱来。 我收集了挺多资料,然后就开始刷题,先是刷剑指OFFER,刷了80%后,发现容易忘啊!然后感觉方法有些错了。然后我各种找资料,看文献:如何提升自己的算法能力。发现了对于任何..
2021-01-13 12:04:42 7285 2
原创 Tomcat找不到Controller里面的路径
一、问题:Tomcat正常的页面可以弄出来,但是Controller的路径始终找不到。二、解决办法:因为我这边Web有两个项目,我换成我需要的就可以访问成功了。
2021-12-13 21:35:24 1326
原创 泛型的意义与通配符理解
一、泛型的含义泛型是JDK1.5出现的一种新特性,主要用来解决对象类型不确定的问题。其中泛型可以用在类、接口、方法中,分别称为泛型类、泛型接口、泛型方法。1.泛型类(具有一个或者多个泛型变量的类)2.泛型接口(具有一个或者多个泛型变量的接口)3.泛型方法(具有一个或者多个泛型变量的方法)核心目标:解决容器类型在编译时安全检查的问题比如这个我们规定了要传入String,但是代码中只是传入了int,所以会报错,直接在编译期间报错。只是在编译...
2021-11-13 13:51:11 1206
原创 引入log4j日志包为何会自动导入额外两个包(门面模式)
一、问题由来引入如下log4j的包,会出现这三个依赖第一个是log4j的底层包,但第二个第三个slf4j是什么呢?为何导入log4j会额外导入了两个包呢?二、导入额外包的原因项目中不同的jar包里面很有可能即用到了log4j,又用到了logback日志。这样的话项目就要支持与维护多个日志框架了,很麻烦。 所以怎么同时支持多个日志框架呢?那就是门面模式三、门面模式必须都通过一个入口访问。不同的模块有自己的功能举一个例子,比如装修房子,我们自己去找和泥工,搬砖工,..
2021-11-12 23:39:22 944
原创 Idea修改项目的包名
一、目的将Impl修改为impl二、步骤直接点击refactor,会出现这个问题他说已经被修改为impl,但是还是没有修改,所以我就想到直接外部重命名还有其他类可能引用的这个包因此,用 Shift+ctrl+F3,把之前的Impl替换implOK!...
2021-11-12 15:00:37 1181
原创 实现一个定时任务管理器
一、定时任务管理器 我们把我们的任务A,B,C分别延时多久后执行。因为我这个定时任务管理器,肯定不会干扰我们主线程,自己开一个线程去执行。 这个线程的功能就是,先到时间的先执行。因此我们在进行放入任务的时候,就要把过期时间排好序。我这边采用的优先队列进行按照过期时间升序排列。二、代码TimerTask:每个定时任务类@Data@AllArgsConstructorpublic class TimerTask { private int taskId; //时..
2021-09-19 22:54:01 674
原创 Map先排序value小->大再排序key小->大,ArrayList与Stream分别实现
一、题目 对这个map进行排序,要求是先排序value小->大再排序key小->大(在value相等的情况)结果:二、解法1.比较传统的解法:ArrayList其中有任何不懂的请到QQ群来问我,免费解答~~ QQ群在我收藏了最多的博文里的 public static void main(String[] args) { Map<String, Integer> map = new HashMap<String,...
2021-09-02 21:25:18 615
原创 写单例模式以及防止反射破坏
一、为何要单例?优点:1.单例模式保证java应用程序中,一个类Class只有一个实例在,使用单例模式好处在于可以节省内存,节约资源,对于一般频繁创建和销毁对象的可以使用单例模式。因为它限制了实例的个数,有利于java垃圾回收。好的单例模式也能提高性能。例如:数据库连接池、httpclient连接单例缺点:1.单例的缺点不适用于变化的对象,如果同一类型的对象总是要在不同的用例场景发生变化,单例就会引起数据的错误,不能保存彼此的状态。2.单例模式的构造函数是静态的,不能被子类继承。.
2021-09-01 20:21:45 1066
原创 对海量数据进行排序
一、问题描述 对于很多数据,我们内存是放不下的,因此我们不能按照以往的那种直接用快排或者调用.sort函数就解决了。大概的方法有这些。二、解决方法1.位图法先申请一个二进制数组,其大小为有可能出现的最大的整数值,如500万,如图所示。假设5个整数组成的序列{2,3,200,7000,12000},则我们可以将这个序列保存在二进制数组当中,第n位如果为1,则表示n存在于这个序列中:然后在根据这个二进制数组转化为整数,依次从小到大排序更新到外部文件。代码:...
2021-08-30 15:20:23 2168
原创 5条线程轮流打印1~100
一、问题解析 既然是轮流打印,说明每个线程只能做自己的事情,只有满足了自己打印的要求才去打印,所以自然我们就会想到取模,根据取模的结果去触发打印机制。二、代码class PrintNumber extends Thread { private static volatile int cnt = 0; private int id; // 线程编号 public PrintNumber(int id) { this.id = id; }..
2021-08-30 14:02:02 510
原创 生产者消费者模型(自己上锁与阻塞队列两版本)
一、什么是生产者消费者模型 生产者与消费者模式就是一个多线程并发协作的模式,在这个模式中呢,一部分线程被用于去生产数据,另一部分线程去处理数据,于是便有了形象的生产者与消费者了。而为了更好的优化生产者与消费者的关系,便设立一个缓冲区,也就相当于一个数据仓库,当生产者生产数据时锁住仓库,不让消费者访问,当消费者消费时锁住仓库,不让生产者访问仓库。举一个简单的例子,有一个生产者生产包子,他将生产好的包子放到筐中,放完包子由消费者从筐中拿出包子使用。当然筐还有一个作用就是当筐中没有包子时便锁住筐,不让消..
2021-08-28 22:22:55 375
原创 多个文件进行合并取前10个数(多线程方式)
一、问题 现在有20个文件,他们存着数字,每个文件的大小都是大于系统内存的。要求用线程池,用5个线程去进行处理。将20个文件的数字排名前10取出来二、思路 1.想想用什么数据结构存储这个前10的数,这边采用优先队列的阻塞队列 2.每个线程去取数据的时候,比如取了A,分两种情况:1.如果阻塞队列长度小于10,直接压入;2.如果大于10,一直移除,直到队列长度为10;3.队列长度等于10,那么我A就和阻塞队列的最小值比较,如果大于那么就移除最小值,然后压入A。 3.线程跑完后,...
2021-08-18 14:38:52 259
原创 多线程打印ABCD顺序(带有线程池实现)
一、问题 4个线程去依次顺序打印出ABCD,为了保证打印出A后,需要打印B,那么我们肯定是A线程执行后,是定点唤醒B线程,所以自然就会用到CONDITION的await和signal二、代码public class CirPrinterTest implements Runnable { //成员变量 //打印次数;打印条件;触发下一个指定线程打印;打印的字符;定点唤醒的锁 int printCount; Condition thisCondition..
2021-08-17 22:01:09 739
原创 Scanner类(next,nextLine,nextInt)的用法与常见问题
一、常见的方法.next():1、一定要读取到有效字符后才可以结束输入。 2、对输入有效字符之前遇到的空白,next() 方法会自动将其去掉。 3、只有输入有效字符后才将其后面输入的空白作为分隔符或者结束符。 next() 不能得到带有空格的字符串。.nextInt():这个方法跟next()一直,只是规定了数据类型是Int。.nextLine():1、以Enter为结束符,也就是说 nextLine()方法返回的是输入回车之前的所有字符。 2、可以获得空白。二、常见的问
2021-08-14 23:26:21 3380
原创 简易版的等待/唤醒方法(sleep,wait,await,park区别)适合面试回答
1. Thread的Sleep()方法:必须要指定时间:;需要捕获异常;不会释放锁2. Object的wait()方法和notify()方法:必须配合sychronized关键字使用;notify()方法在wait()方法之后执行,否则会丢失唤醒信号;需要捕获异常;会释放锁3. Condition接口的await()与Signal()方法:必须配合lock.lock()方法使用:主要是可以定点唤醒。4.LockSupport的park()和unpark(thread)方法:不需要捕获异常;不会释
2021-08-13 11:14:48 326
原创 java代码执行效率分析
1.首先说出java代码执行的过程: (1).编写:是指在 Java 开发环境中进行程序代码的输入,最终形成后缀名为 .java 的 Java 源文件。(2).编译:是指使用 Java 编译器对源文件进行错误排査的过程,编译后将生成后缀名为 .class 的字节码文件,不像C语言那样生成可执行文件。(3).运行:是指使用 Java 解释器将字节码文件翻译成机器代码,执行并显示结果。2.说出执行效率的含义时间少,内存少,线程切换少等等。那些方式可以提高代码的效率:(1)代码结...
2021-08-11 15:34:13 1257
原创 安全清理大部分的C盘内存(一般10GB以上)
1.我电脑清理后腾出了80G的C盘空间,用了以下方法如果感觉有用请关注,点赞,收藏! 下次分享更有用的干货~1.先用清理软件(360,腾讯管家)用360清理发现,windows search日志占用了70多个G空间,先清除!该日志文件有撒用呢? 如果没有这个日志文件,我们在文件系统进行搜索的时候就会比较慢了,而且还会出现这样的字样。这个日志主要是用来存索引的, 删除了只会在下次搜索东西的时候比较慢!对其他没有任何影响!!!!2.禁用该日志文件1...
2021-08-03 19:44:00 4377
原创 联合索引(a,b,c),怎么单独检索b用上索引
1.问题引入 有下表,name,cid字段是联合索引CREATE TABLE `student` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) DEFAULT NULL, `cid` int(11) DEFAULT NULL, `did` int(11) DEFAULT NULL, PRIMARY KEY (`id`), KEY `name_cid_INX` (`name`,`cid`), K..
2021-07-29 15:34:51 1783
原创 统计每个url访问的topN用户以及访问次数(sql)
一、题目如下有一张表t1,假设有以下三个字段,代表某个userid在某一天访问了这个url: userid url event_dayq1:20210725这一天每个url的pv/uvq2: 20210725这一天每个url访问的top10客户以及访问次数输出:url, userid,pv,排名q3: 20210725这一天的7日留存表如下:1.对于问题1pv:每个url的总访问量 ...
2021-07-28 22:26:16 11397
原创 sql语句的书写顺序和执行顺序(包括各种可能的指令)
1.书写顺序(8)SELECT(6) avg,sum(9)DISTINCT <select_list>(1)FROM <table>(3)<join_type> JOIN <join_table>(2)ON <join_condition>(4)WHERE <where_condition>(5)GROUP BY <group_by_list>(7)HAVING <having_condition
2021-07-28 20:04:43 2217 2
原创 CountDownLatch、CyclicBarrier、Semaphore的区别
CountDownLatch原理减法计数器,CountDownLatch能够使一个线程在等待另外一些线程完成各自工作之后,再继续执行。使用一个计数器进行实现。计数器初始值为线程的数量。当每个线程完成自己任务后,计数器的值就会减一。当计数器的值为0的时候,表示所有的线程都已经完成任务,然后在CountDownLatch上等待的线程就可以恢复接下来的任务了。经典用法:1.某个线程在开始运行前等待n个线程执行前完毕。将CountDwonLatch的计数器初始化后,每当一个任务线程执行完毕后...
2021-07-24 16:35:10 271
原创 LinkedHashMap+Iterable实现LRU算法(简单易懂)
一、LRU算法LRU(Least recently used,最近最少使用)算法根据数据的历史访问记录来进行淘汰数据,其核心思想是“如果数据最近被访问过,那么将来被访问的几率也更高”。也就是说当我压入一个新元素A到数据结构中,会存在三种情况:1.数据结构中存在A,先移除A,再压入A(更新时间)2.数据结构不存在A,但是数据结构容量还够,直接压入3.数据结构中不存在A,但是数据结构容量不够,把最久没有使用的去掉,再把A压入选取数据结构:因为其中要记录压入元素的时间,那么我们自然
2021-07-20 23:28:51 155 1
原创 BIO/NIO/AIO的区别及应用场景
BIO,NIO,AIO有什么区别?1.BIO(Blocking I/O):概念:同步阻塞I/O模式,数据的读取写入必须阻塞在一个线程内等待其完成。也就说一个连接一个线程,而且无论客户端是否有数据,这边线程也会在这里傻等,给服务端添加麻烦,因为多一个线程就要多一些切换,创建,销毁等操作。何时阻塞:在服务端等待连接(连接阻塞,accept())与读客户端来的数据会阻塞(读阻塞,read())。服务端的操作:1.通过ServerSocket注册端口2.服务端通过调用...
2021-07-19 23:47:46 1752
原创 Integer与int的类型进行比较大小(超全的)
装箱:将基本类型用他们对应的引用类包装起来;拆箱:将引用类型转换为基本数据类型;例子如下: 1.new了,因此比较的是地址不相等; 2.装箱的时候用的是常量池的地址3.装箱的时候用的是常量池的地址4.成为200后就不相等了。在给Integer赋值时,实际上是自动装箱的过程,也就是调用了Integer.valueOf(int)方法,当这个值大于等于-128并且小于等于127时使用了常量池,所以3的两个地址是相等的,但是4的两个超过了127,故不使用常量池。5....
2021-07-03 21:14:34 3779
原创 Insert、Replace、Update的区别
Insert、Replace、Update的区别先将三个使用格式列出:INSERT INTO tablename(列名…) VALUES(列值);INSERT INTO tablename SET column_name1 = value1, column_name2 = value2,…;REPLACE INTO tablename(列名…) VALUES(列值);REPLACE INTO tablename SET column_name1 = value1, colum...
2021-07-01 11:23:41 2641
原创 数据库进行大数据量插入/更新操作
插入(更新)大量数据的方式插入的方式有很多种:第一种:一条一条数据插入第二种:批量插入批量插入的时候,也要分为有序插入与无序插入无序:有序性能对比:解释原因:①单条数据插入插一条,提交一次事务。②批量插入是自己规定条数进行事务提交,事务提交次数会变少。③有序比无序好的是因为索引的原因,有序数据索引定位较为方便,不需要频繁对磁盘进行读写操作。注意事项:1.SQL语句有长度限制,默认是1M,可以修改2.事务需要控制大小,太大会.
2021-07-01 09:43:57 2390
转载 通俗有趣讲解Atomic原子类的实现原理
线程安全真的是线程的安全吗? 什么是 Atomic? 实现一个计数器 AtomicInteger 源码分析 AtomicLong 和 LongAdder 谁更牛? 总结 当我们谈论『线程安全』的时候,肯定都会想到 Atomic 类。不错,Atomic 相关类都是线程安全的,在讲 Atomic 类之前我想再聊聊『线程安全』这个概念。线程安全真的是线程的安全吗?初看『线程安全』这几个字,很容易望文生义,这不就是线程的安全吗?其实不是,线程本身没有..
2021-06-29 20:41:09 492
转载 通俗易懂讲解Monad的设计模式
一、函数编程Monad函数式编程有一个重要概念,叫做Monad。网上有很多解释(这里和这里),但都很抽象,不容易看懂。我尝试了好多次,还是不明白Monad到底是什么。昨天,我读到了Aditya Bhargava的文章,他画了很多图。我想了半天,终于恍然大悟。下面,我就用这些图来解释Monad。1.软件最基本的数据,就是各种值(value)。2.处理值的一系列操作,可以封装成函数。输入一个值,会得到另一个值。上图的"(+3)"就是一个函数,对输入的值加上3,再输出。
2021-06-29 18:55:27 2112
原创 sql报错SELECT list is not in GROUP BY clause and contains nonaggregated column
高频面经汇总:https://blog.csdn.net/qq_40262372/article/details/116075528一、问题分析其中错误的原因是说group by哪一句中的select的字段是不对的。二、情景还原dept_emp表:salaries表:我想去查询每个部门人员薪水,于是写下了这样的sql:select de.dept_no ,s.salaryfromdept_emp deleft joinsalaries son..
2021-06-24 00:01:14 9826
原创 SQL中的Having与Where的区别(面试常问)
一、Having与where的区别1、分组前后过滤Having 是分组后对数据进行过滤Where 是在分组前对数据进行过滤2、是否能使用聚合函数Having后面可以使用聚合函数Where后面不可用使用聚合函数SELECT [ALL|DISTINCT] <目标表达式>....FROM <表名或者视图名>..[WHERE <条件表达式>][GROUP BY <列名 1> [HAVING] <条件表达式>][
2021-06-23 20:11:59 277
原创 让面试官赞扬的IO读取方法:大文件进行词频统计(单线程与多线程分别解决)利用Buffer流简单又快捷
一、背景 如果我们文件本来比较小,我们就可以直接读入内存进行统计即可,但是我们文件比较大,一起性读入程序就会报这个错误了
2021-06-05 22:51:44 884
原创 NIO中的ByteBuffer读取中文错误的解决方法:MalformedInputException
一、出错原因例子摆出: String raw = "长坂桥头杀气生,横枪立马眼圆睁。一声好似轰雷震,独退曹家百万兵。"; Charset charset = StandardCharsets.UTF_8; byte[] bytes = charset.encode(raw).array(); byte[] bytes2 = Arrays.copyOfRange(bytes, 0, 11); ByteBuffer bbuf = B
2021-06-05 20:07:10 862
原创 怎么破坏联合索引,使ABC的联合索引,走B的索引
一、问题原因二、解决方案通俗点说,有顺序的找,没有前面排序好为基础,后面也是乱的。如果想要将B作为索引的话,那要求A需要可枚举。
2021-05-25 18:58:46 431 1
原创 数据库的主键Id不是从1开始的
一、问题:主键id不是从1开始计算新插入两条数据,发现主键Id不是从1开始, 主要是因为我们这不是第一次插入, 之前插入了数据,然后被删除了,然后又插入,这样数据库不是重新从1计算的,而是从之前被删除的数之后开始计算。二、解决方法执行sql命令:truncate table表名然后再进行插入!!成功!...
2021-05-21 19:10:41 3994 1
原创 (详细带你分析错误):No property 属性名 found for type 类名,总结了其他解决办法
一、报错信息(仔细分析问题,才能找到解决方法,一定要耐心看错误,否则你是真的不能解决问题)2021-05-21 16:46:34.549 ERROR 12716 --- [ main] o.s.boot.SpringApplication : Application run failedorg.springframework.beans.factory.UnsatisfiedDependencyException: Error creating be
2021-05-21 17:15:03 24860 3
原创 项目名字后面有带有中括号[XX-XX-XX]的解决方法
一、问题产生原因路径1的名字与pom里面的artifactId不同二、解决方法1.将artifactId修改为路径1的名字或者调换顺序,反正保证这两个一样。2.右击项目名字,然后根据下图操作,选择不连接到maven3.再右击pom.xml加入到maven工程去三、成功四.最全面经及答案(已700+收藏量):(5条消息) 2021年5月最新面经答案总结(Java基础、数据库、JVM、计网、计操、集合、多线程...
2021-05-21 15:21:41 3014
原创 实现类去实现接口的时候,将接口的注释一起重写出来设置
一、接口写了很多的注释二、实现类去实现接口的时候,不想重写这些注释,一招搞定把这个勾上即可!!!
2021-05-19 10:12:14 3022 6
原创 Idea删除未引用包或暴红的包
一、前言因为项目需要,把其他项目拷贝到自己项目下,因为包不一样因此,import都是以前的如下图二、解决办法方法一:去掉当前页面或类下直接快捷键Ctrl + Alt + O;方法二:推荐设置如图,配置随时自动清除,勾选如下选项即可(自动去掉)点击ok后关闭,选中指定目录然后ctrl + alt + o弹出如下窗口:点击 run即可...
2021-05-19 08:52:03 2616 1
C++QT控制通过VISA控制硬件设备的程序.txt
2021-02-02
分布式微服务例子:SpringBoot2.X+SpringCloud+SpringDataJPA+Consul+Feign+Swagger
2021-01-24
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人