小笔记
技术 归档
技术 归档

  • 面试  
    • C++  
      • C++ 与 Objetive-C 的区别
      • C++多态
      • C++头文件如何正确定义全局变量
      • C++头文件的全局变量
      • C++拾遗
      • C++默认参数
      • dynamic_cast
      • static变量与static函数
      • unordered_map 与 map 的区别
    • 算法  
      • 排序  
        • 基本排序
        • 堆排序
        • 快速排序
      • 搜索  
        • 回溯算法
      • 数据结构  
        • 动态规划
        • 树
        • 链表
    • 网络  
      • HTTPS
      • TCP 三次握手
      • TCP 与 UDP
      • TCP 四次挥手
      • iOS 如何防止被抓包
      • 计算机网络基础
      • 重放攻击
  • App  
    • App 开发笔记
    • AppLink 笔记
    • LeanCloud 安全实践
    • LeanCloud 最佳实践
    • LeanCloud_Example
    • RN Android 包体优化最佳实践
    • iOS 提审缺少合规证明
    • fastlane 接入笔记
    • 开发问题记录
    • 苹果删除帐号
  • BackEnd  
    • Linux碎片
    • Ubuntu
    • 如何构建一个 NodeJS 后台服务
    • 如何比较简单地展示一个静态网
    • 定时任务
  • FrontEnd  
    • MiniApp  
      • 小程序踩坑
    • ReactNative  
      • !!的妙用
      • Android RN 引用 fork 的三方库
      • JS Object 的坑
      • JSON.stringfy 的坑
      • RN 全局替换 Text 属性
      • RN 安卓开发笔记
      • RN 异常调研
      • ReactNative JS 笔记
      • ReactNative Native 笔记
      • ReactNative 中 fetch 的巨坑
      • ReactNative 组件推荐
      • ReactNative 踩坑记录
      • ReactNative滑动中误点击问题优化方案
      • TextInput的一个小坑
      • memo
      • 如何在 JS import 绝对路径
      • 如何在函数组件里模拟构造函数
      • 如何调试一个未发布的RN组件
    • JS 模块化
    • H5打开外链失败
    • JS CORS 问题
    • JS双问号用法
    • JavaScript
    • RN TS 实践
    • TS 笔记
    • TSC 是什么
    • npx 是什么
    • yarn 时指定 Node 版本
    • peerDependencies 是什么
    • 移动端适配
    • 给三方模块打补丁
    • 节流与防抖
  • Others  
    • Python  
      • 周边  
        • 切换 Mac Python 版本
        • 参数解析神器
      • 语法  
        • Python 参数
        • Python 小知识
        • Python 网络请求
        • Python 文件操作
      • Python 实战
    • Xcode  
      • 库  
        • iOS 二进制文件分析之常用命令
        • 动态库和静态库
        • 库体积优化
        • 编译选项
      • Cocoapods
      • 使用脚本添加Xcode文件
      • 内存泄漏定位技巧
      • 新建工程移除StroyBoard
    • 计算机基础  
      • Git
      • RESTful API
      • 原码, 反码, 补码
      • 字符编码
    • Hexo 特性
    • GitHub Page 从 TravisCI 迁移到 GitHub Action
    • Mac 安装 Ruby 踩坑记录
    • VSCode 调教
    • fork后与原仓库同步SOP
    • 如何为 Github 设置代理
    • 如何完整迁移 Git 仓库
    • 查找日志技巧
    • 知识碎片
  • iOS  
    • Block  
      • Block 的实现(简化版)
      • Block
      • Block_面试题
    • GCD  
      • GCD
      • GCD_实践
      • dispatch_set_target_queue
    • RunLoop  
      • RunLoop 源码分析
      • RunLoop
    • Runtime  
      • Runtime
      • Runtime_实践
      • iOS 的 initialize 和 load 区别
      • weak 的实现原理
      • 关联对象的实现原理
      • 分类
      • 如何为分类添加属性
      • 如何为协议添加属性
      • 方法交换
    • 内存管理  
      • Weak-Strong Dance
      • autorelease
      • dealloc 探究
    • 未分类  
      • KVC
      • KVO
      • NSString 的坑
      • Native 与 JS 交互
      • Property
      • UIView 与 CALayer 区别
      • block 和 delegate 的区别
      • iOS 图片加载的坑
      • iOS 沙盒目录结构
      • iOS 状态栏
      • 启动
      • iOS 触摸机制
      • 弱引用集合对象
      • 杂
      • 离屏渲染

2025

2025-0610

小笔记

KVO

NSString 的坑

Native 与 JS 交互

Property

UIView 与 CALayer 区别

block 和 delegate 的区别

iOS 图片加载的坑

iOS 沙盒目录结构

iOS 状态栏

123…14Next »
Posts
小笔记
KVO

基本概念 KVO 是 Key-Value Observing 的缩写,用于监听对象的某一属性改变 KVO 是 Objective-C 对观察者模式的实现 基础用

NSString 的坑

__NSCFConstantString12345678NSString *str1 = @"ab";NSLog(@"%p isa

Native 与 JS 交互

UIWebView/WKWebView 拦截请求 Native 调用 JS 1[webView stringByEvaluatingJavaScriptFrom

Property

@property 的本质1@property = ivar(实例变量) + getter/setter(存取方法); ARC 下,property 中有哪些属

UIView 与 CALayer 区别

联系 每一个 UIView 都有一个根 layer 两者都有树状层级结构,CALayer 有 subLayers, UIView 有 subViews 区别 触

block 和 delegate 的区别

特性对比 block delegate 安全性 容易产生循环引用 可读性 代码集中更连贯,代码更少 性能 性能开销比 delegate 多,因为 block 会

iOS 图片加载的坑

iOS 中有两种常用的图片加载方式: imageNamed 有缓存:这种方法会首先在系统缓存中根据指定的名字寻找图片,如果找到了就返回。如果没有在缓存中找到图片

iOS 沙盒目录结构

MyApp.app 说明 存放资源文件和可执行文件。整个目录只可读,不可更改。为了防止篡改里面的内容,应用在安装的时候会将该目录进行签名。在非越狱的情况下,该目

iOS 状态栏

Info.plist 中设置 View controller-based status bar appearance 控制 App 状态栏显隐接受全局配置(NO

启动

App 的启动流程分为两个阶段:pre-main 和 main 脑图 pre-main 阶段 读取 App 的可执行文件(Mach-O 文件),从里面获得 dy

iOS 触摸机制

原理iOS 把用户触摸事件打包成一个 UIEvent 对象,作为事件传递的消息载体,放入当前活跃的 APP 的消息队列中,然后通过 Hit-Test 机制 来找

弱引用集合对象

NSPointerArray特性介绍NSPointerArray 是 NSArray 的通用版本,和 NSArray/NSMutableArray 不同的是,N

杂

NSNotification 接收通知时所在的线程取决于发送的线程还是注册的线程发送的线程。 如果是注册的线程,则 NSNotificationCenter 需

离屏渲染

layer.cornerRadius 不会触发离屏渲染,该属性只是对边框和背景颜色起作用,适用于内部没有其他控件的 view。 CAShapeLayer+UIB

Runtime

Runtime 脑图 概念Class、id、objc_object 定义源码 objc_class、objc_method 定义源码 category_t 定义

Runtime_实践

super 的本质《Objective-C Runtime初探:self super》 123456789101112@interface A : NSObje

iOS 的 initialize 和 load 区别

load initialize 执行次数 1次 每个类会被系统只调用一次,但是由于继承的关系,子类未实现的情况下父类的方法会被多次调用 执行时机 所有运行时需要

weak 的实现原理

本文解决的问题 weak 的代码实现原理 当对象释放的时候,如何实现将 weak 指针置为 nil weak 指针的线程安全 阅读本文的前提1id __weak

关联对象的实现原理

提问 关联对象被存储在什么地方,是不是存放在被关联对象本身的内存中? 为什么 AssociationsHashMap 是使用 unordered_map,而 O

分类

分类的源码123456789struct category_t { const char *name; // 原类名,而不是分类名 // 要扩展的类对

如何为分类添加属性

Runtime 原理123456789struct category_t { const char *name; // 原类名,而不是分类名 // 要

如何为协议添加属性

如果是协议中的属性,编译器不会自动合成实例变量,相当于只是声明了 setter/getter(注意是声明,没有实现) 第一步,声明协议 123@protocol

方法交换

代码实现1234567891011121314151617181920212223242526void swizzleMethod(Class class, S

Weak-Strong Dance

Weak-Strong Dance1234__typeof(&*self) __weak weakSelf = self;self.completion

autorelease

autorelease 的伪代码实现1[obj autorelease]; 等同于以下代码 12345// NSObject.m:- (id)autorelea

dealloc 探究

结论 dealloc 是在最后一次 release 执行后调用 ARC 下,对象的实例变量的释放时机是:编译器在 NSObject 插入的 .cxx_desct

KVC

基本概念 KVC 是 Key-Value Coding 的缩写,让开发者可以通过 Key 直接访问或设置对象的属性/成员变量,而不需要调用存取方法 KVC 可以

RESTful API

什么是 RESTREST:REpresentational State Transfer,直译就是 “表现层状态转移” 通俗地讲就是,URL 定位资源,用 HT

原码, 反码, 补码

在 32 位机器上,int 的范围是 [-2^31, 2^31-1],为什么正数和负数的范围不对称? 一、机器数和真值在学习原码,反码和补码之前,需要先了解机器

字符编码

一、ASCII 码我们知道,计算机内部,所有信息最终都是一个二进制值。每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256种状态,这被称

Block 的实现(简化版)

不捕获任何变量12345int main(){ void (^blk)(void) = ^{printf("Block\n&quo

Block

什么是 Block Block 是带有自动变量(局部变量)的匿名函数 ——《Objective-C 高级编程》 Block 是 Objective-C 对于闭包

Block_面试题

block 用什么修饰符修饰对于这个问题,得区分 MRC 环境 和 ARC 环境;首先,通过上面小节可知,block 引用了普通外部变量,都是创建在栈区的;对于

GCD

GCD 脑图 GCD 队列和任务队列(Dispatch Queue) 串行队列:只开启一个线程,一个任务执行完毕后,再执行下一个任务 并发队列:可以开启多个线程

GCD_实践

异步处理耗时任务后主线程更新 UI12345678// 获取全局并发队列dispatch_queue_t queue = dispatch_get_global

dispatch_set_target_queue

基础用法dispatch_set_target_queue 的作用: 改变队列优先级 让多个串行队列之间也能串行地执行任务 改变队列优先级dispatch_qu

RunLoop 源码分析

本文对应的源码地址——CFRunLoop.h本文对应的源码地址——CFRunLoop.c 数据结构CFRunLoop12345678struct __CFRun

RunLoop

RunLoop 脑图 RunLoop 流程 RunLoop 相关概念Event Loop事件循环模型,实现这种模型的关键点在于:如何管理事件/消息,如何让线程在

fork后与原仓库同步SOP

进入到本地仓库的目录,并切换到你关心的分支 执行 git remote -v 查看 upstream 的设置,正常情况下应该是只有你自己的远程仓库地址 12or

如何为 Github 设置代理

如果 Git 拉取很慢,可能是因为 Git 没有设置代理,出现以下报错1fatal: unable to access 'https://github

如何完整迁移 Git 仓库

直接 Push 行不行123git clone https://github.com/username/old-repository.gitcd old-rep

查找日志技巧

将文本中带有 viewWillAppear 的所有行打印出来1cat test.log | grep -n -i 'viewWillAppear&#x

知识碎片

Tree命令行下展示目录结构的神器——tree,使用 brew install tree 来安装 使用 ll 作为 ls -l 的别名123456cd ~tou

新建工程移除StroyBoard

移除 Main.storyboard 文件 移除 LaunchScreen.storyboard 在 TARGETS 中,将 Main InInterface

Git

Tag列出本地 Taggit tag 本地添加 Taggit tag v1.0.0 删除本地 Taggit tag -d v1.0.0 把本地 Tag 推送到远

iOS 二进制文件分析之常用命令

otoolotool 命令全称 object file displaying tool,是针对目标文件的展示工具,可以帮助我们发现应用中使用了哪些系统库,以及调

动态库和静态库

库什么是库 库的本质是一段编译好的二进制代码,加上头文件就可以供别人使用。 库从广义上可分为开源库和闭源库, 而闭源库才分为静态库和动态库 开源库:对外公开源代

库体积优化

概念符号表符号表是内存地址与函数名、文件名、行号的映射表。符号表元素如下所示: <起始地址> <结束地址> <函数> [&l

编译选项

OTHER_CFLAGS 和 GCC_PREPROCESSOR_DEFINITIONS 区别1s.pod_target_xcconfig = { &#

Mac 安装 Ruby 踩坑记录

Mac 系统版本为 Sonoma 14.4.1,不小心卸载了 ruby 2.7,重装过程无比坎坷,是为记之 Google 了 2 个小时无果,关键还得感谢 Ki

VSCode 调教

配置同步Key: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 借助插件:vscode-syncing 备份方法:cmd+sh

Python 实战

下载 KM 图书知识点:网络 Get 请求;文件读写;Markdown 转 PDF 深圳新冠疫苗放号监控知识点:网络 Post/Get 请求;定时任务;微信推送

Cocoapods

VideoNative 项目与 Cocoapods三个仓库 VideoNative/VideoNative 日常开发用的仓库(开发仓库) VideoNative

使用脚本添加Xcode文件

主要是 XcodeProj 这个工具的应用 Xcode 中 Group 和 FileRef 的区别GroupGroup 这个概念和我们平时经常说的 folder

内存泄漏定位技巧

Instruments 的 Leak 使用 Make Generation 标记,如图所示。 Generation A 的内存占用表示的是,是从启动到标记 A

切换 Mac Python 版本

切换 Mac Python 版本12python3 --version # pip 21.0.1 from /usr/local/lib/python3.8/s

参数解析神器

https://www.jianshu.com/p/409bfa57608e 详细可见 https://github.com/Norcy/photo_renam

Python 参数

方法一、arvg参数获取12345import sys print(sys.argv[0]) ## 脚本名 print(sys.argv[1]) ## 第一个参

Python 小知识

我用过的python库 pprint:美观打印数据结构 requests:可以方便地发送http请求,以及方便地处理响应结果,完胜自带的 urllib Beau

Python 网络请求

示例代码123456789101112131415161718192021import urllib.requestimport urllib.parseimp

Python 文件操作

python中对文件、文件夹(文件操作函数)的操作需要涉及到os模块和shutil模块。 例子读取文件全部内容12with open('/path/t

TS 笔记

其他 TypeScript 规定,变量只有赋值后才能使用,否则就会报错 12let x:number;console.log(x) // 报错 上面示例中,变量

TSC 是什么

背景RN 项目中可以使用 yarn tsc 来进行 TS 文件的检查。什么是 tsc 呢? tsc 是 TypeScript 编译器,用于将 TypeScrip

npx 是什么

npx 主要有两个作用 作用 1:调用项目安装的模块如果要在命令行中调用 node_modules 中的模块,使用 npx 之前,你需要 12# 项目的根目录下

yarn 时指定 Node 版本

执行 yarn 时可能遇到 Node 版本不匹配 1The engine "node" is incompatible with this

peerDependencies 是什么

假设现在有一个 helloWorld 工程,已经在其 package.json 的 dependencies 中声明了 packageA,有两个插件 plugi

移动端适配

常用方案 媒体查询 https://github.com/Norcy/wiki/commit/923735e175cd300292eedb93557c18a49

给三方模块打补丁

如果是 node_modules 下的三方模块使用 patch-package 工具即可 Step1:安装注意只在 dev 下生效即可 1yarn add pa

节流与防抖

节流 throttle定义n 秒内频繁调用多次时,只执行第一次调用(也可以选择定时结束时执行) 举例如下,疯狂点击按钮,1 秒内只会执行一次,且这一次为 1 秒

Hexo 特性

一些坑 如果使用了分割线,则生成 html 失败(已经第三次踩坑),如果要用分割线,得使用 ____ 而不是 --- Travis CI 自动构建NexT 主题

GitHub Page 从 TravisCI 迁移到 GitHub Action

背景Travis CI 开始收费,导致我的 GitHub Page 的网站部署失败,转向免费又好用的 GitHub Action 我之前使用的 Hexo 来创建

RN 安卓开发笔记

USB 调试 连接 USB 后运行 adb reverse tcp:8081 tcp:8081 执行 yarn run android 安装 APK conso

RN 异常调研

Native Debug 在点击函数里面 console.log(a.b) 如果是 JS Debug,则 Fatal 如果是 JS Release,则打印 un

ReactNative JS 笔记

useRefuseRef 有两个作用,详细可参考 https://zh-hans.reactjs.org/docs/hooks-reference.html#u

ReactNative Native 笔记

Bridge 与线程1. Bridge 中所有暴露的方法,分为同步方法和异步方法1234// 这是同步方法的声明RCT_EXPORT_BLOCKING_SYNC

ReactNative 中 fetch 的巨坑

RN 中,fetch 的 body 参数,只要带上 query,在安卓的 release 版本上,调用 .json() 的时候就会报错。 Android 的 d

ReactNative 组件推荐

已实践的组件推荐 cell 拖拽 react-native-draggable-flatlist 星星评分组件 react-native-ratings rea

ReactNative 踩坑记录

di18n 失效字符串中只要出现 “.” 就会失效,比如 1234// 翻译失败i18n.t("该文件的后缀名不对,应该为 .db")//

ReactNative滑动中误点击问题优化方案

转自公司内文章 背景使用 TouchableOpacity 组件,在快速横向切换和上下滑动过程中,存在较高概率的误点击的情况 RN 的点击原理如下 方案根据以上

TextInput的一个小坑

这样写,键盘的修改不会导致 value 改变,你还需要监听 onChangeText 来 setValue 12345const [value, setValu

memo

React.memoReact 中,当父组件的一个状态改变后,无论和子组件是否有关,子组件都会受到影响进行重新渲染,这也是 React 中默认的一个行为 使用

如何在 JS import 绝对路径

背景引入项目中的模块时,默认使用了相对路径,由于 i18n 需要批量替换 import,而每个文件相对 i18n 模块的位置不一样,那此时就无法完成批量替换 解

如何在函数组件里模拟构造函数

转自公司内大佬的文章,深入浅出的写法值得学习 TLDR源码实现 12345/** 可在同一函数重复多次使用,互不干扰 */export function use

如何调试一个未发布的RN组件

背景当开发一个新的 RN 组件时,发布之前可能需要经过业务场景的测试。如何测试才能更高效呢? 这里涉及两个路径,用以下字符串代替 开发中的组件的路径:/path

开发问题记录

模拟器编译libWeChatSDK.a 链接失败报错:libwechatsdk.a’ for architecture arm64

Linux碎片

which 加上 -a 可以查看所有同名程序的位置123456$ which ruby/Users/Norcy/.rvm/rubies/ruby-2.7.1/b

苹果删除帐号

苹果删除帐号原理调用 Revoke 接口需要 client_id、client_secret 和 token client_id:App 的 BundleId

Ubuntu

apache2 开机自动启动123456# 先确保 apache2 的命令是可用的,关闭后网页无法访问sudo systemctl stop apache2#

如何构建一个 NodeJS 后台服务

前言一个前端开发如何摆脱 PHP 去构建后台服务 目标 使用 JS 作为语言 支持 GET/Post 支持指定路由 支持 HTTPS 支持服务持续运行 环境要求

如何比较简单地展示一个静态网

python1python3 -m http.server http-server1234yarn global add http-server# 也可以使用

定时任务

crontab 用法常用命令如下 1234crobtab crontab_info # 录入定时任务,只执行这个不会生效crontab -e # 编辑定时任务,

H5打开外链失败

问题在 H5 页面使用 JS 代码下载 apk 文件 1window.open('http://xx.apk'); 表现在 Chrome 上

JS CORS 问题

现象 A.js 部署在 http://192.168.2.103:5173/,服务器部署在 http://192.168.2.103:8888/guess.ph

JS双问号用法

当左值为 null 或 undefined 时(并非所有 false 值,如 0 或 ‘’),返回右值 但是当左值为 0 时,依然返回左值,这是和 || 的唯一

JavaScript

?? 坑要注意运算符 ?? 的优先级 123456let a = 2, b = 3;a-b; // -1a??0; // 2b??0; // 3a??0-b??

RN TS 实践

剩余参数使用 & 来声明 props 的类型 12345678const ListItem = ({ item, ...props}

!!的妙用

背景x 是一个字符串,要求 x 为 null/undefined/‘’ 时不要渲染元素 很容易会写出以下代码 1{x?.length > 0 &

小程序踩坑

wxml 的胡子拼接1<view wx:for="{{5}}">{{

Android RN 引用 fork 的三方库

背景Android 的 RN 工程,如果要对某个三方库进行 Native 代码的修改,该三方库不是自己维护的,因此需要 fork 一份到自己的 Github 仓

JS Object 的坑

12345const FOO = '123';const BAR = { FOO: 333}; BAR 的结果竟然是 &

JSON.stringfy 的坑

Object 经过 JSON.stringify 转换之后,会丢失值为 undefined 的键值对 12let a = {foo: 1, bar:

RN 全局替换 Text 属性

1234567const oldRender = Text.render;Text.render = (...args) => { const

App 开发笔记

异常上报新版本的 Sentry 配置目前新版本是 12"@sentry/cli": "^1.59.0","@s

AppLink 笔记

背景 双端均能使用 xxx:// 直接打开 App 双端均能使用 https://yyy.com/zzz 直接打开 App Android使用 scheme 打

LeanCloud 安全实践

本文记录一些 LeanCloud 方面的安全实践 MasterKeyMasterKey 是级别最高的 Key,会跳过所有 API 的权限检查,绝对不能泄漏 不能

LeanCloud 最佳实践

数据库存在慢查询怎么办以 Record 为例,如果经常以 user 作为查询条件,那么就可以建立 user 索引 索引的本质是多维护一颗平衡树,这样查找的时候可

LeanCloud_Example

beforeSave 的时候获取不到对象的属性值1234567AV.Cloud.beforeSave('GiftUserMap', asyn

RN Android 包体优化最佳实践

RN Android 包体优化最佳实践ABI 架构优化如果你的 App 只有真实设备,不使用模拟器,则可以移除 x86 架构,最佳实践如下 android/ap

iOS 提审缺少合规证明

每次提审 AppStore 都要提示缺少合规证明 其实只要在 Info.plist 添加 App Uses Non-Exempt Encryption 为 NO

fastlane 接入笔记

流程 安装 fastlane,不详述 初始化 fastlane 123456cd iosfastlane init# 选择 3. Automate App St

HTTPS

假如客户端要登录,将用户名和密码传到服务器 如果使用 HTTP,会有什么问题HTTP 是明文传输,有以下问题 窃听风险:第三方可以获知通信内容(需要加密) 篡改

TCP 三次握手

三次握手的过程 刚开始客户端处于 Closed 的状态,服务端处于 Listen 状态。 第一次握手:客户端发送 SYN=1,seq=x(SYN=1 的报文段不

TCP 与 UDP

对比 UDP TCP 是否连接 无连接 面向连接(三次握手) 是否可靠 不可靠传输,不使用流量控制和拥塞控制 可靠传输,有序列号,确认号,超时重传等,使用流量控

TCP 四次挥手

四次挥手的过程 TCP 三次握手,一定是客户端先发起连接;而 TCP 四次挥手,发起中断连接的既可以是客户端,也可以是服务器。 本文以客户端先发起请求为例,刚开

iOS 如何防止被抓包

背景想抓订阅号助手的请求,看能否实现公众号推文自动发布,结果用 Stream 抓包软件抓不到任何的请求,但是请求却正常发送了 疑问如何既能正常发出请求,又能不被

计算机网络基础

OSI 七层模型、TCP/IP 五层模型、与 TCP/IP 四层模型 数据传递时,每层都会在上一层的报文添加自己的头部 应用层HTTP、FTP、SMTP、DNS

重放攻击

背景今天想从【今日热榜】这个 App 中获取榜单的 Get 请求,从而可以“借”它们的数据做个榜单类的小程序。用 Charles 抓手机的包之后,发现可以抓取到

动态规划

最长回文子串https://leetcode-cn.com/problems/longest-palindromic-substring/ https://le

树

二叉树的最近公共祖先https://leetcode-cn.com/problems/lowest-common-ancestor-of-a-binary-tr

链表

删除单向链表中的指定节点https://leetcode-cn.com/problems/delete-node-in-a-linked-list/ 只能访问当

C++ 与 Objetive-C 的区别

重载在 C++ 中,重载指的是函数名相同,但是参数类型或参数个数不同的函数;而在 OC 中是不支持重载的 C++ 区别函数是通过函数签名,函数签名包括函数名、参

C++多态

多态父类指针指向一个子类对象,调用父类声明的方法后,实际上调用的是子类的实 1234567891011121314151617class A{publ

C++头文件如何正确定义全局变量

背景我们项目里看到一个头文件,是专门定义各种常量的,有一天发现这里的常量定义既使用了 static,又使用了 const,这个文件没有类,全部都是字符串的定义

C++头文件的全局变量

变量的定义与声明1234extern int a; // 声明一个全局变量aint a; // 定义一个全局变量aextern int a = 0; // 定义

C++拾遗

虚函数相关 定义一个函数为虚函数,不代表函数为不被实现的函数。 定义基类的函数为虚函数是为了允许用基类的指针来调用子类的这个函数(多态) 定义一个函数为纯虚函数

C++默认参数

C++ 可以给参数设置默认值,当参数缺省的时候,使用默认值如果没有设置默认值,则调用的时候不能省略参数 12345678910111213void f(int

dynamic_cast

C++ 中 如果是子类指针强制转换父类指针,则称为上行转换(upcasting) 如果是父类指针强制转换子类指针,则称为下行转换(downcasting) 例子

static变量与static函数

今天遇到一个 crash,追溯到最后竟然是因为在两个 .cpp 文件中声明了2个相同名称的全局变量,改用 staitc 修饰它们为静态全局变量就解决问题 123

unordered_map 与 map 的区别

map 是基于红黑树实现,O(lgn) 的时间复杂度完成查找、插入和删除,内部是有序的 unordered_map 是基于 hash_table 实现 map

基本排序

选择排序每次挑最小的放左边 123456789101112131415void selectionSort(int s[], int n){ for

堆排序

图解堆排序堆排序是什么 堆排序的步骤 将无序数组就地交换,堆化为最大堆 将堆顶元素与末尾元素交换,将最大元素沉到数组末端; 重复步骤 1 和 2,直到整个数组有

快速排序

123456789101112131415161718192021222324252627282930313233343536void quickSort(in

回溯算法

回溯算法的框架解决一个回溯问题,实际上就是一个决策树的遍历过程。你只需要思考 3 个问题: 1、路径:也就是已经做出的选择。 2、选择列表:也就是你当前可以做的

JS 模块化

模块化模块通常是指编程语言所提供的代码组织机制,利用此机制可将程序拆解为独立且通用的代码单元。所谓模块化主要是解决代码分割、作用域隔离、模块之间的依赖管理以及发

Pages
Categories
About
Tags
Categories
techtech
iOStech/iOS
未分类tech/iOS/未分类
Runtimetech/iOS/Runtime
内存管理tech/iOS/内存管理
Otherstech/Others
计算机基础tech/Others/计算机基础
Blocktech/iOS/Block
GCDtech/iOS/GCD
RunLooptech/iOS/RunLoop
Xcodetech/Others/Xcode
库tech/Others/Xcode/库
Pythontech/Others/Python
周边tech/Others/Python/周边
语法tech/Others/Python/语法
FrontEndtech/FrontEnd
ReactNativetech/FrontEnd/ReactNative
Apptech/App
BackEndtech/BackEnd
MiniApptech/FrontEnd/MiniApp
archarch
面试arch/面试
网络arch/面试/网络
算法arch/面试/算法
数据结构arch/面试/算法/数据结构
C++arch/面试/C
排序arch/面试/算法/排序
搜索arch/面试/算法/搜索