- 博客(155)
- 收藏
- 关注
原创 Integer类超详解
前言Integer的内部结构1、MAX_VALUE2、MIN_VALUE3、SIZE4、TYPE构造方法1、Integer(int number)2、Integer(String str)3.引用为null装、拆箱 装箱 拆箱隐式类型转换Integer对象的不可变性处理Integer对象的方法1、byteValue( )byte类型是什么?2、compareTo(Integer
2022-12-25 16:46:42
12317
3
原创 Python之Math库解析
目录Python内置数值操作数字运算符数值运算函数类型转换 Math库常用数值表示函数math库幂对函数math库的三角函数
2022-12-06 00:30:42
7767
原创 C++:initializer_list 与 {} 初始化的本质
本文深入探讨了C++中{}和()初始化的区别,通过汇编分析揭示了{}初始化的底层机制。当使用{}初始化set容器时,编译器会先在栈上创建临时数组存储元素,然后通过首尾指针构造initializer_list对象,最后调用set的初始化列表构造函数。而set{other_set}则会直接匹配拷贝构造函数。{}初始化在编译期会根据参数类型智能匹配最合适的构造函数,包括拷贝构造、普通构造和初始化列表构造等,且优先匹配initializer_list构造。文章通过详细分析汇编代码,展示了{}初始化的完整过程,帮助读
2026-03-19 22:12:45
477
原创 C++内部类的ISO约定和语法细节
本文介绍了C++中内部类(嵌套类)的核心概念和使用规则。主要内容包括:1)内部类定义在外部类作用域内,通过外部类限定符访问;2)内部类可直接访问外部类静态成员,但访问非静态成员需通过外部类对象;3)内部类友元函数不自动获得外部类访问权限;4)类外定义内部类成员需使用完整作用域限定;5)内部类可见性受外部类访问限定符影响。文章通过代码示例详细演示了内部类的各种使用场景和注意事项,包括作用域解析、成员访问规则和访问控制限制等核心知识点。
2026-03-18 15:32:48
385
原创 扒透 C++ 默认参数与内联函数的坑:为什么你的代码总编译 / 链接报错?
本文总结了C++编程中的几个关键易错点:1)函数默认参数必须写在声明中而非定义中,因为编译器在预处理阶段需要获取默认值信息;2)默认参数必须从右向左连续设置,避免参数传递歧义;3)inline函数必须将定义写在头文件中,以便编译器在编译时展开函数体。这些规则源于C++的编译机制,包括预处理时的文本替换、编译单元独立性以及函数调用时的参数压栈顺序。理解这些底层原理有助于避免常见编译错误,编写更规范的C++代码。
2026-03-17 20:10:52
419
原创 C++命名空间:解决命名冲突的利器
摘要: C++命名空间用于解决命名冲突问题。在C语言中,同名结构体或函数会导致重定义错误,通常只能通过添加前缀等变通方法解决。C++引入命名空间将声明逻辑隔离,通过namespace Group{...}定义命名空间,使用Group::Name访问成员。命名空间可嵌套、可多次声明(会合并),但不能重复定义相同类型。匿名命名空间(namespace{...})具有内部链接特性,仅当前编译单元可见,相当于隐式static,常用于限制作用域。其成员可直接使用,无需前缀,不同文件中的同名匿名空间互不影响。
2026-03-09 16:27:19
444
原创 C++析构函数:对象生命的终结者
本文介绍了C++中析构函数的概念、语法和使用场景。析构函数(~类名())用于清理对象资源,在对象生命周期结束时自动调用。与Java不同,C++需要手动管理内存。文章详细讲解了析构函数的语法规则(无返回值、无参数、不可重载)、执行时机(局部对象出作用域、全局对象程序终止时等),并通过Person类示例演示了如何编写析构函数来释放动态分配的内存。还分析了默认析构函数的局限性(不处理指针资源)以及析构函数在汇编层面的调用机制。最后指出对于包含指针成员的类,必须显式编写析构函数以避免内存泄漏。
2026-03-04 16:49:02
539
原创 C++构造函数之初始化列表才是 C++ 的正确打开方式
构造函数是类中用于初始化对象的特殊成员函数,在创建对象时自动调用。主要特点包括:1)没有返回值;2)可以有参数或无参数;3)名称与类名相同。构造函数分为三种类型:1)默认构造函数(无参或全缺省参数);2)带参构造函数;3)编译器自动生成的默认构造函数(不初始化内置类型)。当显式定义构造函数后,编译器不再生成默认版本。需要注意避免构造函数重载时的二义性问题,以及使用explicit关键字防止隐式类型转换。构造函数确保了对象创建时的正确初始化,是面向对象编程中对象生命周期管理的重要环节。
2026-03-02 20:02:27
916
原创 C++引用、左值和右值
C++引用本质是指针的语法糖,编译时会被转换为指针常量。引用必须初始化且不能改变绑定对象,常用于函数参数传递以避免数据拷贝。引用可作返回值但需注意不能返回局部变量引用。const引用可绑定字面量,此时编译器会创建临时变量。引用涉及权限问题,不能将非const引用绑定到const变量。临时变量在传递字面量或表达式结果时自动创建,具有只读特性。左值(可寻址变量)与非const引用绑定,右值(字面量/表达式结果)只能与const引用绑定。引用机制在提高效率的同时也需要注意权限控制和生命周期管理。
2026-02-23 14:19:39
579
原创 linux系统编程-线程概述
本文介绍了线程的基本概念及其与进程的区别。线程作为轻量级执行单元,共享进程资源(如内存、文件描述符等),同时拥有独立属性(线程ID、栈空间等)。文章详细讲解了线程创建、终止、连接(join)和分离(detach)等核心操作,通过POSIX线程库(pthread)的函数接口实现。重点说明了线程内存模型、线程ID获取与比较、线程终止方式,以及如何正确处理线程返回值。最后强调线程连接与分离的互斥性,并指出主线程终止会影响所有子线程的执行。
2026-02-05 20:42:50
856
原创 Linux信号相关函数
本文详细介绍了Linux信号机制的核心概念和操作方式。主要内容包括:1.信号发送方法(kill、killpg、raise等系统调用);2.信号权限规则(特权进程、init进程保护机制);3.信号处理函数设置(signal和更安全的sigaction函数);4.信号屏蔽机制(sa_mask和sigprocmask)。文章通过具体代码示例演示了如何修改信号默认处理、设置信号屏蔽等操作,并特别指出signal()函数的缺陷,推荐使用更安全的sigaction()替代。最后还介绍了全局信号阻塞的实现方法。
2026-02-01 21:22:50
800
原创 linux 信号内核模型
本文摘要:信号是操作系统内核向进程传递异常事件的重要机制。信号主要分为三类:硬件异常、软件异常和用户事件。内核根据异常上下文或用户指令确定信号接收进程,并将信号存入进程PCB中的未决信号仓库pending。进程处理信号时遵循严格优先级:SIGKILL/SIGSTOP最高,普通信号次之,实时信号最低。信号处理方式包括默认行为、自定义处理和忽略(部分信号不可忽略)。整个过程涉及用户态与内核态转换,由内核严格管控以确保系统安全。
2026-01-30 20:53:13
766
原创 SQL(困难):计算用户的平均次日留存率
摘要:本文通过SQL查询计算用户刷题次日留存率。使用question_practice_detail表,通过自连接查询用户当天和次日刷题记录,统计有次日记录的比例。关键步骤包括:1)对用户ID和日期去重;2)用DATE_ADD函数匹配次日记录;3)计算留存率=有次日记录数/总记录数。最终查询结果为0.3000,即30%的留存率。文章详细解析了SQL自连接过程和留存率计算方法,并讨论了题目描述与实际查询的差异。
2026-01-28 21:36:20
683
原创 Linux系统编程- 目录&目录流
本文介绍了Linux POSIX-C文件系统编程的核心概念与操作。主要内容包括:1) 工作目录的本质是进程拥有的目录索引节点信息,通过getcwd系统调用获取;2) 目录操作函数如chdir、mkdir、rmdir的使用方法;3) 目录流的概念,通过opendir、readdir等函数遍历目录项,解析dirent结构体获取文件名和inode信息。文章通过代码示例演示了如何获取/改变工作目录、创建/删除目录以及读取目录内容,揭示了文件系统底层通过索引节点管理目录和文件的机制。这些知识是Linux系统编程中文件
2026-01-27 15:41:06
570
原创 GDB调试程序
GDB调试指南:Linux下的代码调试利器 GDB是GNU开发的功能强大的命令行调试工具,支持C/C++等多种编译型语言。在Linux开发中,由于缺少图形界面,GDB成为调试代码的重要工具。 核心要点: 编译时必须添加-g选项保留调试信息 常用调试命令: list查看代码 break设置断点 run启动调试 step/next单步执行 print查看变量 x检查内存 调试流程:设置断点→启动调试→检查变量/内存→定位问题 GDB通过命令行操作实现VS等IDE的图形调试功能,是Linux开发者必备的调试工具。
2026-01-19 20:30:28
685
原创 机试:判断单链表是否有环
本文介绍了判断链表是否有环的两种方法:快慢指针法和哈希表法。快慢指针法通过设置两个不同速度的指针(快指针每次走两步,慢指针每次走一步),若有环则两指针终会相遇,时间复杂度O(n),空间复杂度O(1)。哈希表法通过记录访问过的节点地址,若遇到重复地址则存在环,虽能直接找到环入口但需要额外空间。代码实现展示了两种方法的C语言版本,快慢指针法更为高效,是推荐的解决方案。
2026-01-10 17:07:07
585
原创 机试:反转链表
摘要:本文介绍了反转单链表的三种方法。方法一通过头插法新建链表,时空复杂度均为O(N)。方法二使用三指针原地反转,空间复杂度优化为O(1)。方法三采用递归,先反转子链表再处理当前节点。三种方法均能实现链表反转,其中方法二在空间效率上最优。
2026-01-10 16:39:18
732
原创 机试:验证回文串
判断字符串是否为回文串的解题思路:先将字符串统一转为小写,移除所有非字母数字字符,然后检查处理后的字符串是否正反读相同。具体步骤包括:1)使用tolower转换大小写;2)使用双指针法原地移除无效字符;3)重新计算长度后,通过比较首尾字符验证回文性质。空字符串视为有效回文。提供了三种字符处理方法,推荐使用原地修改法节省内存。最终通过遍历字符串前半部分与对应位置字符比较即可判断回文。最后强调了一种不用剔除非字母和数字的直接遍历的方法。
2026-01-07 17:40:50
863
原创 操作系统:系统调用 versus 过程调用
过程调用与系统调用的区别主要体现在发生空间、权限级别、实现机制等方面。过程调用发生在用户空间内部,通过普通栈操作实现,权限始终为用户态,开销小;而系统调用需要从用户态切换到内核态,通过软中断实现,涉及上下文切换和安全检查,开销较大。过程调用如自定义函数或标准库函数,而系统调用如open()、fork()等,是用户程序与内核交互的唯一接口。理解二者的区别有助于优化程序性能和安全性。
2025-09-12 18:17:49
479
原创 都2024了, 还有人不会用Redis做投票排行榜? -- 基于Redis实现的点赞排行榜, 投票榜
本文围绕了redis的基本数据结构, 构建了一个投票系统.
2024-10-25 20:50:17
1511
原创 京东 北京 java 中级: 哪些情况下的对象会被垃圾回收机制处理掉? 哪些对象可以被看做是 GC Roots 呢?对象不可达,一定会被垃圾收集器回收么?
京东面试: 哪些情况下的对象会被垃圾回收机制处理掉? 哪些对象可以被看做是 GC Roots 呢?对象不可达,一定会被垃圾收集器回收么?
2024-10-23 23:08:00
852
原创 JVM 体系与结构
一次编译导出运行JVM不只是虚拟机, 更是一个平台虚拟机? Java虚拟机?JVM在计算机系统中所处的位置JVM的体系结构Java代码的执行流程JVM生命周期
2024-09-10 00:55:57
1322
原创 Java多线程的单例设计模式 多种实现方法
目录前言饿汉式懒汉式Double_checkvolatile + double_checkHolder方式枚举
2024-08-06 00:24:19
1026
原创 java多线程, 该如何处理异常?
如何处理线程运行时异常UncaughtExceptionHandler没有注入 未捕捉异常处理器, 线程是如何处理异常的?, java
2024-07-31 17:49:49
1212
原创 mybatis 主键的特殊要求
目的就是为了将这个role对象插入到数据库, 然后他会根据getGeneratedKeys来自动回填id. 但是, 实际工作往往不是我们想象的那么简单,需要根据一些特殊的关系设置主键id 的值。
2024-07-19 13:00:01
399
c++ 基础语法 课件资料(附带源码)
2024-05-04
《计算机操作系统》实验指导书.doc
2023-06-15
同一机房下,一台主机部署了tomcat,另外一台主机如何访问tomcat部署的资源
2023-12-08
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅