程序员林小鹿_社区达人页

个人头像照片
程序员林小鹿
已加入开发者社区408
勋章 更多
个人头像照片
专家博主
专家博主
个人头像照片
星级博主
星级博主
个人头像照片
技术博主
技术博主
个人头像照片
江湖新秀
江湖新秀
成就
已发布61篇文章
1条评论
已回答4个问题
1条评论
已发布0个视频
github地址
技术能力
兴趣领域
  • Java
  • 算法
  • Kafka
  • Redis
  • Mysql
  • Spring
  • NoSQL
  • 消息中间件
  • SQL
擅长领域
技术认证

暂时未有相关云产品技术能力~

www.52algo.com
暂无精选文章
暂无更多信息

2024年03月

  • 03.13 15:53:09
    发表了文章 2024-03-13 15:53:09

    从0开始回顾JVM---系列五

    JVM调优 1、有哪些常用的命令行性能监控和故障处理工具? 操作系统工具 ● top:显示系统整体资源使用情况 ● vmstat:监控内存和CPU ● iostat:监控IO使用 ● netstat:监控网络使用 JDK性能监控工具 ● jps:虚拟机进程查看 ● jstat:虚拟机运行时信息查看 ● jinfo:虚拟机配置查看 ● jmap:内存映像(导出) ● jhat:堆转储快照分析 ● jstack:Java堆栈跟踪 ● jcmd:实现上面除了jstat外所有命令的功能 2、了解哪些可视化的性能监控和故障处理工具? 以下是一些JDK自带的可视化性能监控和故障处理工具: ● JCons
  • 03.13 15:52:19
    发表了文章 2024-03-13 15:52:19

    从0开始回顾JVM---系列四

    虚拟机执行 1、类的生命周期吗? 一个类从被加载到虚拟机内存中开始,到从内存中卸载,整个生命周期需要经过七个阶段:加载 、验证、准备、解析、初始化 、使用 和 卸载,其中验证、准备、解析三个部分统称为连接。 2、什么是类加载?类加载的过程? 类加载: 虚拟机把描述类的数据加载到内存里面,并对数据进行校验、解析和初始化,最终变成可以被虚拟机直接使用的class对象。 类加载过程如下: ● 加载:1、根据类的全限定类名获取二进制字节流;2、将字节流代表的静态存储结构转为方法区运行时存储数据结构;3、在堆中生成Class对象,作为方法区这个类数据访问入口; ● 验证: 检验加载的class文
  • 03.13 15:51:14
    发表了文章 2024-03-13 15:51:14

    从0开始回顾JVM---系列三

    20、有哪几种垃圾回收器,各自的优缺点是什么? ⚡ 垃圾回收器主要分为以下几种:Serial,Parallel,CMS,G1。 1. Serial ● 单线程垃圾回收器,该线程运行时,其他线程都暂停,使用复制算法; ● 使用场景: 堆内存较小,适合个人电脑(CPU核数较小); a. 工作在老年区,回收算法:标记整理;工作在新生代,回收算法:复制; b. 单线程的垃圾回收器,只有一个垃圾回收线程在运行; c. 垃圾回收线程结束后,其他线程恢复运行; d. 触发垃圾回收时让所有线程在安全点停下【在垃圾回收过程中,对象的地址可能发生改变,为了保证安全使用对象地址,要
  • 03.13 15:50:13
    发表了文章 2024-03-13 15:50:13

    从0开始回顾JVM---系列二

    11、什么情况下会发生内存泄露? 1. 静态集合类引起内存泄漏 ● 静态集合的生命周期和 JVM 一致,所以静态集合引用的对象不能被释放。 2. 单例模式 ● 单例对象在初始化后会以静态变量的方式在 JVM 的整个生命周期中存在。如果单例对象持有外部的引用,那么这个外部对象将不能被 GC 回收,导致内存泄漏。 3. 数据连接、IO、Socket等连接 ● 创建的连接不再使用时,需要调用 close 方法关闭连接,只有连接被关闭后,GC 才会回收对应的对象(Connection,Statement,ResultSet,Session)。忘记关闭这些资源会导致持续占有内存,无法被 GC 回收。 4
  • 03.13 15:49:07
    发表了文章 2024-03-13 15:49:07

    从0开始回顾JVM---系列一

    引言 1、什么是JVM? JVM——Java虚拟机,它是Java实现平台无关性的基石。 Java程序运行的时候,编译器将Java文件编译成平台无关的Java字节码文件(.class),接下来对应平台JVM对字节码文件进行解释,翻译成对应平台匹配的机器指令并运行。 同时JVM也是一个跨语言的平台,和语言无关,只和class的文件格式关联,任何语言,只要能翻译成符合规范的字节码文件,都能被JVM运行。 内存管理 1、什么是JVM内存结构? Java1.8 之后的内存结果图: JVM将虚拟机分为5大区域,程序计数器、虚拟机栈、本地方法栈、java堆、方法区,其中方法区和堆是线程共享区,虚拟
  • 03.13 12:53:13
    发表了文章 2024-03-13 12:53:13

    从0开始回顾Mybatis

    Mybatis 1、什么是Mybatis? 概念: 1. Mybatis 是一个半 ORM(对象关系映射)框架,它内部封装了 JDBC,开发时只需要关注 SQL 语句本身,不需要花费精力去处理加载驱动、创建连接、创建statement 等繁杂的过程。程序员直接编写原生态 sql,可以严格控制 sql 执行性能,灵活度高。 2. MyBatis 可以使用 XML 或注解来配置和映射原生信息,将 POJO 映射成数据库中的记录,避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。 缺点: 1. SQL语句的编写工作量较大,尤其当字段多、关联表多时,对开发人员编写SQL语句的功底有一定要求
  • 03.13 12:49:10
    发表了文章 2024-03-13 12:49:10

    从0开始回顾SpringMVC---系列一

    SpringMVC 1、什么是SpringMVC? SpringMVC是一个基于Java实现了MVC设计模式的请求驱动类型的轻量级Web框架,通过把Model,View,Controller分离,将web层进行职责解耦,把复杂的web应用分成逻辑清晰的及部分,简化开发,减少出错,方便组内开发人员之间的配合。 MVC ● Model(模型):数据模型,提供要展示的数据,因此包含数据和行为,可以认为是领域模型或JavaBean组件(包含数据和行为),不过现在一般都分离开来:Value Object(数据Dao)和服务层(行为Service)。也就是模型提供了模型数据查询和模型数据的状态更新等功能
  • 03.13 12:48:05
    发表了文章 2024-03-13 12:48:05

    从0开始回顾Spring---系列三

    AOP 1、什么是AOP? AOP概念: 面向切面编程,主要将一些与业务代码不相关,但却对多个对象产生影响的公共行为和逻辑,抽取到一个独立的模块中,让业务逻辑更加清爽。 AOP好处: AOP 可以将遍布应用各处的功能分离出来形成可重用的组件。 在编译期间、装载期间或运行期间实现在不修改源代码的情况下给程序动态添加功能。从而实现对业务逻辑的隔离,提高代码的模块化能力。 2、AOP实现原理? 实现 AOP 的技术,主要分为两大类: 静态代理 - 指使用 AOP 框架提供的命令进行编译,从而在编译阶段就可生成 AOP 代理类,因此也称为编译时增强; 动态代理 - 在运行时在内存中“临时”生成 AO
  • 03.13 12:46:29
    发表了文章 2024-03-13 12:46:29

    从0开始回顾Spring---系列一

    IOC 1、什么是IOC?什么是DI? IOC lOC:控制反转,以前创建对象的时候都需要自己手动的new,而现在创建对象的任务全部交给spring来管理,降低了对象之间的耦合,当我们需要使用这个对象的时候直接从IOC中获取就行了。 DI DI(依赖注入):指的是容器在实例化对象的时候把它依赖的类注入给它。 2、IOC的实现原理? Spring的IoC的底层实现原理是工厂模式+反射+XML配置文件 。即先写一个接口,再写该接口的一个实现类,通过解析XML配置文件获取该实现类的配置属性,在工厂类中使用反射机制得到实现类相应的对象。 3、 说说BeanFactory和ApplicantCon
  • 03.13 12:45:50
    发表了文章 2024-03-13 12:45:50

    从0开始回顾Spring---系列一

    基础 1、Spring是什么?有哪些特性? Spring是什么? ● Spring 是一个轻量级、非入侵式的控制反转 (IoC) 和面向切面 (AOP) 的框架。 Spring有哪些特性呢?(优点) 1. IOC 和 DI 的支持 ● Spring 的核心就是一个大的工厂容器,可以维护所有对象的创建和依赖关系,Spring 工厂用于生成 Bean,并且管理 Bean 的生命周期,实现高内聚低耦合的设计理念。 2. AOP 编程的支持 ● Spring 提供了面向切面编程,可以方便的实现对程序进行权限拦截、运行监控等切面功能。 3. 声明式事务的支持 ● 支持通过配置就来完成对事务的管理,而不
  • 03.13 12:44:36
    发表了文章 2024-03-13 12:44:36

    从0开始回顾数据结构---链表与堆

    #include <iostream> #include <algorithm> #include <string.h> using namespace std; const int N = 100010; int h[N], ph[N], hp[N], cnt; void heap_swap(int a, int b) { swap(ph[hp[a]],ph[hp[b]]); swap(hp[a], hp[b]); swap(h[a], h[b]); } void down(int u) { int t = u; if (u * 2 <= cnt &&
  • 03.13 12:41:15
    发表了文章 2024-03-13 12:41:15

    从0开始回顾数据结构---LRU,LFU算法

    题意解释 请为LFU缓存设计一个数据结构。支持两种操作:get和set。 ● get(key) : 如果key在缓存中,则返回key对应的值;否则返回-1; ● put(key, value): 如果key在缓存中,则更新key对应的值;否则插入(key, value),如果缓存已满,则先删除使用频率最小的key,如果有多个key具有相同的使用频率,则应该删除最久未使用的key。 C++代码 class LFUCache { public: struct Node { Node *left, *right; int key, val;
  • 03.13 12:35:22
    发表了文章 2024-03-13 12:35:22

    从0开始回顾MySQL---系列九

    SQL优化 1、一条sql语句执行很慢的原因有哪些? ⚡ 一个SQL执行的很慢,我们要分两种情况讨论: 1. 大多数情况下很正常,偶尔很慢,则有如下原因: ● 数据库在刷新脏页(内存数据页跟磁盘数据页内容不一致的时候,我们称这个内存页为“脏页),例如redo log 写满了需要同步到磁盘。 ● 执行的时候,遇到锁,如表锁、行锁。 ● sql语句写的不好。 2. 这条SQL语句一直执行的很慢,则有如下原因: ● 没有用上索引或者索引失效:比如该字段没有索引,由于对字段进行运算、函数操作导致无法用索引。 ● 有索引可能会走全表扫描: ○ 怎样判断是否走全表扫描? ○ 某
  • 03.13 12:34:46
    发表了文章 2024-03-13 12:34:46

    从0开始回顾MySQL---系列八

    分库分表 1、为什么要分库分表? 1. 数据库中的数据量不一定是可控的,随着时间和业务的发展,库中的表会越来越多,表中的数据量也会越来越大,相应地数据操作,例如 增删改查的开销 也会越来越大;另外,若不进行分布式部署,而一台服务器的 资源 (CPU、磁盘、内存、IO 等)是有限的,最终数据库所能承载的数据量、数据处理能力都将遭遇瓶颈。 2. 所以,从 性能 和 可用性 角度考虑,会进行数据库拆分处理,具体地说,把原本存储于一个库的数据分块存储到多个库上,把原本存储于一个表的数据分块存储到多个表上,即 分库分表。 2、分库分表的具体实施策略 分库分表有 垂直切分 和 水平切分 两种方式,在
  • 03.13 12:33:26
    发表了文章 2024-03-13 12:33:26

    从0开始回顾MySQL---系列七

    锁 1、为什么要加锁? 1. 当多个用户并发地存取数据时,在数据库中就会产生多个事务同时存取同一数据的情况,若对并发操作不加控制就可能会读取和存储不正确的数据,破坏数据库的一致性。 2. 因此加锁是为了在多用户环境下保证数据库完整性和一致性。 2、MySQL都有哪些锁呢? 锁的分类: ● 按操作分类: ○ 共享锁:也叫读锁。对同一份数据,多个事务读操作可以同时加锁而不互相影响 ,但不能修改数据 ○ 排他锁:也叫写锁。当前的操作没有完成前,会阻断其他操作的读取和写入 ● 按粒度分类: ○ 表级锁:会锁定整个表,开销小,加锁快;不会出现死锁;锁定力度大,发生锁冲突概率高,并
  • 03.13 12:32:49
    发表了文章 2024-03-13 12:32:49

    从0开始回顾MySQL---系列六

    11、什么是MVCC? MVCC 全称 Multi-Version Concurrency Control,即多版本并发控制,用来解决读写冲突的无锁并发控制,可以在发生读写请求冲突时不用加锁解决,这个读是指的快照读(也叫一致性读或一致性无锁读),而不是当前读: ● 快照读:实现基于 MVCC,因为是多版本并发,所以快照读读到的数据不一定是当前最新的数据,有可能是历史版本的数据; ● 当前读:读取数据库记录是当前最新的版本(产生幻读、不可重复读),可以对读取的数据进行加锁,防止其他事务修改数据,是悲观锁的一种操作,读写操作加共享锁或者排他锁和串行化事务的隔离级别都是当前读。 -- 简单的sel
  • 03.13 12:32:02
    发表了文章 2024-03-13 12:32:02

    从0开始回顾MySQL---系列五

    事务 1、什么是数据库事务? 事务(Transaction)是访问和更新数据库的程序执行单元,是逻辑上的一组操作,要么都执行,要么都不执行。如果任意一个操作失败,那么整组操作即为失败,会回到操作前状态或者是上一个节点。 因此,事务是保持 逻辑数据一致性 和 可恢复性 的重要利器。而锁是实现事务的关键,可以保证事务的完整性和并发性。 事务控制语句: ● BEGIN 或 START TRANSACTION 显式地开启一个事务; ● COMMIT 也可以使用 COMMIT WORK,不过二者是等价的。COMMIT 会提交事务,并使已对数据库进行的所有修改成为永久性的; ● ROLLBAC
  • 03.13 12:30:50
    发表了文章 2024-03-13 12:30:50

    从0开始回顾MySQL---系列四

    9、什么是回表(使用索引查询完整数据过程)? 当我们需要查询一条完整的数据的时候: ● 如果是通过聚簇索引来查询数据,例如 select * from user where id=100,那么此时只需要搜索聚簇索引的 B+Tree 就可以找到数据。 ● 如果是通过非聚簇索引来查询数据,例如 select * from user where username=zhangsan',那么此时需要先搜索 username 这一列索引的 B+树,搜索完成后得到主键的值,然后再去搜索聚簇索引的 B+树,就可以获取到一行完整的数据。 对于第二种查询方式而言,一共搜索了两棵 B+树,第一次搜索 B+树 拿到
  • 03.13 12:29:40
    发表了文章 2024-03-13 12:29:40

    从0开始回顾MySQL---系列三

    索引 1、没有索引如何查找数据? 在一个页中的查找,分为两种情况: 以主键为搜索条件 可以在 页目录 中使用二分法快速定位到对应的槽,然后再遍历该槽对应 分组中的记录即可快速找到指定的记录。 以其他列作为搜索条件 对非主键列的查找的过程可就不这么幸运了,因为在数据页中并没有对非主键列建立所谓的 页目录 ,所以 我们无法通过二分法快速定位相应的 槽 。这种情况下只能从 最小记录 开始依次遍历单链表中的每条记录, 然后对比每条记录是不是符合搜索条件。很显然,这种查找的效率是非常低的。 在很多页中的查找,可以分为两个步骤: 定位到记录所在的页。 从所在的页内中查找相应的记录。 在没有索引的情
  • 03.13 12:28:22
    发表了文章 2024-03-13 12:28:22

    从0开始回顾MySQL---系列二

    InnoDB记录结构 1、InnoDB行格式 ? ● 我们平时是以记录为单位来向表中插入数据的,这些记录在磁盘上的存放方式也被称为 行格式 或者 记录格式 。 ● 设计InnoDB 存储引擎的作者到现在为止设计了4种不同类型的 行格式 ,分别是 Compact 、Redundant 、Dynamic 和 Compressed 行格式。 2、COMPACT行格式 ? 一条完整的记录其实可以被分为 记录的额外信息 和 记录的真实数据 两大部分。 记录的额外信息 这部分信息是服务器为了描述这条记录而不得不额外添加的一些信息,这些额外信息分为3类,分别是 变长字段长度列表 、 NULL值列表 和
  • 03.13 12:27:16
    发表了文章 2024-03-13 12:27:16

    从0开始回顾MySQL---系列一

    基础 1、数据库的三范式是什么? 数据库范式是设计数据库时,需要遵循的一些规范。各种范式是条件递增的联系,越高的范式数据库冗余越小。常用的数据库三大范式为: 1. 第一范式(1NF):每个列都不可以再拆分,强调的是列的原子性,即数据库表的每一列都是不可分割的原 子数据项。 2. 第二范式(2NF):在满足第一范式的基础上,非主属性完全依赖于主码(主关键字、主键),消除非主属性对主码的部分函数依赖。 3. 第三范式(3NF):在满足第二范式的基础上,表中的任何属性不依赖于其它非主属性,消除传递依赖。简而言之,非主键都直接依赖于主键,而不是通过其它的键来间接依赖于主键。 2、MySQL 支持哪
  • 03.13 12:25:55
    发表了文章 2024-03-13 12:25:55

    从0开始回顾Redis---系列十一

    数据统计 1、数据统计场景 在Web和移动应用的业务场景中, 除了记录信息,我们往往还需要对集合中的数据进行统计,例如: ● 在移动应用中,需要统计每天的新增用户数和第二天的留存用户数; ● 在电商网站的商品评论中,需要统计评论列表中的最新评论; ● 在签到打卡中,需要统计一个月内连续打卡的用户数; ● 在网页访问记录中,需要统计独立访客(Unique Visitor,UV)量。 通常情况下,我们面临的用户数量以及访问量都是巨大的,比如百万、千万级别的用户数量,或者千万级别、甚至亿级别的访问信息。所以,我们必须要选择能够非常高效地统计大量数据(例如亿级)的集合类型。 2、常用的集合
  • 03.13 12:25:07
    发表了文章 2024-03-13 12:25:07

    从0开始回顾Redis---系列十

    布隆过滤器 1、讲一讲布隆过滤器? 布隆过滤器,它是一个连续的数据结构,每个存储位存储都是一个bit,即0或者1, 可以用来快速判断某个数据是否存在。 标记某个数据时: 我们使用K个不同的哈希函数将这个数据映射为bit数组上的K个点,并把它们置为1。 查询某个数据时:先使用K个哈希函数得到这个数据在bit数组中对应的k个位置 ,然后判断bit值是不是1: ● 只要有一个不是1,就说明布隆过滤器没有对该数据做过标,即该数据不存在 ; ● 如果都是1,也只是表示数据可能存在。 优点: 1. 布隆过滤器的查询速度很快,一般只需要几毫秒; 2. 布隆过滤器只需要很少的空间,因为它只是一个位数组。
  • 03.13 12:24:11
    发表了文章 2024-03-13 12:24:11

    从0开始回顾Redis---系列九

    事务 1、Redis能实现ACID属性吗? ACID 1. 原子性: 一个事务中的多个操作必须都完成,或者都不完成。 2. 一致性: 数据库中的数据在事务执行前后是一致的。 3. 隔离性: 数据库在执行一个事务时,其它操作无法存取到正在执行事务访问的数据。 4. 持久性: 数据库执行事务后,数据的修改要被持久化保存下来。当数据库重启后,数据的值需要是被修改后的值。 Redis的事务机制可以保证一致性和隔离性,但是无法保证持久性。不过,因为Redis本身是内存数据库,持久性并不是一个必须的属性,我们更加关注的还是原子性、一致性和隔离性这三个属性。 原子性的情况比较复杂,只有当事务中使
  • 03.13 12:23:32
    发表了文章 2024-03-13 12:23:32

    从0开始回顾Redis---系列八

    缓存 1、缓存穿透? 缓存穿透是指缓存和数据库中都没有的数据,而用户不断发起请求,如发起为id为“-1”的数据或id为特别大不存在的数据。这时的用户很可能是攻击者,攻击会导致数据库压力过大。 解决方案: 1. 接口校验:在正常业务流程中可能会存在少量访问不存在 key 的情况,但是一般不会出现大量的情况,所以这种场景最大的可能性是遭受了非法攻击。可以在最外层先做一层校验:用户鉴权、数据合法性校验等,例如商品查询中,商品的ID是正整数,则可以直接对非正整数直接过滤等等。 2. 缓存空值:当访问缓存和DB都没有查询到值时,可以将空值写进缓存,但是设置较短的过期时间,该时间需要根据产品业务特性来
  • 03.13 12:22:33
    发表了文章 2024-03-13 12:22:33

    从0开始回顾Redis---系列七

    切片集群 1、为什么要集群? 在实际应用Redis时,随着用户或业务规模的扩展,保存大量数据的情况通常是无法避免的。 我们可以用两种方案: 1. 纵向扩展:升级单个Redis实例的资源配置,包括增加内存容量、增加磁盘容量、使用更高配置的CPU。 2. 横向扩展:横向增加当前Redis实例的个数 。 那么,这两种方式的优缺点分别是什么呢? 1. 纵向扩展: ● 优点:实施起来简单、直接。 ● 缺点: ○ 当使用RDB对数据进行持久化时,如果数据量增加,需要的内存也会增加,主线程fork子进程时就可能会阻塞(比如刚刚的例子中的情况) ○ 纵向扩展会受到硬件和成本的限制。 2.
  • 03.13 12:21:46
    发表了文章 2024-03-13 12:21:46

    从0开始回顾Redis---系列六

    哨兵机制 1、什么是哨兵,哨兵的作用是什么? 哨兵其实就是一个运行在特殊模式下的Redis进程,主从库实例运行的同时,它也在运行。哨兵主要负责的就是三个任务:监控、选主(选择主库)和通知。 ● 监控:哨兵进程在运行时,周期性地给所有的主从库发送PING命令,检测它们是否仍然在线运行。如果从库没有在规定时间内响应哨兵的PING命令,哨兵就会把它标记为“下线状态”;同样,如果主库也没有在规定时间内响应哨兵的PING命令,哨兵就会判定主库下线,然后开始自动切换主库的流程。 ● 选主:主库挂了以后,哨兵就需要从很多个从库里,按照一定的规则选择一个从库实例,把它作为新的主库。这一步完成后,现在的集群里
  • 03.13 12:21:06
    发表了文章 2024-03-13 12:21:06

    从0开始回顾Redis---系列五

    主从复制 1、什么是Redis主从复制? ● 主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(master),后者称为从节点(slave);数据的复制是单向的,只能由主节点到从节点。 ● 默认情况下,每台Redis服务器都是主节点;且一个主节点可以有多个从节点(或没有从节点),但一个从节点只能有一个主节点。 2、主从复制有哪些好处? ● 读写分离:master 写、slave 读,提高服务器的读写负载能力; ● 负载均衡:基于主从结构,配合读写分离,由 slave 分担 master 负载,并根据需求的变化,改变 slave 的数量,通过多个从节点分担
  • 03.13 12:20:15
    发表了文章 2024-03-13 12:20:15

    从0开始回顾Redis---系列四

    数据结构 1、讲一讲Redis数据类型及底层数据结构? Redis 的五大常用数据类型:String(字符串)、List(列表)、Hash(哈希)、Set(集合)和Sorted Set(有序集合) 1.1 String(SDS) 简介 ● 是 Redis 最基本的数据类型,普通的key- value 存储都可以归为此类。二进制安全的,可以包含任何数据,比如 JPG 图片或者序列化的对象,最大能存储 512 MB。 应用场景:计数的场景,用户的访问次数、热点文章的点赞转发数量。 底层实现:String对象底层的数据结构实现主要是 int 和简单动态字符串 SDS。 struct sdshdr{
  • 03.13 12:18:53
    发表了文章 2024-03-13 12:18:53

    从0开始回顾Redis---系列三

    数据结构 1、讲一讲Redis数据类型及底层数据结构? Redis 的五大常用数据类型:String(字符串)、List(列表)、Hash(哈希)、Set(集合)和Sorted Set(有序集合) 1.1 String(SDS) 简介 ● 是 Redis 最基本的数据类型,普通的key- value 存储都可以归为此类。二进制安全的,可以包含任何数据,比如 JPG 图片或者序列化的对象,最大能存储 512 MB。 应用场景:计数的场景,用户的访问次数、热点文章的点赞转发数量。 底层实现:String对象底层的数据结构实现主要是 int 和简单动态字符串 SDS。 struct sdshdr{
  • 03.13 12:17:14
    发表了文章 2024-03-13 12:17:14

    从0开始回顾Redis---系列二

    Redis单线程 1、单线程Redis为什么这么快? 1. 单线程实现:避免了多线程编程模式面临的共享资源的并发访问控制问题,比如线程切换和锁资源争用的开销。 2. 内存存储:Redis是使用内存存储,没有磁盘IO上的开销。 3. 高效的数据结构: 采用了高效的数据结构,例如哈希表和跳表,这是它实现高性能的一个重要原因。 4. 采用多路复用机制:使其在网络IO操作中能并发处理大量的客户端请求,实现高吞吐率。 2、基于多路复用的高性能I/O模型 多路复用机制是指一个线程处理多个IO流,就是我们经常听到的select/epoll机制。简单来说,在Redis只运行单线程的情况下,该机制允许内
  • 03.13 12:16:08
    发表了文章 2024-03-13 12:16:08

    从0开始回顾Redis---系列一

    基础 1、Redis是什么?简述它的优缺点? Redis是用 C 语言开发的一个开源的高性能键值对(key-value)内存数据库。经常被用来做缓存,消息队列,分布式锁。 Redis 提供了多种数据类型来支持不同的业务场景,如 字符串(strings),散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets)与范围查询。 Redis 还支持事务 、持久化、Lua 脚本、多种集群方案。 优点: ● 读写性能极高, Redis能读的速度是110000次/s,写的速度是81000次/s。 ● 支持数据持久化,支持AOF和RDB两种持久化方式。 ●
  • 03.13 12:14:06
    发表了文章 2024-03-13 12:14:06

    从0开始回顾Linux---系列二

    traceroute命令:traceroute命令可以用来查看数据包到达目标主机的路径。使用方法为:traceroute [选项] 目标主机。例如,要查看与百度服务器的连通性,可以使用traceroute www.baidu.com命令。
  • 03.13 12:11:11
    发表了文章 2024-03-13 12:11:11

    从0开始回顾Linux---系列一

    Linux的目录结构 ● bin (binaries)存放二进制可执行文件 ● sbin (super user binaries)存放二进制可执行文件,只有root才能访问 ● etc (etcetera)存放系统配置文件 ● usr (unix shared resources)用于存放共享的系统资源 ● home 存放用户文件的根目录 ● root 超级用户目录 ● dev (devices)用于存放设备文件 ● lib (library)存放跟文件系统中的程序运行所需要的共享库及内核模块 ● mnt (mount)系统管理员安装临时文件系统的安装点 ● boot 存放用于
  • 03.13 12:09:49
    发表了文章 2024-03-13 12:09:49

    从0开始回顾操作系统---系列六

    IO多路复用 1、讲一讲IO多路复用? IO多路复用模型指的是:使用单个进程/线程同时处理多个网络连接IO,他的原理就是select、poll、epoll 不断轮询所负责的所有 socket,当某个socket有数据到达了,就通知用户进程。该模型的优势并不是对于单个连接能处理得更快,而是在于能处理更多的连接。 2、select、poll 和 epoll 之间的区别 1. select:时间复杂度 O(n) ● select 仅仅知道有 I/O 事件发生,但并不知道是哪几个流,所以只能无差别轮询所有流,找出能读出数据或者写入数据的流,并对其进行操作。所以 select 具有 O(n) 的无差
  • 03.13 12:08:48
    发表了文章 2024-03-13 12:08:48

    从0开始回顾操作系统---系列五

    文件管理 1、虚拟文件系统? ● 文件系统的种类众多,而操作系统希望对用户提供一个统一的接口,于是在用户层与文件系统层引入了中间层,这个中间层就称为虚拟文件系统(Virtual File System,VFS)。 ● VFS 定义了一组所有文件系统都支持的数据结构和标准接口,这样程序员不需要了解文件系统的工作原理,只需要了解 VFS 提供的统一接口即可。 2、硬链接和软链接有什么区别? ● 硬链接就是在目录下创建一个条目,记录着文件名与 inode 编号,这个 inode 就是源文件的 inode。删除任意一个条目,文件还是存在,只要引用数量不为 0。但是硬链接有限制,它不能跨越文件系统,也不
  • 03.13 12:07:50
    发表了文章 2024-03-13 12:07:50

    从0开始回顾操作系统---系列四

    内存管理 1、什么是内存管理 操作系统对内存的划分和动态分配就是内存管理,主要可以分为: ● 内存空间的扩充(实现虚拟性) ● 内存空间的分配与回收 ● 地址转换:操作系统负责实现逻辑地址到物理地址的转换 ● 存贮保护:保证各进程在自己的内存空间内运行,不会越界访问 2、内存管理机制和内存管理方式有哪些? 1. 分块管理 ● 是连续管理的一种,把内存分为几个大小相等且固定的块,每个进程占用其中一个,如果进程很小的话,会浪费大量的空间。已经淘汰。 2. 分页管理 ● 把内存分为若干个很小的页面,相对比分块的划分力度更大一些。提高内存利用率。减少碎片,页式管理通过页表对应逻辑地址和物理地址。
  • 03.13 12:06:42
    发表了文章 2024-03-13 12:06:42

    从0回顾操作系统---系列三

    死锁与活锁 1、什么是死锁?死锁产生的条件? 什么是死锁: ● 在两个或者多个并发进程中,如果每个进程持有某种资源而又等待其它进程释放它或它们现在保持着的资源,在未改变这种状态之前都不能向前推进,称这一组进程产生了死锁。 ● 通俗的讲就是两个或多个进程无限期的阻塞、相互等待的一种状态。 死锁产生的四个必要条件:(有一个条件不成立,则不会产生死锁) ● 互斥条件:一个资源一次只能被一个进程使用; ● 请求与保持条件:一个进程因请求资源而阻塞时,对已获得资源保持不放; ● 不剥夺条件:进程获得的资源,在未完全使用完之前,不能强行剥夺; ● 循环等待条件:若干进程之间形成一种头尾相接的环形等待资源关
  • 03.13 12:05:47
    发表了文章 2024-03-13 12:05:47

    从0开始回顾操作系统---系列二

    进程管理 1、进程和线程的区别? 进程:一个正在运行中的程序就是一个进程,进程包括程序段、数据段、PCB三部分。 ● 程序段就是程序的代码; ● 数据段就是程序运行时产生的数据(比如全局变量、局部变量等); ● PCB中包含操作系统对其进行管理的各种信息(如进程标识符PID,进程当前状态,进程优先级) 线程:线程是属于进程的,是一个基本的 CPU 执行单元,是程序执行流的最小单元。 主要区别如下: ● 调度:进程是资源分配的基本单位,线程是程序执行的基本单位。 ● 开销:线程上下文切换开销小,进程线程间切换开销大。 ● 切换: 同一进程间线程切换不会引起进程切换,不同进程间线程切换会引
  • 03.13 12:04:55
    发表了文章 2024-03-13 12:04:55

    从0开始回顾操作系统---系列一

    概述 1、什么是操作系统 ● 操作系统简称OS,负责管理协调计算机硬件与软件资源工作的系统软件。 ● 屏蔽了硬件层的复杂性,为上层应用软件与用户提供易用的服务。 2、操作系统主要有哪些功能? 操作系统最主要的功能: ● 处理器(CPU)管理:CPU的管理和分配,主要指的是进程管理。 ● 内存管理:内存的分配和管理,主要利用了虚拟内存的方式。 ● 外存管理:外存(磁盘等)的分配和管理,将外存以文件的形式提供出去。 ● I/O管理:对输入/输出设备的统一管理。 除此之外,还有保证自身正常运行的健壮性管理,防止非法操作和入侵的安全性管理。 3、什么是系统调用?有哪几类? 根据进程访问资源的特点,
  • 03.13 12:03:42
    发表了文章 2024-03-13 12:03:42

    从0开始回顾计算机网络---系列五

    数据链路层 1、数据链路层常见协议? 协议 名称 作用 ARP 地址解析协议 根据IP地址获取物理地址 RARP 反向地址转换协议 根据物理地址获取IP地址 PPP 点对点协议 主要是用来通过拨号或专线方式建立点对点连接发送数据,使其成为各种主机、网桥和路由器之间简单连接的一种共通的解决方案 2、MAC地址、IP地址以及ARP协议? ● MAC地址是以太网的MAC子层所使用的地址; ● IP地址是TCP/IP体系结构网际层所使用的地址; ● ARP协议属于TCP/IP体系结构的网际层,其作用是已知设备所分配到的IP地址,使用ARP协议可以通过该IP地址获取到设备的MAC地址; 3、MAC地址是
  • 03.13 12:02:55
    发表了文章 2024-03-13 12:02:55

    从0开始回顾计算机网络---系列四

    网络层 1、IP 协议的定义和作用? 1. IP协议(Internet Protocol)又被称为互联网协议,是支持网间互联的数据包协议,工作在网际层,主要目的就是为了提高网络的可扩展性。 2. 通过网际协议IP,可以把参与互联的,性能各异的网络看作一个统一的网络。 3. 和传输层TCP相比,IP协议是一种无连接/不可靠、尽力而为的数据包传输服务,和TCP协议一起构成了TCP/IP协议的核心。 2、IP协议有哪些作用? IP协议主要有以下几个作用: ● 寻址和路由:在IP数据报中携带源IP地址和目的IP地址来表示该数据包的源主机和目标主机。IP数据报在传输过程中,每个中间节点(IP网关、路由
  • 03.13 12:02:06
    发表了文章 2024-03-13 12:02:06

    从0开始回顾计算机网络---系列三

    传输层 1、TCP首部格式? 源端口: 占16比特,写入源端口号,用来标识发送该TCP报文段的应用进程。 目的端口: 占16比特,写入目的端口号,用来标识接收该TCP报文段的应用进程。 序号: 占32比特,取值范围[0,2^32-1],序号增加到最后一个后,下一个序号就又回到0。指出本TCP报文段数据载荷的第一个字节的序号。 确认号: 占32比特,取值范围[0,2^32-1],确认号增加到最后一个后,下一个确认号就又回到0。指出期望收到对方下一个TCP报文段的数据载荷的第一个字节的序号,同时也是对之前收到的所有数据的确认。若确认号=n,则表明到序号n-1为止的所有数据都已正确接收,期望接收序
  • 03.13 12:00:57
    发表了文章 2024-03-13 12:00:57

    从0开始回顾计算机网络---系列二

    应用层 1、HTTP常见状态码? 分类 分类 范围 描述 1xx 信息响应(100-199) 代表请求已被接受,需要继续处理。这类响应是临时响应,只包含状态行和某些可选的响应头信息,并以空行结束。 2xx 成功响应(200-299) 代表请求已成功被服务器接收、理解、并接受 。 3xx 重定向(300-399) 表示要完成请求,需要进一步操作。通常,这些状态代码用来重定向 4xx 客户端错误(400-499) 代表了客户端看起来可能发生了错误,妨碍了服务器的处理。 5xx 服务器错误(500-599) 表示服务器无法
  • 03.13 11:59:43
    发表了文章 2024-03-13 11:59:43

    从0开始回顾计算机网络---系列一

    基础 1、网络模型(OSI七层模型,TCP/IP四层模型、五层模型、各层协议以及作用) 网络模型 ● 七层模型: 应用层(Http、FTP)、表示层(Telnet)、会话层(DNS)、传输层、网络层、数据链路层、物理层。 ● 五层模型: 应用层(http、DNS、FTP、SMTP、telnet)、传输层(TCP、UDP)、网络层(IP.ICMP、ARP)、数据链路层(ppp)、物理层。 ● TCP/IP四层模型: 应用层,传输层,网际层,网络接口层。 作用: ● 应用层:解决通过应用进程之间的交互来实现特定网络应用的问题 ● 表示层:解决通信双方交换信息的表示问题 ● 会话层:解决进程之间进
  • 03.13 11:57:59
    发表了文章 2024-03-13 11:57:59

    从0开始回顾Kafka---系列三

    消费者只能拉取到这个 offset 之前的消息。
  • 03.13 11:55:31
    发表了文章 2024-03-13 11:55:31

    从0开始回顾Kafka---系列二

    生产者 1、 Kafka 中的分区器、序列化器、拦截器是否了解?它们之间的处理顺序是什么? 分区器 ● 消息经过序列化之后就需要确定它发往的分区,如果消息 ProducerRecord 中指定了 partition 字段,那么就不需要分区器的作用,因为 partition 代表的就是所要发往的分区号。 ● 如果消息 ProducerRecord 中没有指定 partition 字段,那么就需要依赖分区器,根据 key 这个字段来计算 partition 的值。分区器的作用就是为消息分配分区。 序列化器 ● 生产者需要用序列化器(Serializer)把对象转换成字节数组才能通
  • 03.13 11:54:30
    发表了文章 2024-03-13 11:54:30

    从0开始回顾Kafka---系列一

    2、 Kafka有哪些优点和缺点? 优点: 1. 高吞吐量、低延迟:kafka每秒可以处理几十万条消息,它的延迟最低只有几毫秒。 2. 可扩展性:kafka集群支持水平扩展。 3. 持久性、可靠性:消息被持久化到本地磁盘,并且支持数据备份防止数据丢失。 4. 容错性:允许集群中节点故障(若副本数量为n,则允许n-1个节点故障)。 5. 高并发:支持数千个客户端同时读写。 缺点: 1. 同步收发消息的响应时延比较高,因为当客户端发送一条消息的时候,Kafka 并不会立即发送出去,而是要等一会儿攒一批再发送。 2. Kafka 不太适合在线业务场景,由于是批量发送,所以数据达不到真正的实时。 3.
  • 03.13 11:36:42
    发表了文章 2024-03-13 11:36:42

    从0开始回顾Java---系列九

    TreeMap 1、TreeMap 有什么特点? 1. TreeMap是基于红黑树的一种提供顺序访问的Map,增删改查的平均和最差时间复杂度均为 O(logn) ,最大特点是 Key 有序。 2. Key 必须实现 Comparable 接口或提供的 Comparator 比较器,所以 Key 不允许为 null。 3. TreeMap是一个线程不安全,有序的键值对集合,因为TreeMap实现了SotredMap接口。 4. TreeMap实现了Cloneable接口,可被克隆,实现了Serializable接口,可序列化; 2、讲讲 TreeMap 怎么实现有序的? TreeMap
  • 03.13 11:35:34
    发表了文章 2024-03-13 11:35:34

    从0开始回顾Java---系列八

    HashMap 1、HashMap 有什么特点? HashMap 基于哈希表的 Map 接口实现,是以 key-value 存储形式存在,主要用来存放键值对。 特点: ● HashMap 的实现不是同步的,这意味着它不是线程安全的 ● key 是唯一不重复的,底层的哈希表结构,依赖 hashCode 方法和 equals 方法保证键的唯一 ● key、value 都可以为null,但是 key 位置只能是一个null ● HashMap 中的映射不是有序的,即存取是无序的 ● key 要存储的是自定义对象,需要重写 hashCode 和 equals 方法,防止出现地址不同内
  • 发表了文章 2024-03-13

    从0开始回顾JVM---系列五

  • 发表了文章 2024-03-13

    从0开始回顾JVM---系列四

  • 发表了文章 2024-03-13

    从0开始回顾JVM---系列三

  • 发表了文章 2024-03-13

    从0开始回顾JVM---系列二

  • 发表了文章 2024-03-13

    从0开始回顾JVM---系列一

  • 发表了文章 2024-03-13

    从0开始回顾Mybatis

  • 发表了文章 2024-03-13

    从0开始回顾SpringMVC---系列一

  • 发表了文章 2024-03-13

    从0开始回顾Spring---系列三

  • 发表了文章 2024-03-13

    从0开始回顾Spring---系列一

  • 发表了文章 2024-03-13

    从0开始回顾Spring---系列一

  • 发表了文章 2024-03-13

    从0开始回顾数据结构---链表与堆

  • 发表了文章 2024-03-13

    从0开始回顾数据结构---LRU,LFU算法

  • 发表了文章 2024-03-13

    从0开始回顾MySQL---系列九

  • 发表了文章 2024-03-13

    从0开始回顾MySQL---系列八

  • 发表了文章 2024-03-13

    从0开始回顾MySQL---系列七

  • 发表了文章 2024-03-13

    从0开始回顾MySQL---系列六

  • 发表了文章 2024-03-13

    从0开始回顾MySQL---系列五

  • 发表了文章 2024-03-13

    从0开始回顾MySQL---系列四

  • 发表了文章 2024-03-13

    从0开始回顾MySQL---系列三

  • 发表了文章 2024-03-13

    从0开始回顾MySQL---系列二

正在加载, 请稍后...
滑动查看更多
  • 回答了问题 2024-03-13

    你会在Vision Pro里编程吗?

    作为一位开发者,我认为将Vision Pro应用到编程中是一个非常有趣和前沿的想法。这种全新的交互方式可以为开发者带来全新的编程体验,激发创造力,提高工作效率。然而,同时也可能带来一些挑战和适应期。

    将Vision Pro应用到编程中的优势:

    沉浸式体验:通过Vision Pro,开发者可以进入一个全新的三维编程空间,与代码进行更直观、互动的交流,这种沉浸式体验可能会激发创造力,提高工作效率。

    空间感知:在三维空间中编程,开发者可以更直观地理解代码结构和关联,通过拖动、重新排列代码窗口等操作,更快地进行代码调整和优化。

    协作与交流:Vision Pro可能提供更便捷的协作方式,多位开发者可以在同一个虚拟空间中进行实时交流和协作,促进团队合作和代码审查。

    可能的挑战和适应期:

    视觉疲劳:长时间在Vision Pro上查看和编写代码可能导致视觉疲劳,需要适应新的工作方式和习惯。

    学习曲线:使用Vision Pro进行编程可能需要一定的学习曲线,开发者需要花时间适应新的交互方式和工具。

    Vision Pro对改变开发者工作模式与效率的影响:

    改变工作模式:Vision Pro有可能改变开发者的工作模式,使其更加沉浸式、直观化,提高创造力和工作体验。

    提高工作效率:通过更直观的交互方式和空间感知,Vision Pro有可能提高开发者的工作效率,加快代码编写和调试的速度。

    踩0 评论0
  • 回答了问题 2024-03-13

    让 AI 写代码,能做出什么样的项目?

    image.png

    用过ai的大概都了解,写算法是非常薄弱的,经常出现各种各样的问题,但是通义灵码惊艳了我

    踩0 评论1
  • 回答了问题 2024-03-13

    国产算力土壤之上,能孕育出怎样的AI创新之花?

    作为一个国产算力平台,要助力国内AI走得更高更远,可能需要经历以下磨砺和革新:

    提升算力规模和性能:国产算力平台需要不断提升规模和性能,以支持更大规模、更复杂的AI模型训练和推理任务。这包括增加计算节点数量、提高计算效率,以及优化算法和架构,以实现更快的训练速度和更高的精度。

    加强数据安全和隐私保护:随着AI应用的普及,数据安全和隐私保护变得尤为重要。国产算力平台需要加强数据安全措施,确保用户数据得到充分保护,并遵守相关法律法规,增强用户信任度。

    推动AI算法研究和创新:国产算力平台可以积极支持本土AI算法研究和创新,促进学术界和产业界的合作,推动前沿AI技术的发展。通过开展AI算法竞赛、提供算法开发工具和资源等方式,激发创新活力。

    加强人才培养和团队建设:人才是推动AI发展的核心力量,国产算力平台需要加强人才培养和团队建设,吸引优秀的科研人才和工程师加入,建立高效协作机制,培养具有国际竞争力的团队。

    在国产算力平台的土壤之上,可以孕育出各种AI创新之花,例如:

    自主研发的AI算法:通过国产算力平台的支持,国内研究人员可以开展自主研究,探索新颖的AI算法和模型结构,为各行业带来更有效的解决方案。

    定制化AI解决方案:国产算力平台可以根据国内行业需求和特点,提供定制化的AI解决方案,帮助企业实现智能化转型,提升竞争力。

    AI+产业融合创新:国产算力平台可以与各行业深度合作,推动AI技术在制造业、医疗健康、农业等领域的应用,实现产业升级和创新发展。

    踩0 评论0
  • 回答了问题 2024-03-13

    人工智能大模型如何引领智能时代的革命?

    人机交互革命:大模型如何提升我们与机器沟通的自然性和智能化程度?

    大模型通过深度学习和自然语言处理技术,使得机器能够更好地理解人类的语言和意图。这不仅提高了用户的使用体验,也降低了使用门槛,使得更多人能够享受到人工智能带来的便利。

    计算范式革命:大模型如何影响现有的计算模式,并推动新一代计算技术的演进?

    大模型的训练和应用需要巨大的计算资源,这促进了分布式计算、云计算等技术的发展。越来越多的计算任务被转移到云端进行,提高了计算效率和资源利用率⁷。此外,大模型的训练依赖于海量的数据,这使得数据成为计算的核心。

    认知协作革命:大模型将如何使人类和机器在认知任务上更紧密地协作?

    大模型使得人类和机器在认知任务上能够更紧密地协作,共同解决复杂问题。例如,在科研、教育、医疗等领域,机器可以辅助人类进行数据分析、模式识别等工作,提高决策效率和准确性。

    这些变革不仅提升了我们与机器的沟通效率,也推动了计算技术的创新和发展。未来,随着大模型技术的不断完善和应用场景的拓展,我们有理由相信这些变革将对社会产生更加深远的影响。

    踩0 评论0
正在加载, 请稍后...
滑动查看更多
正在加载, 请稍后...
暂无更多信息