自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Pandaer杂货铺

分享技术,日常踩坑记录

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

原创 随笔 文件系统基本原理

文件系统通过将磁盘分为多个块,来进行管理,一个文件块一般4K的大小,而FCB中的索引表就记录这有哪些文件块。因为FCB的大小是固定的,所以索引表的大小也是固定的,这就导致了一个文件存在最大容量,一般而言,FCB中的索引表有15个槽位,前12个位置直接存储数据块的地址,第13的位置存储的是一级索引的位置,即一级索引表,第14的位置存储二级索引的位置,第15的位置存储三级索引的位置,而一个索引块可以存储256个数据块,那么一个FCB最多可以使用数据块:(12 + 256 + 256。学而时习之,不亦说乎!

2024-10-01 16:45:23 275

原创 随笔 漫游互联网

温故而知新,可以为师矣。互联网我们可以想象成一个立体的网状结构,由一个一个的小网络组成的网状结构,在一个一个小网络中通过一台一台机器组成,经过几十年的发展终于有了今天这个样子。而这个一定的规则就是我们熟知的TCP/IP协议族,虽然OSI提出的是七层网络模型,但是在实际生活中使用的是四层网络模型,从上到下分别是应用层,传输层,网络层,数据链路层。既然传输层需要将数据从一个数据中的一个程序送到另外一个主机中的另外一个程序,就需要有东西可以标识这个程序,我们知道IP地址标识在网络中的一个主机,那么。

2024-09-30 13:32:56 353

原创 随笔 JVM本质

当时的操作系统至少存在两个阵营,一个是Windows,一个是Linux,由于系统不同,提供的系统库API也不一样,这就导致在写C语言代码的时候,尤其使用到系统库的时候都不得不做兼容处理。那么它是如何做到的呢?文件加载进JVM进程中的元数据区,然后创建一个主线程,将这个字节码文件的main方法的地址赋值给这个线程的PC寄存器,然后这个主线程将PC寄存器的值交给执行引擎,执行引擎开始执行字节码指令,比如上面的代码,一开始就执行main方法,所以就会在栈空间上开辟一块新的栈帧,存放一些局部变量,这里便是字符串。

2024-09-25 09:34:26 913

原创 Spring 核心

这篇文章,我们换个思路来学习,来践行一下,以面试题为引来重温一下Spring,毕竟孔子曾说,“温故而知新,可以为师矣。” ,可以通过这个链接看看有哪些常见的面试题面试题虽然很多,但是如果我们抓住Spring的本质,那么一切都显得有迹可循。如果你能静下心来通读Spring的官方文档,那么你就会觉得一切都是那么自然。所有的答案都在中。所以这部分内容,我替代不了你,你需要自己通读一遍官方文档。这篇文章主要是对核心的内容做一个总结仅此而已。

2024-09-24 14:50:29 1094

原创 随笔 数据结构演绎

到此我就将基础的数据结构给串联了起来,那么我们回到标题,为什么Hash表的查找时间复杂度为O(1),这是因为Hash表利用了数组的随机访问,大致的过程是这样的,Hash表中的每个元素由两个部分组成,一个是Key,一个是Value,Hash表通过一个函数(数学意义上),可以将任意的输入转换为一个值,这被称为Hash函数,然后利用这个值 与 数组的长度求余,得到的值即为下标,然后在对应的下标处存储KV键值对。为此特意将数据结构分为逻辑结构和物理结构,逻辑结构就是我们常说的那些数据结构,比如树,堆等等。

2024-09-24 10:49:32 484

原创 随笔 程序运行的基本原理

在堆空间中,数据的生命周期是可以跨函数的,一般用于共享的场景,关于堆内存的管理,不同的语言有不同的管理策略,比如,C语言对堆内存的管理完全交给程序员自己管理,Java对堆内存的管理是交由垃圾回收器管理。而线程做的事情是复用父进程的代码空间,堆空间,创建一个额外的栈空间,以及供操作系统管理的线程相关的数据结构 -- TCB。运行态就是进程正在使用CPU执行指令,阻塞态就是因为需要等待某些资源,可能是IO,可能是锁,而暂时不被操作系统调度,一旦等待的资源就绪,就会进入就绪态,这个时候就可以被操作系统调度。

2024-09-23 06:57:03 455

原创 算法-回溯

正如标题所言,今天我们来讲解回溯算法,回溯的定义网上一大把,而且还不容易懂,这里来谈谈我对回溯的理解。首先我们先来对齐一个认知,,不要因为他的名字觉得很高深就认为它很难。为什么这么说呢?这是因为一切的基础算法都源于对现实世界的常见问题的。而我们就生活在现实生活中,所以这些问题的解决思想我们早就知道,我们唯一不知道的是。所以我们无需把算法认为有多么的高深。如果你认同这个认知,那么就继续往下看既然所有的算法都只不过是对现实世界常见问题的计算机解法,那么回溯解决的是现实世界中哪类问题呢?

2024-09-22 13:58:58 835

原创 随笔 软件开发的第一性原理

没有C语言好用的数据类型,分支结构,循环结构,不需要关心底层的指令集架构。于是我们就可以回答开头的问题,C语言为什么会出现,主要是因为汇编语言与底层的指令集架构强关联,而且编写程序时,存在太多冗余,而且容易出错,于是通过抽象和总结一些特点,就创建了C语言,C语言就实现了这些特点,比如与底层的指令集架构无关,总结出的分支结构,与循环结构并用语法元素实现。这里面的核心在于推导和验证,所谓的推导,我们可以这样理解基于你现有的技术知识去猜它的实现,没错就是猜,然后通过搜集资料,去验证你的猜想。

2024-09-22 06:44:15 299

原创 Go 第二期

今天,我们梳理了一下Go的数据类型以及逻辑结构的基本语法,如果你想学习到更加具体的内容可以参考官方文档。

2024-09-19 20:28:03 810

原创 Go小专栏 第一期

在这三位大佬的讨论中,这门编程语言要解决Google软件工程上的问题,而不是去做编程语言的创新。如果你接触过Go,就应该会知道Go被Google开源出来,Go的出现源自一次大型工程的构建,在等待漫长的构建过程中,有三位大佬开始讨论是否可以利用编程语言加快构建时间,解决目前Google在软件开发中遇到的问题呢?到此,我讲解了为什么Go会出现,以及Go语言的特点,理解了这些东西,我们在学习Go的语法,再能更好的理解。如标题所述,这篇文章主要是来聊聊Go的历史,现状以及未来,或者也可称为Go的发展脉络。

2024-09-17 08:01:54 568 1

原创 类型 编程语言

类型对内限定了变量能够访问的内存范围,提高程序的安全性,对外提供了建模的手段。

2024-09-05 19:54:52 293

原创 深入浅出Mysql 第四期

我们都知道数据库是用来持久化数据的,能够在需要的时候检索出我们需要的数据,然而随着数据越来越多,从海量的数据中查找出我们需要的数据,无异于大海捞针,费时又费力。很显然不是,因为它存在一个缺陷,那就是范围查询需要遍历整个数据,而往往数据库中的数据是海量的,这不合适。我们可以利用二分查找在O(logn)的代价下找到我们需要的值,又因为有序,针对范围查询也不过是O(logn)的代价,这很优秀,但是数组也有一个致命的问题,插入和删除某个元素,需要挪移位置,这代价很大,最坏的时候能够达到O(n)。

2024-08-09 21:50:50 367

原创 深入浅出Mysql 第三期

我认为有两种,一个经常被拿来举例的例子就是转账,比如用户A给用户B转账,这个业务至少需要两步,用户A的余额减去一个值,用户B的余额加上一个值,如果用户A的值成功修改后,这个时候数据库崩溃了,那么就出现了数据不一致的情况,即没有符合预期。之所以有隔离级别,其实就是。这个的加锁过程是这样的,针对写操作和读已提交一样,但是针对读操作,是不加锁的读。针对可重复读而言,在每个事务中,在执行SQL语句的时候,就会开始加锁,不过这个锁是读写锁,根据SQL语句的类型加对应的锁,比如是查询操作就加读锁,是写操作就加写锁。

2024-08-08 20:15:16 988

原创 深入浅出Mysql 第二期

所以当执行器调用存储引擎的写接口的时候,InnoDB只不过是记录了一条日志,即磁盘中的那一块数据发生了改变。准备工作完成之后,我们先来回顾一下Mysql的架构设计,在Server端,一条SQL的语句的执行流程是这样的,SQL语句从连接器到达解析器,解析器进行一定的语法分析与语义分析知道了这条SQL是干什么的,然后优化器进行优化处理,并知道了为了执行这条SQL,应该怎么一步一步来做,将这些步骤组合成一个执行计划,并把这个执行计划交给执行器来做,执行器将具体的需要和磁盘打交道的操作委派给了存储引擎。

2024-08-07 21:19:44 598

原创 大模型之Prompt

我相信AI大模型这个字你一定已经听烂了,那么在这篇文章中,咱们讲人话,聊聊大模型如何提高我们的效率以及如何更好的使用大模型。

2024-08-03 16:35:13 354

原创 深入浅出Mysql 第一期

上面的那张图片,展示了MySQL的全景图,总体而言,MySQL采用了C/S架构设计,客户端只负责发送指令和展示结果,大部分的功能都集中在Server端,而Server端也采用了我们都熟悉的分层架构,Server端具体被分为了两层,一个是Service层,主要负责管理客户端的连接,解析SQL,以及优化SQL,最后生成执行计划也就是完成一条SQL语句需要做哪些操作。然后这些操作的具体如何执行是由Storage层来完成的,而Storage层的设计很有意思,采用了插件式的设计,提供统一的抽象的数据存取的接口定义。

2024-07-28 18:13:57 789

原创 数据结构与算法

分治,乍一看觉得很高大上,但是它的思想无不在日常生活中体现,比如当你要完成一个很复杂的事情时,你一定会做任务拆解,把任务拆分成你可以做的程度,当这些任务都完成时,那个大的复杂的事情也就做完了。最重要的是后面两点,于是我们在求解递归问题的时候,需要先假设子问题已经解决,用解决好的子问题结果去组合出大问题的答案。而最难的就是将大问题拆分几个小问题的组合,这需要不断的练习,知道几个常见的拆分技巧。小规模问题的解法和大规模问题的解法一致,仅仅只是规模变了,换句话说,规模不影响解法。也就是我们常常说的寻找递推公式。

2024-07-18 20:30:51 174

原创 微服务架构-第三方调用

但是在软件开发中,有一个基本原则,永远不要相信别人的东西,也就是我们提倡的防御性编程,在对接第三方平台也不例外,第三方平台终究是别人的,你没有办法要求第三方平台保证高可用性,所以一般对接第三方平台的时候,我们都会抽象出一个层,比如对接第三方支付平台的时候,我们通常会在我们的系统中抽象出一个单独的模块来负责对这些第三方支付平台的对接功能,这其实是我们最熟悉的分层架构,这种架构设计将关注点分离,将变化隔离,即使后期需求发生改变,我们需要改动的也只是这个模块而已。这是一个对接模块最最基本的功能。

2024-07-13 10:16:46 357

原创 微服务可用性-超时控制

当然你也可以结合时间戳,比如在协议头中记录了调用服务B时的时间戳,然后当服务B接收到的时候,根据自己的时间减去协议头中记录的时间就可以得出传输耗费的时间,但是这个策略多此一举,与其这样,不如直接使用超时时间戳,还是这个例子,服务A调用服务B,当服务A接收到用户的请求时,根据这个业务的超时时间,记录超时时间戳,比如当前时间为9:30:40,这个业务的超时时间为1s,那么超时时间戳为9:30:41,将这个时间戳传递给服务B,服务B在执行业务的时候判断当前时间是否超过了这个时间戳就可以了。根据被调服务响应时间。

2024-07-12 09:55:50 625

原创 微服务可用性-降级

唯一不同的就是,降级会针对整个系统的服务进行等级划分,比如有些服务价值高那么等级就高,当很多很多请求来到这个价值高的服务时,它自身承受不住了,但是奈何它价值高,它有权力让那些价值低的服务让出资源,给它用。这就是我眼中的降级,那你眼中的呢?这是目前主流的降级策略,但是还有一种降级策略比较有意思,不仅服务分个三六九等,就连用户请求也可以分为三六九等,针对某个服务而言,当负载较大的时候,我们可以只处理VIP请求,拒绝普通请求,毕竟白嫖用户肯定比付费用户多。我需要说明的是,无论是降级还是熔断,他们都在尽力的保证。

2024-07-02 09:00:35 362

原创 并发工具包(上)

ReentrantLock 翻译过来叫做可重入锁?那什么叫可重入呢?try {//2try {// 1System.out.println("设置成功");仔细观察,write()方法,在重新赋值的时候,注释1处的代码,当前线程,已经获取了锁,然后在read()函数中,还要再次获取锁,如果是可重入锁,那么就不会阻塞到注释2处,如果是不可重入锁,就会阻塞到注释2处。简而言之,只要我有这个锁资源,其他利用这个锁保护临界区的地方,我都可以访问。大家都知道,

2024-05-10 14:41:22 827

原创 并发编程 理论篇

如果你只是做做简单的CRUD确实是这样的, 因为原本需要你处理的并发问题,交给了框架,交给了中间件,让你可以更加关注业务。先来聊聊线程的生命周期,从代码的声明需要一个线程,到操作系统真正创建完一个线程这段时间被称为初始状态,只要线程创建完毕,它就会进入到可运行状态,等待CPU资源,当线程获取到CPU资源后,就进入运行状态,如果CPU的时间片用完,就会回到可执行状态,如果在执行的过程中,需要IO操作,这个时候线程会进入到休眠状态,当条件满足时,线程又会从休眠状态回到可执行状态,等待CPU资源。

2024-04-28 10:22:37 569

原创 后端开发问题详解

跨域问题是HTTP为了解决用户的隐私问题而产生的,如果我们就是想要跨站点共享资源,可以试试官方的CORS规范,现在主流的框架都有对其的具体实现,不需要我们手动实现。然后解释了SpringBoot处理跨域请求时会遇到的一些问题即自定义拦截器和过滤器的时候。‍‍。

2024-03-31 20:53:00 295

原创 Maven&Gradle镜像配置

通常我们开发一个项目,都需要依赖别人的代码库,于是我们就有一个需求,我们需要统一管理这些依赖库,于是就出现了这两个依赖管理工具Maven以及Gradle.但是有许多常用的好用的代码库的远程地址在国外,国内访问会很慢,于是就有很多大公司搭建镜像服务,其实就是克隆一份到自己的服务器中,那么我们可以用大公司的镜像服务来提高访问下载速度。

2024-02-02 11:36:52 536 1

原创 算法通关村第一关——链表青铜挑战笔记

本项目开源:https://gitee.com/liwenhao12/alg。

2023-07-16 17:44:19 828 1

原创 一天一个小知识:KT高阶函数

具体逻辑交给外部,数据内部管理。

2022-09-17 09:52:31 293 1

原创 一天一个小知识:KT扩展

拿上面代码举例,如果我要在我的pandaer()函数中调用接收者类型的私有成员,是不可能的,因为底层实现限制了这一点,传递的是一个实实在在的接收者对象,所以所谓的扩展又是语法层面的,底层的实现就是一个静态方法(顶层扩展)这让我不禁想到一句话 理想是丰满的现实是骨感的。中 在真正的String类的源码设计中只保留最核心的逻辑,一些功能性的逻辑用扩展函数来代替了。所以无论是扩展方法还是扩展属性底层的实现都是静态方法(顶层扩展)因为底层的实现并不是真正的去扩展某个类,所以我们定义的扩展函数和扩展属性都。

2022-09-16 19:24:37 601

原创 一天一个小知识-- kt中的object关键字

object的本质:创建类的同时创建对象应用场景:匿名内部类 单例通过内部类单例实现了类方法和类属性。伴生对象的实现 让我们调用方认为是类的方法 而 嵌套object则是内部类的类方法和属性问个问题:为什么嵌套类(静态内部类)单例能实现和类方法和类属性的特性???答案。

2022-09-15 18:09:44 867

原创 Android老友记

欢迎大家关注我的Android老友记

2022-08-30 14:22:24 509

原创 Material_Design

Android Material Design今天就来谈谈 android 给我们提供的 Material 库的好用又好看的组件ToolBarToolBar这个是来替代ActionBar的具体的做法很简单:将主题的ActionBar设置为没有然后在需要ToolBar的地方 放在他的布局文件里 在他的创建视图的时候 调用 **setSupportActionBar(binding.toolbar) **这个方法就可以了传入的就是在布局文件里定义的ToolBar看代码

2022-04-17 17:30:38 2350

原创 kotlin杂谈系列十二(Kotlin和Java的互操作)

Kotlin杂谈系列十二这次就主要来谈谈kotlin和java互操作的问题kotlin出来的使命就是为了解决java的模板问题和一些冗长的问题所以kotlin天生就很好的支持了java 所以我们在java代码中可以很好的引用java的类库和代码 但是在java中调用kotlin的代码就没那么容易了首先讲讲编译过程,如果一个项目里有kotlin代码和java代码那么编译时 kotlin编译器会先为java代码存根来支持他们之间的依赖 然后在使用java编译器这样就能运行了 因为kotlin代

2022-04-12 16:56:27 797

原创 kotlin杂谈系列十一(可能有误)

Kotlin杂谈系列十一

2022-04-11 10:59:53 361 1

原创 kotlin杂谈系列十(浅谈)

Kotlin杂谈系列十(浅谈)

2022-04-10 08:22:12 238

原创 kotlin杂谈系列九

kotlin杂谈系列九(有点水)

2022-04-09 13:22:23 2140

原创 kotlin杂谈系列八

Kotlin杂谈系列八

2022-04-08 15:20:49 2969

原创 kotlin杂谈系列七

kotlin杂谈系列七

2022-04-07 11:34:00 2158

原创 kotlin杂谈系列六

Kotlin杂谈系列六

2022-04-05 10:49:47 631

原创 kotlin杂谈系列五

Kotlin杂谈系列五

2022-04-03 15:33:42 512

原创 kotlin杂谈系列四

Kotlin杂谈系列四

2022-04-02 21:21:02 865

原创 kotlin杂谈系列三

kotlin杂谈系列三

2022-04-02 10:16:16 1082

空空如也

空空如也

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

TA关注的人

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