- 博客(370)
- 资源 (29)
- 问答 (8)
- 收藏
- 关注

原创 9千字长文带你了解SpringBoot启动过程--史上最详细 SpringBoot启动流程-图文并茂
SpringBoot springboot是依赖于spring的,bi'qi
2021-06-14 13:49:32
11570
23

原创 Spring MVC执行流程及原理
面试找虐博主之前每次去面试必问的问题:“讲一下spring mvc的执行流程以及常用组件的作用”;记得第一次和面试官说了大概的流程是这样的:“服务器收到一个请求后会先去HandlerMapping中匹配url,找到url之后用HandlerAdapter 适配器去执行这个控制器(controller层),执行完之后返回一个modelAndView,然后通过视图解析器ViewResolver解析后得到一个view对象,这个view就是渲染好的jsp页面,返回给前端页面”;(等了一会看着我)面试官:
2021-05-24 23:22:11
6789
21

原创 Spring IOC详解 以及 Bean生命周期详细过程 可以硬刚面试官的文章
面试题来自面试官发自灵魂深处的拷问:谈谈你对spring的理解;一脸懵逼的求职者的内心活动:啥? 具体的问题是什么?现在的面试都不按套路出牌了吗? 抛出一个这么大的问题,你让我怎么回答?一脸懵逼的求职者的回答:额~ ~ ~ 这个。。。。 额~ ~ ~ 那个。。。。额~ ~ ~ 不知道唉。。。为什么面试官要问这种问题? 不可否认,现在的大多数的面试出题方式都是这样的,惊人的相似,就是面试官喜欢抛出一个问题,看你能讲多深,考的就是你对这项技术的深度和广度,深度就是你对技...
2021-05-23 20:01:46
9913
32

原创 设计模式 -- 原型模式 图解java对象克隆 引用拷贝、浅拷贝、深拷贝、序列化拷贝
什么是原型模式原型模式是一个创建型的模式。原型二字表明了改模式应该有一个样板实例,用户从这个样板对象中复制一个内部属性一致的对象,这个过程也就是我们称的“克隆”。被复制的实例就是我们所称的“原型”,这个原型是可定制的。原型模式多用于创建复杂的或者构造耗时的实例,因为这种情况下,复制一个已经存在的实例可使程序运行更高效。关键就是两个字:克隆对象克隆简介对象克隆,说白了,就是将已实例化的对象复制一个出来,有个别同学就要问了,字节new 出来或者用反射创建一个实例出来不就好了吗? 干嘛要克隆?..
2021-05-10 23:54:56
1412
15
原创 spring 使用三级缓存解决循环依赖详解
在spring 2.6之前的版本中,默认都是支持循环依赖的,也就不会报错,在2.6版本之后默认禁用了循环依赖;可通过以下方式开启循环依赖。
2025-07-29 17:04:59
365
原创 maven 打包报错 process terminated
出现这种问题一般都是直接使用 idea 自带的maven工具打包导致的报错,这种报错且没有报错内容,只显示。
2025-07-28 17:09:39
349
原创 解决 multiple definition of `main‘ 多重定义
经过以上报错信息可以解析出: main.cpp 的第15行已经有一个main函数了,在 CMakeCXXCompilerId.cpp 的第831 行还有一个main函数,其中 CMakeCXXCompilerId.cpp 是有cmake生成的;,在cmake编译中,使用GLOB_RECURSE宏,会递归遍历所有符合条件的文件,cmake编译生成的文件也会被搜索纳入文件名集合中,导致main重复定义问题。解决方法1:去掉GLOB_RECURSE,改为 GLOB。出现该问题是因为使用了cmake指令。
2025-07-28 17:09:01
294
原创 解决c++指针传递导致的重复释放问题
执行结果如下, 可以看到 2个指针地址是不同的,这也就证明了,在传参的过程中是发生了拷贝的;不信是吧,我们来做个实验,在main函数和release函数都打印下 pPointer 对象的地址,代码如下。先看这段代码,有多个地方都会释放 pPointer 的对象空间,但是为了防止重复释放,在第二次释放时做了判空处理;执行结果如下, 报错了,告诉我执行了2次free函数,也就是重复释放了;再次执行后,就不会报错了, 且main函数和release函数的 pPointer 对象地址也是相同的。
2025-07-28 17:08:24
314
原创 idea通过git筛选某个用户提交记录进行代码对比
每次需求开发都要先经过代码评审后才能上线,项目经理要求我们梳理出自己修改了哪些文件,而我们又是多个人在同一个分支开发,所以一个分支下就会有很多个提交;当我们通过右键项目 -> Git -> Show History 查看提交记录时就会发现有多个提交,进行分支对比的时候会将其他的人对比也展现出来;那没有一种方法,虽然是多人在同一分支开发,但是只查看我自己的提交记录呢?答案是有的,而且idea就能做到;
2025-07-28 17:07:52
358
原创 解决访问 nginx 首页报错 404
这种情况一般都是 nginx root目录(根目录)未配置好导致的,那我们只要保证根目录下有html,或者指定一个有html的根目录就行啦!然后,我们进入到 nginx的根目录,创建一个html目录,在html目录下创建一个 index.html 文件。应该是能进入到nginx 的欢迎首页的;但是当访问后却显示了404页面,在 nginx.conf 配置文件中,在。正常情况下,启动nginx后访问地址。命令查看到,nginx 的根目录是。,那我们就把根目录指定为。然后再次启动就可以访问了。
2025-07-28 17:07:21
2777
原创 C/C++ 调用lua脚本,lua脚本调用另一个lua脚本
Main.lua , 被c/c++调用的luamodule.lua , 被lua调用的lua模块main.c , c语言入口。
2025-07-28 17:06:50
286
原创 解决 Clion idea远程开发代码报错 ‘xxx.h‘ file not found 但却可以编译运行的问题
今天使用 c 调用 lua,在linux安装了lua开发环境,但是开发的时候却找不到 lua.h 头文件;在linux 运行以下命令, 显示 LUA 5.3.0 版本,证明LUA的安装是没问题的;但是在 CLion idea 却显示然而,更奇怪的是,点绿色小三角运行的时候却是可以正常运行的;这个情况让我了解到,肯定是idea的问题,代码是没问题的;
2025-07-28 17:06:18
285
原创 解决 c++ 调用 c 函数报错: undefined reference to ‘xxx‘ 的问题
至于为什么不能这么干,这篇文章说的很清楚, 有兴趣的请戳: https://blog.csdn.net/challenglistic/article/details/130223118。以上代码中只有main.cpp 是c++文件,其他文件都是c语言的;在所有的.h文件头尾加上以下代码即可, 注意,只加头文件即可。文件默认使用的是 c 编译器,实际在编译的过程中,东西太多,我们只需要关注这一行,意思是找不到。文件默认使用的是 c++编译器, 而。加完后运行如下图,可以正常运行了。文件中的函数就会出错.
2025-07-28 17:05:33
364
原创 解决 clion 导入别人的项目 报错:Cannot generate into xxx It is already used for project xxx
在 clion idea中依次选择 Tools -> CMake -> Reset Cache And Reload Project。
2025-07-28 17:04:58
246
原创 MinGW-w64的安装详细步骤 c/c++的编译器gcc、g++的windows版,win10、win11
MinGW(Minimalist GNU for Windows) 是一个用于 Windows 平台的开发工具集,它提供了一组 GNU 工具和库,可以用于编译和构建本地的 Windows 应用程序。MinGW 的目标是在 Windows 环境下提供类似于 Unix/Linux 环境下的开发工具,使开发者能够轻松地在 Windows 上编写和编译 C、C++ 等程序。gcc或者g++是c/c++的编译器,但是通常在 Linux 上才能用。如果要在windows上用,我们要借助MinGW使用它。
2025-07-28 17:03:29
573
原创 记录c++的一个天坑,模版的声明(接口)和定义(实现)必须放一起
之前写c语言,习惯了将声明和定义分开存放在不同的文件中,其中,声明放在头文件中,定义放在cpp文件中,这样一来方便后期维护,也算是一种规范,众所周知,c语言里面是没有模版这个概念的;发现在写模版类的时候,将声明和定义分开了,编译死活过不去;很明显,如果按照普通函数一样,将模板函数的声明与定义的分开,声明放在头文件,定义放在cpp文件实现,你会发现,编译没问题,但是在链接阶段会报”undefined references“。删掉即可,,然后将声明和定义都放在头文件即可;以下的Clion idea的报错。
2025-07-28 17:02:54
250
原创 解决c++运行时提示:first defined here (重复定义问题)
的38行也有个main函数,一个项目中不能同时有2个main函数,属于是重复定义了;想要解决这个问题很简单,只需要注释掉其中一个main函数即可,删掉也行。然后点击main.cpp里面的绿色三角形;文件的106行里面有个main函数,而。经过查看,确实是有2个main函数,我们主要看这一行即可。构建过程中也没有报错。
2025-07-28 17:02:20
405
原创 解决c++静态成员编译报错:‘xxx‘ is not a member of ‘xxx‘ 问题
今天自己用c++写了一个静态的工具类,用来处理字符串切割用的,发现写好之后,出现一个很奇葩的问题,死活编译不过去,就是一个劲地报错;但我看了代码这样写是没问题的;之后在运行,一切又正常了。
2025-07-28 17:01:45
337
原创 idea编译java代码时提示 java: 非法字符: ‘\‘、‘\ue104‘ 解决方案
网上有很多说是File > Setting > File Encoding,将IDE Encoding和Project Encoding 都设置为UTF-8就行,可是我试了不行;后来看到另外一个解答,File > Setting >Java Compiler,在 Additional comman line parameters(附加参数)中添加参数。最近编码完成后总是报非法字符,项目启动不起来,出现以下报错。
2025-07-28 17:01:15
520
原创 windows clion远程连接ubuntu运行调试nginx-1.22.1版本
但是这种方法只能一个个改,如果我们需要修改整个项目的编码格式,这种方式是不可取的,最好的解决方案就是直接在linux 系统上 clone 代码,而不是在 windwos 上 clone。在服务器上,ubuntu系统中,先使用vi命令打开脚本,然后通过以下命令即可查询到编码格式,如果为dos,那么我们需要修改编码格式,如果格式是unix,那么不要需要修改。一般出现这种情况,是操作系统编码格式不同导致的,在windows中是CRLF,在linux系统是LF,在macos是LR;
2025-07-28 17:00:44
411
原创 dataGrip以insert sql方式导出查询结果
除此之外也可以直接在表上右键 -> import/Export -> Export Data to file。然后选择sql Inserts 后点击 Export to file 即可导出。然后在选中全部,在复制后粘贴,这些数据就变成了sql格式了,是不是很神奇;当我选中全部复制后,在粘贴,结果是这样的,是csv格式的。这时候我们想要这些数据的 sql 格式,该怎么做呢?在弹出的窗口中选择 SQL Insert。默认情况下,查询到的结果是这样的。首先,点击右边的这个CSV。
2025-07-28 17:00:22
196
原创 idea编译报错 java: 非法字符: ‘\ufeff‘ 解决方案
在UTF-8编码中,BOM由3个字节组成(0xEF, 0xBB, 0xBF),用于表示文件采用UTF-8编码。然而,有些应用程序可能不支持带BOM的文件,或者BOM可能会被错误地解释为文件内容的一部分,因此在某些情况下,使用带BOM的编码方式可能会带来一些问题。出现这样的问题来源于这个BOM,一般在编写时候会给你默认添加这样的一个BOM头,是隐藏起来的,编译时候就会给出现编码混乱问题;然后用Notepad++ 打开文件,点击编码后发现,当前的编码是 UTF-8 带 BOM的,所以我们只需要点击下面。
2025-07-28 16:56:50
513
原创 wrk 压力测试工具使用教程
综合来看,这份结果表明在当前的测试条件下,系统平均每秒能够处理约 32796.50 个请求,延迟较低,但存在部分请求的延迟较高。“Socket errors: connect 0, read 0, write 0, timeout 8”:显示了在测试期间发生的套接字错误,包括连接错误、读取错误、写入错误和超时错误的次数。举例,以下使用了2个线程、并发数为100,运行30秒,线程超时时间为30秒,全局超时时间为40秒,来测试。“Latency”:延迟,这里显示的是请求的延迟数据。
2025-07-28 16:56:19
923
原创 解决ubuntu linux debug时报错: Cannot insert breakpoint xxx. Cannot access memory at address xxx
老版本的 GDB 在找不到 /proc/PID/mem 文件时,会转而使用 ptrace,而新版本的 GDB 则禁用了 ptrace,默认 /proc/PID/mem 是存在的。发现问题后,马上进行各种搜素引擎查找问题以及解决方案,终于发现这是gdb的一个bug,因为我用的linux系统是windows子系统 wsl,而 WSL 中没有对 /proc/PID/mem 提供支持。一开始以为是idea的问题,遂转到linux下使用gdb来调试,发现是另一个错误,执行run指令后,提示找不到。
2025-07-28 16:55:46
190
原创 解决 xshell 无法连接win10 、win11的linux子系统
正常情况下,在微软的软件商店安装好ubuntu后,第一次进入系统都会让你先设置一个账号,而这个账号权限是有限的,假如我们想要管理员权限的话,就必须用root方式登陆,那么我们就可以用以下方式来达到用root登陆的目的;在windows的应用商店下载了ubuntu 22.04.2 版本,但是在使用的过程中发现windows主机和子系统的ubuntu的网络是不通的,也就无法通过xshell连接;因为xshell连接的是22端口,所以一定要先开放,每个系统开放端口的方式都不一样,以下是使用ufw工具。
2025-07-28 16:55:13
326
原创 GDB高级技巧—反向调试,让代码回退的方法
反向调试是一种高级调试技术,可以让程序已经执行了一段时间后,回退到过去的状态并重新执行。这意味着你可以回到程序执行中的任何点,查看变量的值、堆栈跟踪以及程序执行路径。反向调试可以让我们快速、准确地定位出程序中的错误或异常的根本原因。简单来说,就是一种可以让程序逻辑逆序执行的调试技术。通过它,你可以随时中断程序的正常执行,然后逆序执行,让程序回到过去,并可以查看任意时间点的任意信息。
2025-07-28 16:54:42
471
原创 手把手教你实现简单时间轮算法
如果想定期执行一个操作,只需要起一个定时器,设置时间间隔,然后时间达到之后就执行任务,一个定时器对应一个任务,如果任务很少的情况下这样做没什么问题,但是任务有成千上万个的时候,就得起很多的定时器,不断轮询,这对系统的内存和cpu都产生了很大的压力,程序还没开始跑呢,定时器已经满天飞了…以下是纯手写的简单定时器代码,用死循环执行,因为一个定时器只针对一个任务,所以开销巨大,不建议使用sleep(延时N秒);... 执行任务。
2025-07-28 16:54:09
470
原创 定时任务 cron表达式 ? 和 * 的区别
1、【日期】与【星期几】两者为互斥的,不能同时设置。这个比较容易理解,假设日期设置为1,星期几也设置为1,那含义是什么:每月1日且为周一时触发,可能一年之中没用任何天能满足上述条件,更重要的是什么人能有这种xx的需求呢?正常的用法为 x/y,x表示触发的起始数值,y表示后续间隔,如 秒数中设置 5/20,则表示从第5秒开始触发,然后每隔20秒再循环触发(25、45,下次循环5、25、45…表示列表项目的分割,如 秒数中设置 1,3,17,则表示秒数为1,3,17时满足触发条件。表示任意值都满足触发条件。
2025-07-28 16:53:39
302
原创 git rebase使用教程 以及和merge的区别
rebase 和 merge 相似,但又不完全相同,本质上都是用来合并分支的命令,区别如下merge合并分支会多出一条merge commit记录,而rebase不会merge的提交树是非线性的,会有分叉,而rebase的提交树是线性的(通过重写提交历史),它是一条直线;rebase可以将多个commit合并,而merge不支持这个功能merge合并操作很友好,因为它没有破坏性。
2025-07-28 16:53:01
645
原创 解决clion 2023 远程开发remote模式 - 头文件提示 : file not found(找不到Linux头文件)
最近在用远程开发,就是在windows系统上开发linux程序,但是用最新版的clion报错了,在clion找不到Linux中的库文件,所以就没有代码补全,但是编译是正常的。最后,在菜单栏依次点击 Tool -> Resync with remote hosts,,然后右边打上勾,因为里面内容有点多,可以直接输入remote来搜索这一条;鼠标移上去会提示: file not found。首先双击 Shift 键,打开搜索栏,接着输入。是linux系统支持的;是windows支持的,而。
2025-07-28 16:52:28
335
原创 linux守护进程的作用和原理、创建守护进程的三种方式
守护进程(Daemon)是在操作系统中运行的一种特殊类型的后台进程。它在系统启动时启动,并在系统关闭时终止,与用户交互的终端会话无关。守护进程通常在后台运行,不会与用户进行直接的交互,也不会被用户终止。守护进程通常用于执行一些系统级的任务和服务,比如网络服务、数据库服务、日志记录、定时任务等。它们在系统运行时一直保持活动状态,为其他应用程序或用户提供服务。
2025-07-28 16:51:56
706
原创 使用Valgrind查找内存泄露和程序崩溃
Valgrind是一个GPL的软件,用于Linux(For x86, amd64 and ppc32)程序的内存调试和代码剖析。你可以在它的环境中运行你的程序来监视内存的使用情况,比如C 语言中的malloc和free或者 C++中的new和 delete。使用Valgrind的工具包,你可以自动的检测许多内存管理和线程的bug,避免花费太多的时间在bug寻找上,使得你的程序更加稳固。
2025-07-28 16:51:26
280
原创 使用signal信号机制 + backtrace函数打印出程序崩溃后的堆栈信息
signal() 函数是 C 语言中用于处理信号的函数,它用于注册信号处理函数。信号是在程序执行过程中由操作系统或其他进程发送给进程的通知,例如,程序错误、外部事件等。
2025-07-28 16:50:55
341
原创 C/C++ CoreDump配合gdb分析程序崩溃教程
Core dump(核心转储)是在程序发生严重错误或崩溃时,操作系统将程序的内存状态和其他相关信息保存到一个文件中的过程。这个文件被称为核心转储文件或核心文件。核心转储文件记录了程序在崩溃时的内存映像、寄存器的值、堆栈信息以及其他相关信息。核心转储文件对于调试程序崩溃和分析崩溃原因非常有用。通过分析核心转储文件,可以了解程序在崩溃时的状态,帮助开发人员定位和修复错误。在大多数操作系统中,默认情况下,核心转储功能是启用的。当程序发生崩溃时,操作系统会尝试生成一个核心转储文件。
2025-07-28 16:50:17
460
原创 gdb调试教程
GDB(GNU Debugger)是一个功能强大的调试器,用于调试和分析程序的运行。它是自由软件基金会(FSF)的 GNU 项目的一部分,可在多个操作系统上使用,包括 Linux、Unix、Windows 等。GDB 可以帮助开发人员在程序运行过程中找到和修复错误,以及分析程序的行为和性能。它提供了一系列的命令和功能,用于设置断点、单步执行、查看变量和内存、跟踪函数调用等。通过与编译器和调试信息配合使用,GDB 可以提供丰富的调试信息,帮助开发人员深入了解程序的执行过程。
2025-07-28 16:49:46
802
原创 makefile自动推导详解
自动推导也叫隐含规则,所谓隐含规则指的是,我们在Makefile文件中不使用 gcc/g++ 命令来生成目标文件,但是执行make命令以后,Makefile 会自动帮我们执行。这就是Makefile 的隐含规则,也可以称为自动推导的过程。
2025-07-28 16:49:07
261
原创 Makefile 基础语法和变量详解
当我们在写单个c或者cpp文件时,可直接用以下命令来编译文件# 编译c文件 gcc main.c -o main # 编译c++文件 g++ main.cpp -o main但是当我们项目中有很多文件的时候,就不能用这种命令来编译了,首先成本太高,其次维护麻烦;所以大神们开发出了 makefile;可以同时编译多个文件;并且会自动检测出哪些文件是修改过的,只编译修改过的文件,makefile中变量的赋值有以下几种方式简单赋值(:=)递归赋值(=)条件赋值(?=)追加赋值(+=)
2025-07-28 16:48:15
329
opencv训练级联分类器训练数据,车头车尾图,包含正样本和负样本图片,192张正样本和2000张负样本
2024-07-03
nginx利用redis实现session会话共享-tomcat8版本专用
2018-09-11
自定义注释的mybatis-generator-core-1.3.6.jar
2018-07-22
mysql-connector-java-5.0.8-bin 连接mysql数据库的驱动jar包
2018-07-20
mybatis-generator-core-1.3.2(含有源码--生成注释、自定义sql)
2018-07-23
mybatis-generator-core-1.3.2(含有源码--生成注释、自定义sql)第二版本
2018-07-23
前端js解析/读取excel文件
2018-12-22
Mybatis-Generator自动生成Dao、Model、Mapping相关文件,不依赖maven,直接生成
2018-10-24
Jenkins2.215安装包和常用插件包.zip
2020-01-20
cas-server-webapp-4.0.0.war--cas server去掉https验证
2018-07-24
nodejs-webpack进阶教程-逐步加入vue、HtmlWebpackPlugin、css压缩、热部署
2018-11-30
redis服务端以及java程序和教程
2018-04-28
ThreadLocal 的key是弱引用,为啥gc无法回收?
2025-07-27
c语言 *(char **) 是啥意思?
2023-10-22
c/c++ 如何判断一个指针是否已分配内存空间?
2023-05-30
c/c++ 宏定义的问题
2023-05-18
c++直接返回指针有问题吗?
2023-05-10
c++子类继承父类时为啥析构函数执行了2次
2023-04-12
const在函数的前、中、后有什么区别?
2023-03-21
c++野指针是什么?
2023-03-14
clion写c++头文件提示找不到函数实现
2023-03-19
c++对指针运算++和+=1是一样的吗?
2023-03-18
c++ int i 和new int有什么区别?
2023-03-14
C++未赋值的变量为啥是个随机数?
2023-03-14
c++这样写为什么会报错?
2023-03-13
高并发情况下,要保证数据库一致性,除了加锁,还有哪些方式?
2022-05-24
熔断和降级的区别是什么
2021-08-30
服务熔断和降级的区别是什么?
2021-08-17
微服务高并发情况下会产生哪些问题
2021-08-24
面试题:mysql海量数据如何将A表的数据更新到B表
2021-08-04
myisam写数据的时候会把表锁住吗?
2021-07-27
请问原力计划的表情是怎么加上去的?
2021-07-04
TA创建的收藏夹 TA关注的收藏夹
TA关注的人