自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

weixin_64842400的博客

在校大四生,学习记录。

  • 博客(75)
  • 收藏
  • 关注

原创 云服务器数据库的问题

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '新密码';了解到问题出在用户root【root作为我们从外界访问数据库的桥梁】,于是尝试添加root用户回去。路径:/etc/mysql/mysql.conf.d/mysqld.cnf。4、如果我们允许外网访问数据库,记得修改权限。localhost表示本地,mysql登入的时候,不用指定ip登入。重启数据库,直接进入数据库,发现用户只有四个。

2024-10-28 16:47:07 371

原创 Web容器和Servlet容器、Spring和SpringMvc

即属于Web容器,又属于Servlet容器,所以称为轻量级应用服务器。属于Web容器,即只能解析html,image等静态资源,不能解析JSP文件,而Tomcat都可以解析,但是主要是解析JSP、Servlet等动态资源,在解析静态资源时效率没有Apache高。Apache:也就是说你在服务器的目录下面丢个index.html,通过http:xxx//8080/index.html可以访问;倘若丢个index.jsp,无法解析,无法通过http:xxx//8080/index.jsp访问。

2024-10-27 10:52:03 388

原创 IO及网络编程

IO分类:分为IO一切程序皆文件,这样对于我们程序员来说,只需要open、read、write、close接口,即可完成全部操作。FD,一个索引,内核中维护了一些数据结构,通过文件描述符能找到对应的文件,文件读写到了那里。比如调用open(‘file:// ***’)函数,,将来我们调用read()/ write()的时候,参数就是对应的文件描述符传统的web服务器中,当我们三次握手成功后,通过调用函数,可以得到对应的文件描述符(进行网络通信的),也叫。

2024-10-26 18:58:06 438

原创 阻塞与非阻塞

阻塞与非阻塞、同步与异步

2024-10-26 13:50:27 174

原创 Spring Cloud Alibaba

拆分成微服务架构的优点:如果某一个服务出了问题,最终宕机的是当前问题服务,而对于单体架构,然后一出出来error如OOM,可能整个工程都崩溃了。对于大型项目,拆成多个服务后,可以更细致的管理,达到敏捷开发,如果是很多人共同去维护一个项目,在提交代码的时候可能还会频繁出现合并冲突。注册中心的引入:早些年,在微服务架构引进之前,我们如果把一个工程拆成多个子系统,更多的是通过给不同的子系统分配一个二级域名,然后交给nginx来负载均衡。

2024-10-22 17:39:55 697

原创 多线程并发可能出现的问题

我们这里记录了一个偏移量,发生并发问题,是因为前端发过来的多次请求,并没有保证请求之间有先后顺序,那么如果我线程A先来【想要将值更改为2】,拿分布式锁之前,突然sleep了,这个时候线程B并发的过来【想要将值更改为3】,拿到了分布式锁,改成了3,然后释放,然后线程A醒过来了,去拿锁,改成了2,最终数据库的值为2,相当于是个老值。1、不要在事务里面加锁,这样当线程1 执行完操作,进行释放锁的时候,事务并没有提交。PS:消息的不可靠性可能会影响本地事务提交,所以也要把消息的发送放到事务外面。

2024-10-22 15:12:46 636

原创 TCP、UDP

UDP 在传送数据之前不需要先建立连接。而提供的服务,在传送数据之前必须,数据传送结束后要。:远地主机在收到 UDP 报文后,不需要给出任何确认,并且。TCP 提供可靠的传输服务,TCP 在传递数据之前,会有三次握手来建立连接,而且在数据传递时,有确认、窗口、重传、拥塞控制机制。通过 TCP 连接传输的数据,无差错、不丢失、不重复、并且。:有状态说的是 TCP 会去记录自己发送消息的状态比如消息是否发送了、是否被接收了等等。为此 ,TCP 需要维持复杂的连接状态表。

2024-09-29 15:11:32 988

原创 并发面试合集

区分线程和线程体的概念,线程体通俗点说就是任务。创建线程体的方式:像实现接口、继承Thread类、创建线程池等等,这些方式并没有真正创建出线程,严格来说,Java就只有一种方式可以创建线程,那就是通过创建。而所谓的对象,这仅仅只是线程体,也就是提供给线程执行的任务,并不属于真正的Java线程,它们的执行,最终还是需要依赖于……比如我们以new Runnable接口:我们自定义了一个Runnable接口,通过直接run,接着并执行对应的任务。

2024-09-28 18:13:45 1214

原创 Redis在window下和linux下的区别

早期,redis只能运行在linux上,原因是底层调用的是epoll方法,而windows下没有该方法。除此之外,windows下也没有fork( )函数。最终为了强行能在windows上运行,使用的是select+ IOCP方式。Epoll 是当事件资源满足时发出可处理通知消息;IOCP 则是当事件完成时发出完成通知消息;从应用程序的角度来看, Epoll 是同步非阻塞的;IOCP是异步操作;简单来说,Epoll可以省去你等待的过程,但是不会帮你完成任务。

2024-09-26 17:41:24 957

原创 招行科技笔试——合并区间,移动零

以数组intervals表示若干个区间的集合,其中单个区间为。请你合并所有重叠的区间,并返回一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。第一个点:比较器的重写:重写sort方法中的比较器第二个点:这里是用 List去存储每个一维数组,最后去toArray转化回去第三个点:合并区间的边界条件的判断:当前遍历的数组左区间和上一个数组的右区间的大小关系,如果大于,说明不需要合并,直接把当前遍历的数组add进去否则,就需要比较当前数组和上一个数组的右区间,谁大取谁。

2024-09-24 17:53:02 341

原创 比较器(算法中排序)

if(c.compare(pivot,a[mid]) < 0) 其中 c是比较器,pivot是将要被插入的元素(新值),a[ mid ]是数组中,正在被二分查找比较的元素,我们重写比较器,其实也就是人为的改变走向,让本该去if分支的去了else,else的去到了if分支,进而改变左指针or 右指针的移动,进而改变了相对插入点的位置,左边or 右边,进而达到了升序or 降序。当然,这里逻辑是基于比较器的,如果重写了,(默认升序,重写为降序),就。),反之,在右边,移动左指针(left = mid+1)

2024-09-24 15:46:42 488

原创 Redisson分布式锁

逻辑就是锁的重入机制嘛,当前是否进来过,没进来的话,则通过hincrby方法创建hash结构,同时设置字段为1,并刷新过期时间。注意,这里成功都是返回nil,失败返回key的过期时间。可重入:上面有讲,其实就是在获取锁的时候,多了一个判定, 是否是当前线程id拿到的锁,是的话,hash数据结构中的value字段次数+1,同样的,如果释放锁,会先去给value -1,然后也会通过当前线程id去判断次数此时是否>0,如果count>0,说明还不能删除这个key嘛,如果count = 0 ,则del这个key。

2024-09-22 18:21:24 1101

原创 临时表和基本表

临时表则是由数据库管理(跳出会话或事务自动删除),因此临时表也不需要考虑锁冲突等情况。工作量不一样,基本表通常还要考虑添加索引的约束,而临时表不需要(也可以加),因为临时表的定位就是存储临时数据。临时表的共同特点:存放在内存中,且只有当前会话或事务有关,跳出这个会话或事务,则临时表资源被释放(表被删除)不一样,基本表可以跨越多个会话或事务,而临时表仅在创建它们的查询中可见。不一样,基本表存储在持久化区域如磁盘中,临时表存储在内存中。临时表分为显示临时表和隐式临时表。隐式临时表一般 特指通过。

2024-09-14 15:16:43 251

原创 Nginx

通过upstream定义了一个名为backend的负载均衡服务器组,包含了两个Nginx实例。然后在server中【上面定义的】使用proxy_pass将请求转发到backend组中的任意一台Nginx实例上。我这里的配置文件含义:监听8080端口,域名为localhost本地,当请求发来的时候,会转发到 /html/hmdp 目录下,并返回 index.html文件。如果前端项目需要处理大量的并发请求,单个Nginx实例可能无法满足需求。- location:定义请求的URL路径和对应的处理方式。

2024-09-12 15:26:31 412

原创 Git bash使用

git commit --amend 有时候我们提交完了才发现漏掉了几个文件没有添加,或者提交信息写错了,git fetch (更新)本地获得远程仓库内容的引用,需要我后续手动merge或者rebase。git status 会显示你当前处在的分支,以及你本地修改了的文件,但是还没有暂存。git reset 文件名 将缓冲区的文件撤销掉(将来commit就没有了咯)你的远程仓库 git remote add origin + URL。随即 git add 指定文件 ——将工作区域中的文件添加到缓冲区。

2024-09-11 22:08:57 370

原创 Optional类中一些方法的使用

emptyAction 是一个 Runnable 类型的接口,用于处理不存在的情况。action 是一个 Consumer<T> 类型的接口,用于处理存在的情况。Arrays.stream :将T类型的数组转换成Stream<T>也就是说,在使用这个方法前,先定义一个Runnable类型的接口。也就是说,在使用这个方法前,先定义一个Runnable类型的接口。使用场景:从一个数组中,找到(过滤出)目标值的元素,并做处理。好处:使用StreamAPI,不使用传统的for循环。

2024-09-09 13:50:12 286

原创 博客常见问题

然后我们会得到一段token,把它cv在repo的配置前,记得token和url之间加个@符。看了下git的配置,没有问题,单机过去也能直接到我的git上。同时注意:type,repo,branch分号后面 加个空格。最下面开发者设置,找到个人token。可能是传不过去,token的问题。hexo d 同步上传到git。hexo g 生成静态文件。hexo s 本地预览。

2024-09-09 13:49:07 356

原创 redis Ubuntu安装问题

bin/sh: 1: pkg-config: not found(没有安装pkg-config)/bin/sh: 1: cc: not found(没有安装gcc环境)如果安装不了pkg-config ,则更新apt-get之后再尝试安装pkg-config。

2024-07-28 14:13:28 190

原创 Linux部署MySQL

获取tar包并解压对于数据库版本不同,主流分为MySQL5以及8两种版本,配置会有一些些出入,5的话基于my.cnf可以进行相应配置,8没有。如图:其中:basedir为存放解压mysql文件的位置datadir为我们进行初始化MySQL服务的时候数据存放的位置【如果在第一次初始化的时候出现问题,要进行第二次等多次初始化之前,我们需要把该文件夹下的文件清空】log-error记录日志信息,我们第一次初始化的默认随机密码在里面查看。

2024-06-04 17:05:11 896

原创 无法删除dll文件

通过Tasklist /m + dll文件名称 去查看它和哪个系统文件绑定运行,发现是explorer.exe。我们如果直接通过del命令【当然需要在该dll文件所在的路径中】。碰到xxxxxx.dll文件无法删除不要慌!我们需要在任务管理器中,将资源管理器结束掉。最后别忘了启动explorer.exe程序喔。这样,我们就可以成功删除了。

2024-05-31 17:03:36 420

原创 B树、B+树与磁盘读取的关系

由于存储介质的特性,磁盘本身存取就比主存慢很多,再加上机械运动耗费,磁盘的存取速度往往是主存的几百分分之一,因此为了提高效率,要尽量减少磁盘I/O。磁盘往往不是严格按需读取,而是每次都会预读,即使只需要一个字节,磁盘也会从这个位置开始,顺序向后读取一定长度的数据放入内存。涉及局部性原理:当一个数据被用到时,其附近的数据也通常会被使用。【空间局部性】程序运行期间所需要的数据通常比较集中。当一个数据被用到时,程序执行后期该数据也通常会被使用。【时间局部性】由于磁盘。

2024-05-30 19:14:06 1373

原创 Servlet

主要功能在于交互式地浏览和修改数据,生成动态Web内容。狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet理解为后者。从实现上讲,Servlet可以响应任何类型的请求,但绝大多数情况下Servlet只用来扩展基于HTTP协议的Web服务器。这里引申出HttpServlet【基于Http协议的servlet】

2024-05-23 20:40:28 551

原创 Spring框架

来实现)底层就是在。

2024-05-23 13:12:39 1065

转载 redis单线程到多线程的发展

redis作为单线程为什么这么快,I/O多路复用模型,以及之后引入多线程

2024-05-23 10:30:00 69

原创 Mybatis

执行方案出现如下情况,即有的数据没有被成功赋值:解决方式:通过给字段起别名通过resultMap的方式手动定义字段和属性的映射resultMap是Mybatis用于解决数据库列名与POJO属性名不匹配问题的强大工具,它可以在查询,插入,更新操作中灵活地重命名参数。

2024-05-22 20:29:59 1137

原创 泛型与Object

而使用Object的话,在编译期是不会去检查类型转换是否存在问题,而是统一交给运行时去检查,因为编译期,编译器不知道object的引用指向的对象是什么类型。比如我们经常使用的ThreadLocal,它就是通过泛型,这样,我们直接将我们需要封装的类型以参数的形式放进去即可。代码简洁,并且避免了运行时的类型异常。自定义封装工具类,比如项目中用于处理redis高并发的情况,如缓存穿透,缓存击穿,我们通过将其封装成工具类,使用泛型,一定程度上使代码复用性。因为编译的时候,编译器不知道obj指向的是Car类型对象,

2024-05-22 16:35:59 347

原创 Redis实现MQ

上游发出请求后阻塞等待下游给到反馈,否则整个流程将一直阻塞。提出mq之后:即有producer mq consumer 三者。

2024-05-21 17:21:03 883

原创 Docker容器

之前用的都是别人准备的,如果自己要部署一个java项目,并将其打包成镜像。分层存储的架构。镜像实际是由多层文件系统联合组成。TODO。

2024-05-21 15:50:55 820

原创 对ThreadLocal的一些理解

通常情况下,我们创建的变量是可以被任何一个线程访问并修改的。JDK 中自带的类正是为了解决这样的问题。ThreadLocalMap是ThreadLocal类的,即一个对象,且ThreadLocalMap中存放的是Entry<K ,V>数组,每一个entry中存放的key为当前ThreadLocal对象,value为我set的值。因为是静态内部类,所以多个ThreadLocal对象共用一个ThreadLocalMap。一个Thread线程对象中只有一个ThreadLocalMap。

2024-05-19 21:11:50 805

原创 计算机网络相关

HTTPS 的加密过程中其实既用到了非对称加密也用到了对称加密,其中握手过程使用的是非对称加密,主要目的是双方可以安全的协商一个统一的密钥,而真正的数据传输过程则使用的是对称加密,正是使用刚才商量的这个密钥。使用对称密钥是因为效率高,尤其是在大数据量传输的时候,使用对称密钥可以快很多!根据以下链接进行整理,如要观看完整版,可移步跳转,本人做笔记便于自己理解和查看。

2024-05-16 15:05:28 2095

原创 SQL操作面试题

左表score表写在left join前面是主表,因此左表的数据记录全部会出现在结果集中,而右表student中的记录如果在主表中没找到匹配,就不会出现在结果集中,上面的s_id=8的记录就没有出现在最终结果中。这里的重点是是用什么连接,需要考虑好哪个是主表,哪个是从表。假如还是使用左连接,但是表的顺序互相换一下,结果就会完全不同。NULL的话只能通过ISNULL和ISNotNULL去进行判断,而' ' 可以用<,>,=等等,更加灵活。只能通过COUNT(*)3、左连接、右连接、内连接、全连接、交叉连接。

2024-05-15 23:26:04 163

原创 MySQL数据库核心面试题

存储引擎、索引、事务、锁以及索引和锁之间的关系

2024-05-14 22:28:06 996

原创 高并发场景

缓存在同一时间大面积的失效,导致大量的请求都直接落到了数据库上,对数据库造成了巨大的压力。针对大量缓存同时失效的情况解决办法①设置随机失效时间(可选):为缓存设置随机的失效时间,例如在固定过期时间的基础上加上一个随机值,这样可以避免大量缓存同时到期,从而减少缓存雪崩的风险。②提前预热(推荐):针对热点数据(比如我们秒杀业务中的数据)提前预热,将其存入缓存中并设置合理的过期时间,保证在秒杀活动结束前不过期。测试环境下:我是通过测试类,先进行数据预热,加载进Redis缓存中。③持久缓存策略。

2024-05-12 20:23:12 468 1

原创 Java基础杂集

第二种情况,先在堆中创建一个String对象,其中的value属性(Byte数组引用),去看字符串常量池是否存在字面量“123”,存在的话,直接让value指向字符串常量池。第一种情况,先去字符串常量池查看,是否有当前字面量"123"存在,存在的话,直接把字符串常量池的地址赋值给栈中变量,不存在的话,则在字符串常量池中创建,并将地址返回。Java是一个面向对象的语言,Integer是int的包装类,把int类型封装成Object对象,通过封装,我们可以把数据和方法结合一起使用。

2024-05-12 19:12:51 329

原创 异常常常常

异常分为检查异常和非检查异常:检查异常:编译的时候必须被捕获或声明的异常,即如果一段程序中可能抛出异常,则必须处理【通过try catch、throws】如IOException、SQLException编译之前IDEA会提示你的异常,不处理的话编译都通过不了!!!非检查异常:在编译的时候不需要被捕获或声明的异常。这些异常通常是由程序的逻辑逻辑错误或运行时引起的,如算术异常、空指针、数组越界、by zero以上IDEA不会提示你,属于运行的时候产生的异常。

2024-05-12 17:42:01 187

原创 写SQL的心得

接着,系统按照 GROUP BY 子句中的指定字段分组,并对每个分组进行计算,生成虚拟的分组结果表。执行顺序 :from > on > where > group by > having > select > distinct > order by > top。4、聚合函数本质:对指定的列进行聚合,如果我们用了group by,我们可以对每个分组应用内聚合函数。在分组内部,聚合函数会自动处理所有重复的行。具体来说,在执行 SELECT 子句时,系统先计算 SELECT 中的列表达式和函数等,然后。

2024-05-11 18:24:52 816 5

原创 SQL常用函数

1、CURDATE() / CURRENT_DATE 返回当前日期2、CURRENT_TIME()/CURTIME() 返回当前时间3、CURRENT_TIMESTAMP 返回当前日期+时间4、DATE()从日期或日期时间表达式中提取日期值5、DATEDIFF(d1,d2)计算日期 d1->d2 之间相隔的天数6、DATE_FORMAT按表达式 f的要求显示日期 d7、UNIX_TIMESTAMP()得到时间戳8、FROM_UNIXTIME()时间戳转日期二、字符串相关函数1、CONCAT(

2024-05-11 12:22:18 453

原创 Spring框架中常见注解

RequestParam 做映射,前端请求的参数映射到控制器Controller的处理方法上的参数上。【当参数需要设置默认值(前端没有发送这个参数)、参数名称不相等(前端与后端的名称不一样)】SpringBootApplication,其实就是同时包含了下面三个注解。@RequestMapping用在类上表示所有该类下方法的父路径。@PathVariable Restful风格, 路径参数。

2024-05-10 18:19:00 329 1

原创 SpringBoot工作原理

ConditionalOnClass:判断是否有对应的字节码class文件,如果有则加载当前类,把这个配置类的所有Bean放入Spring容器使用。当Spring容器启动后,一些配置类、bean对象就自动存入到IOC容器中,不需要我们手动去声明,从而简化了开发,省去了繁琐的配置操作。通过@ComponentScan添加扫描的范围【比较繁琐,需要知道第三方库所在的包名,如果库多了,我还需要一个一个手动去添加】,因此如果在这个范围外配置了Bean、Component注解的类是不会被自动装配成Bean的】

2024-05-10 18:13:51 1839 2

原创 SpringMVC模式

处理器适配器的作用是将处理器对象(Controller)转换为处理器(Handler)的形式,然后执行其中的方法以处理请求。处理器拦截器与处理器执行链密切相关,处理器执行链中的处理器拦截器可以在请求进入处理器方法之前和处理器方法执行之后实施拦截逻辑。因此,虽然处理器执行链中包含了处理器方法,但最终还需要通过调用处理器对象和处理器适配器来执行具体的处理器方法,从而完成请求的处理过程。,包括了以上所述的元素。处理器执行链将负责依次执行处理器拦截器的前置处理、处理器方法的执行以及处理器拦截器的后置处理。

2024-05-10 11:21:04 1040 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除