feat: refine

This commit is contained in:
LiuBinPeng
2022-05-30 15:02:31 +08:00
parent 538801e651
commit 6cd0cf5144
60 changed files with 135 additions and 1487 deletions

BIN
.DS_Store vendored

Binary file not shown.

View File

@@ -6,7 +6,7 @@
## 结构
![](https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/assets/LLVM-segment.png)
![](./../assets/LLVM-segment.png)
LLVM 由三部分构成:
@@ -16,7 +16,7 @@ LLVM 由三部分构成:
- Backend后端生成目标程序机器码
![](https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/assets/LLVM-Structure.png)
![](./../assets/LLVM-Structure.png)
正是由于这样的设计,使得 LLVM 具备很多有点:
@@ -51,7 +51,7 @@ Clang 相较于 GCC具备下面优点
- 设计清晰简单,容易理解,易于扩展增强
![](https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/assets/LLVM-phase.png)
![](./../assets/LLVM-phase.png)
### 查看编译过程
@@ -61,7 +61,7 @@ clang -ccc-print-phases main.m
对 main.m 文件
![](https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/assets/clang-phase.png)
![](./../assets/clang-phase.png)
可以看到经历了输入、预处理、编译、LLVM Backend、汇编、链接、绑定架构7个阶段。
@@ -79,10 +79,10 @@ int main(int argc, const char * argv[]) {
}
```
![](https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/assets/clang-analysize.png)
![](./../assets/clang-analysize.png)
语法分析生成语法树ASTAbstract Syntax Tree`clang -fmodules -fsyntax-only -Xclang -ast-dump main.m`
![](https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/assets/clang-ast.png)
![](./../assets/clang-ast.png)
### LLVM IR

View File

@@ -59,7 +59,7 @@ typedef struct NCTbl {
该表用于存储添加观察者时传了 NotificationName 的情况。也就是 Named Table 中NotificationName 作为 key。在使用系统 API 注册观察者的时候还可以传入 object 参数,表示只监听该对象发出的通知,所以还需要一张表存储 object 和 observer 的对应关系object 为 keyobserver 为 value。
![](https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/assets/notification-namedTable.png)
![](./../assets/notification-namedTable.png)
- 第一个 MapTable key 为 notificationNamevalue 为另一个 MapTable子 Table
@@ -71,7 +71,7 @@ typedef struct NCTbl {
nameless Table 结构较为简单,因为没有 notificationName所以就一层 MapTable。key 为 objectvalue 为链表,存储所有的观察者。
![](https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/assets/Notification-namelessTable.png)
![](./../assets/Notification-namelessTable.png)
### wildcard

View File

@@ -2,13 +2,13 @@
## 渲染机制
![](https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/assets/RenderStructure.png)
![](./../assets/RenderStructure.png)
iOS 渲染框架可以分为4层顶层是 UIKit包括图形界面的高级 API 和常用的各种 UI 控件。UIKit 下层是 Core Animation不要被名字误解了它不光是处理动画相关也在做图形渲染相关的事情(比如 UIView 的 CALayer 就处于 Core Animation 中)。Core Animation 之下就是由 OpenGL ES 和 CoreGraphics 组成的图形渲染层OpenGL ES 主要操作 GPU 进行图形渲染CoreGraphics 主要操作 CPU 进行图形渲染。上面3层都属于渲染图形软件层再下层就是图形显示硬件层。
iOS 图形界面的显示是一个复杂的流程,一部分数据通过 Core Graphics、Core Image 有 CPU 预处理,最终通过 OpenGL ES 将数据传输给 GPU最终显示到屏幕上。
![](https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/assets/RenderPipeline.png)
![](./../assets/RenderPipeline.png)
- Core Animation 提交会话(事务),包括自己和子树(view hierarchy) 的布局状态
@@ -20,13 +20,13 @@ iOS 图形界面的显示是一个复杂的流程,一部分数据通过 Core G
## Core Animation
![](https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/assets/APM-CoreAnimationPipeline.png)
![](./../assets/APM-CoreAnimationPipeline.png)
可以看到 Core Animation pipeline 由4部分组成Application 层的 Core Animation 部分、Render Server 中的 Core Animation 部分、GPU 渲染、显示器显示。
### Application 层 Core Animation 部分
![](https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/assets/CoreAnimationCommit.png)
![](./../assets/CoreAnimationCommit.png)
- 布局(Layout)`layoutSubviews``addSubview`,这里通常是 CPU、IO 繁忙
@@ -52,7 +52,7 @@ Render Server 是一个独立的渲染进程,当收到来自 Application 的 (
## UIView 绘制流程
![](https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/assets/UIRenderPipeline.png)
![](./../assets/UIRenderPipeline.png)
- 每个 UIView 都有一个 CALayerlayer 属性都有 contentscontents 其实是一块缓存,叫做 backing store
@@ -60,7 +60,7 @@ Render Server 是一个独立的渲染进程,当收到来自 Application 的 (
- 当 backing store 写完后,通过 Render Server 交给 GPU 去渲染,最后显示到屏幕上
![](https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/assets/UIViewRenderPipeline.png)
![](./../assets/UIViewRenderPipeline.png)
- 调用 `[UIView setNeedsDisplay]` 方法时,并没有立即执行绘制工作,而是马上调用 `[view.layer setNeedsDisplay]` 方法,给当前 layer 打上标记
@@ -76,7 +76,7 @@ Render Server 是一个独立的渲染进程,当收到来自 Application 的 (
### 系统绘制流程
![](https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/assets/iOSRenderProcess.png)
![](./../assets/iOSRenderProcess.png)
- 首先 CALayer 内部会创建一个 CGContextRef在 drwaRect 方法中,可以通过上下文堆栈取出 context拿到当前视图渲染上下文也就是 backing store
@@ -88,7 +88,7 @@ Render Server 是一个独立的渲染进程,当收到来自 Application 的 (
### 异步绘制流程
![](https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/assets/iOSAsyncRender.png)
![](./../assets/iOSAsyncRender.png)
- 如果 layer 有代理对象,且代理对象实现了代理方法,则可以进入异步绘制流程

View File

@@ -30,7 +30,7 @@ iOS 上应用必须被沙盒化,各个不同 App 之间的 Defaults Domain
通过设置符号断点可以看出, NSUserDefaults 内部在读写时会通过 `os_unfair_lock` 加锁进行多线程安全保护。
![](https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/assets/NSUserDfault-lock.png)
![](./../assets/NSUserDfault-lock.png)
## 存储性能如何
@@ -178,7 +178,7 @@ iOS 上应用必须被沙盒化,各个不同 App 之间的 Defaults Domain
通过对代码添加符号断点 `xpc_connection_send_message_with_reply_sync` 可以看到下面的堆栈
![](https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/assets/NSUserDefault-XPC.png)
![](./../assets/NSUserDefault-XPC.png)
执行 `[NSUserDefaults standardUserDefaults];` 可以发现是调用了 XPC创建名称为 “com.apple.cfprefsd.daemon” 的 XPC Connection且会发送一个 `xpc_connection_send_message_with_reply_sync` 的消息。

View File

@@ -33,7 +33,7 @@
![](https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/assets/RunLoop-SourceCode.png)
![](./../assets/RunLoop-SourceCode.png)
## RunLoop API
@@ -392,7 +392,7 @@ CFRelease(obersver);
但是如何直到系统是运行 RunLoop 的哪个函数?给 viewDidLoad 设置断点,在 lldb 模式输入 `bt` 查看堆栈
![](https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/assets/RunLoop-Specific.png)
![](./../assets/RunLoop-Specific.png)
查看 CF 中 `CFRunLoop.c`源码。方法比较复杂,做了精简摘要
@@ -1501,7 +1501,7 @@ UITableView 在滚动的时候一个优化点之一就是 UIImageView 的显示
2. `[[NSRunLoop currentRunLoop] run]` api 换掉。查看系统说明,底层其实就是一个无限循环,循环内部不断调用 `runMode:beforeDate:`。下面也有建议,建议我们想销毁 RunLoop可以替换 API比如设置一个变量标记是否需要结束 RunLoop
![](https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/assets/RunLoop-RunIssue.png)
![](./../assets/RunLoop-RunIssue.png)
改进代码如下

View File

@@ -327,7 +327,7 @@ QA优先级反转是什么
线程本质上就是 CPU 高速切换,看上去是同时在做多个线程内的事情。操作系统会使用基于优先级抢占式调度算法。高优先级的线程始终在低优先级线程前执行。
![](https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/assets/Thread_priority.jpg)
![](./../assets/Thread_priority.jpg)
线程 A 在 T1 时刻拿到锁,并处理数据。
@@ -437,13 +437,13 @@ int cursorr = 1;
假如对存钱过程,忘记解锁怎么办?产生死锁,如下
![](https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/assets/Thread-deadlock-unfaillock.png)
![](./../assets/Thread-deadlock-unfaillock.png)
添加 cursor 标记死锁是发生在 `saveMoney` 方法执行的第几次。发现是第二次。因为第一次锁没有任何使用方,所以加锁成功,当第二次加锁的时候发现锁没有释放,所以产生死锁。
这时候使用尝试加锁 API `os_unfair_lock_trylock` 即可成功如下
![](https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/assets/Thread-deadlock-unfairTrylock.png)
![](./../assets/Thread-deadlock-unfairTrylock.png)
### pthread_mutex
@@ -632,21 +632,21 @@ sistep instruction简写为 stepisi。当你在 Xcode 汇编面板看
第一步:当第二次调用 saveMoney 方法,开启汇编调试
![](https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/assets/OSSpinLock-Assemble2.png)
![](./../assets/OSSpinLock-Assemble2.png)
看到可疑方法 `OSSpinLockLock`给它加断点看到第10行高亮了。lldb 模式输入 c敲回车。次数输入 si 即可进入 `OSSpinLockLock`  方法内部调试
第二步:继续输入 si敲回车
![](https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/assets/OSSpinLock-Assemble3.png)
![](./../assets/OSSpinLock-Assemble3.png)
第三步:看到可疑方法 `_OSSpinLockLockSlow`给它加断点lldb 输入 C。此时断点到这一行了继续输入 si。
![](https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/assets/OSSpinLock-Assemble4.png)
![](./../assets/OSSpinLock-Assemble4.png)
第四步:在 `OSSpinLockLockSlow` 方法内部调试,不断输入 si。
![](https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/assets/OSSpinLockAssemble1.png)
![](./../assets/OSSpinLockAssemble1.png)
发现不断 si 最终一直会在第6行到第19行之间执行。懂汇编的会发现这其实是一个 while 循环。便可以证明自旋锁 OSSpinLock 在等锁的时候,底层实现是执行 while 循环,忙等,太浪费性能了。
@@ -974,7 +974,7 @@ void _dispatch_semaphore_dispose(dispatch_object_t dou,
为了探究下实现,开启汇编调试
![](https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/assets/synchronized-asemble.png)
![](./../assets/synchronized-asemble.png)
可以查看 objc4 的源码,查找 `objc_sync_enter`

View File

@@ -10,7 +10,7 @@ NSTimer、CADisplayLink 的 基础 API `[NSTimer scheduledTimersWithTimeInterval
栈、堆、BSS、数据段、代码段
![](https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/assets/iOS-MemoryLayout.png)
![](./../assets/iOS-MemoryLayout.png)
stack又称作堆栈用来存储程序的局部变量但不包括static声明的变量static修饰的数据存放于数据段中。除此之外在函数被调用时栈用来传递参数和返回值。栈内存地址越来越少
@@ -147,7 +147,7 @@ Demo1
运行该代码会 Crash报错信息如下
![](https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/assets/TaggedPointerCrash.png)
![](./../assets/TaggedPointerCrash.png)
说明:一开始的报错信息只说坏内存访问,但是并没有显示具体的方法调用堆。想知道具体 Crash 原因还是需要看看堆栈比较方便。输入 bt 查看最后是由于 `objc_release` 方法造成 crash。
@@ -257,7 +257,7 @@ static inline bool _objc_isTaggedPointer(const void * _Nullable ptr)
tips某些对象虽然是 TaggedPointer 类型,但是打印 class 发现不是,猜测可能是系统用类簇隐藏了某些实现细节。比如下面
![](https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/assets/NSTaggedPointerOfNSNumber.png)
![](./../assets/NSTaggedPointerOfNSNumber.png)
针对 NSNumber 的 TaggedPoniter 的 case查看 class 打印出 `__NSCFNumber`。但根据源码和内存高地址位分析确实是 TaggedPoniter。
@@ -826,7 +826,7 @@ void sel_init(size_t selrefCount){
在 gone 处加断点,利用 runtime 查看类中的方法信息
![](https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/assets/cxx_destructDemo1.png)
![](./../assets/cxx_destructDemo1.png)
发现存在 `.cxx_destruct` 方法。
@@ -861,7 +861,7 @@ void sel_init(size_t selrefCount){
@end
```
![](https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/assets/cxx_destructdemo3.png)
![](./../assets/cxx_destructdemo3.png)
Tips@property 会自动生成成员变量,另外类后面加 `{}` 在内部也可以加成员变量,假如成员变量是对象类型,比如 NSString则叫实例变量。
@@ -875,7 +875,7 @@ Tips@property 会自动生成成员变量,另外类后面加 `{}` 在内部
在 gone 的地方加断点,输入 `watchpoint set variable p->_name`,则会将 `_name` 实例变量加入 watchpoint当变量被修改时会触发断点可以看出从某个值变为 0x0也就是 nil。此时边上调用堆栈显示在 `objc_storestrong` 方法中,被设置为 nil.
![](https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/assets/cxx_destructDemo2.png)
![](./../assets/cxx_destructDemo2.png)
### 深入 .cxx_destruct
@@ -1123,7 +1123,7 @@ class AutoreleasePoolPage {
- 每个 AutoreleasePoolPage 对象占用 4096 字节内存,除了用来存放它内部的成员变量,剩下的空间用来存放 autorelease 对象的地址
- 所有的 AutoreleasePoolPage 对象通过**双向链表**的形式连接在一起。child 指向下一个对象parent 指向上一个对象
![](https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/assets/autoreleasepool.png)
![](./../assets/autoreleasepool.png)
```objectivec
id * begin() {
@@ -1181,7 +1181,7 @@ int main(int argc, const char * argv[]) {
main 方法内部3个 autoreleasepool 底层怎么样工作的?
![](https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/assets/AutoreleasePoolMoreItem.png)
![](./../assets/AutoreleasePoolMoreItem.png)
3个@auto releasepool 系统遇到第一个的时候底层就是初始化一个结构体 `__AtAutoreleasePool`,结构体构造方法内部调用 `AutoreleasePoolPage::push` 方法,系统给 AutoreleasePoolPage 真正保存 autorelease 对象的地方存储进一个 `POOL_BOUNDARY` 对象,然后储存 P1、P2 对象地址,遇到第二个则继续初始化结构体,调用 push 方法,存储一个` POOL_BOUNDARY` 对象,继续保存 P3遇到第三个则继续初始化结构体调用 push 方法,存储一个 `POOL_BOUNDARY` 对象,继续保存 P4。
@@ -1981,7 +1981,7 @@ iOS 在主线程的 Runloop 中注册了2个 Observer
结合 RunLoop 运行图
![](https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/assets/RunLoop-SourceCode.png)
![](./../assets/RunLoop-SourceCode.png)
- 01 通知 Observer 进入 Loop 会调用 `objc_autoreleasePoolPush`
@@ -2070,7 +2070,7 @@ NSHashMap、NSMapTable 都可以描述 key、value 的内存修饰。
这段代码运行会 crash信息如下
![](https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/assets/NSErrorZombieCrash.png)
![](./../assets/NSErrorZombieCrash.png)
原因是 NSError 构造方法内部会加 autorelease。源码如下
@@ -2133,8 +2133,28 @@ MRC 下的 `[(id)(object) autorelease]` 等价于 ARC 下的 `id __autoreleasing
我写了个僵尸对象检测工具,效果如下
![](https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/assets/ZombieSniffer.png)
![](./../assets/ZombieSniffer.png)
可以定位僵尸对象,并且打印出具体堆栈,并模拟系统行为调用 `abort` 。对监控原理和工具实现感兴趣的可以查看这里[带你打造一套 APM 监控系统-内存监控之野指针/内存泄漏监控](https://github.com/FantasticLBP/knowledge-kit/blob/master/Chapter1%20-%20iOS/1.74.md#zombieSniffer)
Demo [👇这里](https://github.com/FantasticLBP/BlogDemos/tree/master/僵尸对象探针)
Demo [👇这里](https://github.com/FantasticLBP/BlogDemos/tree/master/僵尸对象探针)
### 内存是连续的吗?
应用启动后Mach-O 文件是分段载入内存的。我们使用的内存都是虚拟内存,通过内存映射表来做。
每个进程在创建加载时会被分配一个大小大概为12倍真实地内存的连续虚拟地址空间让当前软件认为自己拥有一块很大内存空间。实际上是把磁盘的一小部分作为假想内存来使用。
CPU 不直接和物理内存打交道,而是通过 MMUMemory Manage Unit内存管理单元MMU 是一种硬件电路,速度很快,主要工作是内存管理,地址转换是功能之一。
每个进程都会有自己的页表 `Page Table` 页表存储了进程中虚拟地址到物理地址的映射关系所以就相当于地图。MMU 收到 CPU 的虚拟地址之后就开始查询页表,确定是否存在映射以及读写权限是否正常。
iOS 程序在进行加载时,会根据一 page 大小16kb 将程序分割为多页启动时部分的页加载进真实内存部分页还在磁盘中中间的调度记录在一张内存映射表Page Table这个表用来调度磁盘和内存两者之间的数据交换。
如上图App 运行时执行某个任务时会先访问虚拟页表如果页表的标记为1则说明该页面数据已经存在于内存中可以直接访问。如果页表为0则说明数据未在物理内存中这时候系统会阻塞进程叫做缺页中断page fault进程会从用户态切换到内核态并将缺页中断交给内核的 page Fault Handler 处理。等将对应的 page 从磁盘加载到内存之后再进行访问,这个过程叫做 page in。
因为磁盘访问速度较慢,所以 page in 比较耗时,而且 iOS 不仅仅是将数据加载到内存中,还要对这页做 Code Sign 签名认证,所以 iOS 耗时更长
TipsCode Sign 加密哈希并不少针对于整个文件,而是针对于每一个 Page 的,保证了在 dyld 进行加载的时候,可以对每一个 page 进行独立验证。
等到程序运行时用到了才去内存中寻找虚拟地址对应的页帧,找不到才进行分配,这就是内存的惰性(延时)分配机制。

View File

@@ -243,7 +243,7 @@ dispatch_semaphore_t semaphore_;
说明:直接 `performSelector` 存在警告,可以告诉编译器忽略警告。可以在 Xcode 点开警告,查看详情,复制 `[]` 里面的字符串去忽略警告
![](https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/assets/ignoreXcodewarning.png)
![](./../assets/ignoreXcodewarning.png)

View File

@@ -281,7 +281,7 @@ KVC 之后会触发 KVO。为什么探究下 `setValueForKey`
整个流程如下
![](https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/assets/KVC-process.png)
![](./../assets/KVC-process.png)
```
@implementation Person
@@ -315,6 +315,6 @@ valueForKey 原理
- 都没找到则抛出异常
![](https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/assets/KVC-get-process.png)
![](./../assets/KVC-get-process.png)

View File

@@ -957,7 +957,7 @@ c 数组指针 `array()->lists + addedCount` 可以代表其中的位置。
过程如下
![](https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/assets/runtime-categoryattachLists.png)
![](./../assets/runtime-categoryattachLists.png)
QA
@@ -1716,7 +1716,7 @@ Category 是在运行阶段,才会将数据合并到类信息中。
查看分类在 Runtime 加载类信息时候的调用原理可以知道分类中的类方法、对象方法都会被加载原始类的前面去initialize 是类方法)如下图:
![](https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/assets/runtime-categoryattachLists.png)
![](./../assets/runtime-categoryattachLists.png)

View File

@@ -289,8 +289,6 @@ Framework 只是打包方式,动态、静态库都可以支持。甚至可以
基于上述2个问题诞生了虚拟内存技术。
### 内存缺页异常
每个进程在创建加载时会被分配一个大小大概为12倍真实地内存的连续虚拟地址空间让当前软件认为自己拥有一块很大内存空间。实际上是把磁盘的一小部分作为假想内存来使用。
@@ -299,34 +297,28 @@ CPU 不直接和物理内存打交道,而是通过 MMUMemory Manage Unit
每个进程都会有自己的页表 `Page Table` 页表存储了进程中虚拟地址到物理地址的映射关系所以就相当于地图。MMU 收到 CPU 的虚拟地址之后就开始查询页表,确定是否存在映射以及读写权限是否正常。
iOS 程序在进行加载时,会根据一 page 大小16kb 将程序分割为多页启动时部分的页加载进真实内存部分页还在磁盘中中间的调度记录在一张表Page Table这个表用来调度磁盘和内存两者之间的数据交换。
iOS 程序在进行加载时,会根据一 page 大小16kb 将程序分割为多页,启动时部分的页加载进真实内存,部分页还在磁盘中,中间的调度记录在一张内存映射Page Table这个表用来调度磁盘和内存两者之间的数据交换。
![](https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/assets/iOSPageInPageOut.png)
![](/Users/lbp/Desktop/GitHub/knowledge-kit/assets/iOSPageInPageOut.png)
如上图App 运行时执行某个任务时会先访问虚拟页表如果页表的标记为1则说明该页面数据已经存在于内存中可以直接访问。如果页表为0则说明数据未在物理内存中这时候系统会阻塞进程叫做缺页中断page fault进程会从用户态切换到内核态并将缺页中断交给内核的 page Fault Handler 处理。等将对应的 page 从磁盘加载到内存之后再进行访问,这个过程叫做 page in。
因为磁盘访问速度较慢,所以 page in 比较还是,而且 iOS 不仅仅是将数据加载到内存中,还要这页做签名认证,所以 iOS 耗时更长
因为磁盘访问速度较慢,所以 page in 比较耗时,而且 iOS 不仅仅是将数据加载到内存中,还要这页做 Code Sign 签名认证,所以 iOS 耗时更长
TipsCode Sign 加密哈希并不少针对于整个文件,而是针对于每一个 Page 的,保证了在 dyld 进行加载的时候,可以对每一个 page 进行独立验证。
等到程序运行时用到了才去内存中寻找虚拟地址对应的页帧,找不到才进行分配,这就是内存的惰性(延时)分配机制。
![](https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/assets/PageFault.png)
![](/Users/lbp/Desktop/GitHub/knowledge-kit/assets/PageFault.png)
为了提高效率和方便管理对虚拟内存和物理内存进行分页Page管。进程在访问虚拟内存的一个 page 而对应的物理内存却不存在(没有被加载到物理内存中),则会触发一次缺页异常(缺页中断),然后分配物理内存,有需要的话会从磁盘 mmap 读入数据。
启动时所需要的代码分布在 VM 的第一页、第二页、第三页...,这样的情况下启动时间会影响较大,所以解决思路就是将应用程序启动刻所需要的代码(二进制优化一下),统一放到某几页,这样就可以避免内存缺页异常,则优化了 App 启动时间。
二进制重排提升 App 启动速度是通过「解决内存缺页异常」(内存缺页会有几毫秒的耗时)来提速的。
一个 App 发生大量「内存缺页」的时机就是 App 刚启动的时候。所以优化手段就是「将影响 App 启动的方法集中处理放到某一页或者某几页」虚拟内存中的页。Xcode 工程允许开发者指定 「Order File」可以「按照文件中的方法顺序去加载」可以查看 linkMap 文件(需要在 Xcode 中的 「Buiild Settings」中设置 Order File、Write Link Map Files 参数)。
### 如何获取启动阶段的 Page Fault 次数
Instrucments 中的 System Trace 可以查看详细信息。
@@ -341,7 +333,7 @@ Instrucments 中的 System Trace 可以查看详细信息。
其实二进制重排 Apple 自己本身就在用,查看 `objc4` 源码的时候就发现了身影
![](https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/assets/Objc-OrderFile.png)
![](/Users/lbp/Desktop/GitHub/knowledge-kit/assets/Objc-OrderFile.png)
Xcode 使用的链接器为 `ld`。 ld 有个参数 `-order_file` 。order_file 中的符号会按照顺序排列在对应 section 的开始。
@@ -361,24 +353,41 @@ clang 插桩,才可以 hook OC、C、block、Swift 全部。LLVM 官方文档
其实难点是如何拿到启动时刻所调用的所用方法?代码可能是 Swift、block、c、OC所以hook 肯定不行、fishhook 也不行,用 clang 插桩可行
- https://mp.weixin.qq.com/s/SUHaGD1T2Vce4Ag-qgxtgg
步骤:
在看 App 启动时间优化之前先看2个方法 **load****initialize**
- 在 Xcode Build Setting 下搜索 “Other c Flags”在后面添加 `-fsanitize-coverage=trace-pc-guard`
load
- 在工程入口文件添加2个方法来解决编译报错问题 `__sanitizer_cov_trace_pc_guard_init``__sanitizer_cov_trace_pc_guard`
> Invoked whenever a class or category is added to the Objective-C runtime; implement this method to perform class-specific behavior upon loading.
> 当一个类或者它的分类被加载到 Objective-c 的 runtime 中的时候会出发 load 方法。可以实现这个方法去执行一些类特定的行为。
- clang 插桩原理就是给每个oc、c方法、block 等方法内部第一行添加 hook 代码,来实现 AOP 效果。所以在 `__sanitizer_cov_trace_pc_guard` 内部将函数的名称打印出来,最后可以统一写入 order 文件
```objectivec
void __sanitizer_cov_trace_pc_guard_init(uint32_t *start,
uint32_t *stop) {
static uint64_t N; // Counter for the guards.
if (start == stop || *start) return; // Initialize only once.
printf("INIT: %p %p\n", start, stop);
for (uint32_t *x = start; x < stop; x++)
*x = ++N; // Guards should start from 1.
}
void __sanitizer_cov_trace_pc_guard(uint32_t *guard) {
void *PC = __builtin_return_address(0);
Dl_info info;
dladdr(PC, &info);
printf("name: %s\n", info.dli_sname);
}
```
initialize
- 可能会存在 while、for 循环 case所以为了避免死循环需修改 "Other c Flags" 配置为 `-fsanitize-coverage=func,trace-pc-guard`。func 表示仅 hook 函数时调用
> Initializes the class before it receives its first message.
> 当一个类接收到第一条消息的时候会初始化。
- 最后修改 Build Setting 中的 "Order File" 配置项
load 方法会在类被加载到 runtime 的时候调用。且父类的 load 方法比子类先执行。load 方法只会执行1次。
initialize 方法会在第一次收到消息的时候调用。父类的 initialize 方法比子类先执行。假如有 Person 类,还有一个子类 children。子类第一次收到消息的时候会先调用父类的 initialize然后调用子类的 initialize如果子类没有实现 initialize 那么父类的 initialize 会执行多次。
总结:
## 总结
启动优化思路主要是先监控发现具体的启动时间和启动阶段对应的各个任务,有了具体数据,才可以谈优化。
@@ -390,8 +399,6 @@ initialize 方法会在第一次收到消息的时候调用。父类的 initiali
- 启动阶段必须的任务,如果不适合并发,则利用技术手段将代码加速
## 参考
- [# 抖音研发实践:基于二进制文件重排的解决方案 APP启动速度提升超15%](https://mp.weixin.qq.com/s/Drmmx5JtjG3UtTFksL6Q8Q)

View File

@@ -257,12 +257,12 @@ sizeof 是运算符。
`objc_getClass()` 如果传递 instance 实例对象,返回 class 类对象;传递 Class 类对象,返回 meta-class 元类对象;传递 meta-class 元对象,则返回 NSObject(基类)的 meta-class 对象
![](https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/assets/objc-isa.png)
![](./../assets/objc-isa.png)
instance 的 isa 指向 Class。当调用方法时通过 instance 的 isa 找到 Class最后找到对象方法的实现进行调用
class 的 isa 指向 meta-class。当调用类方法的时通过 class 的 isa 找到 meta-class最后找到类方法进行调用。
![](https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/assets/objc-superclass.png)
![](./../assets/objc-superclass.png)
当 Student 实例对象调用 Person 的对象方法时,首先根据 Student 对象的 isa 找到 Stduent 的 Class 类对象,然后根据 Stduent Class 类对象中的 superClass 找到 Person 的 Class 类对象,在类对象的对象方法列表中找到方法实现并调用。
当 Stduent 实例对象调用 init 方法时候,首先根据 Student 对象的 isa 找到 Stduent 的 Class 类对象,然后根据 Stduent Class 类对象中的 superClass 找到 Person 的 Class 类对象,找到 Person Claas 的 superClass 到 NSObject 类对象,在 NSObject 类对象的方法列表中找到 `init` 方法并调用。

View File

@@ -141,7 +141,7 @@ isa 在 arm64 之后必须通过 `ISA_MASK` 去查询 class类对象、元类
`0x0000000ffffffff8ULL` 用程序员模式打开计算器
![](https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/assets/objc-isa-mask.png)
![](./../assets/objc-isa-mask.png)
其中,结构体中的数据存放大体是下面的结构:
@@ -343,7 +343,7 @@ struct class_ro_t {
具体关系整理如下图
![](https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/assets/runtime-class.png)
![](./../assets/runtime-class.png)
说明:
@@ -351,7 +351,7 @@ struct class_ro_t {
为什么不是二维数组因为Array 中的子 Array长度不一致且不能补空
![](https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/assets/runtime-class-rw-t.png)
![](./../assets/runtime-class-rw-t.png)
```c
static void remethodizeClass(Class cls)
@@ -436,7 +436,7 @@ struct class_ro_t {
- `class_ro_t` 里面的 baseMethodList、baseProtocols、ivars、baseProperties 是一维数组,是只读的,包含了类的(原始信息)初始内容
![](https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/assets/runtime-class-ro-t.png)
![](./../assets/runtime-class-ro-t.png)
## Method_t
@@ -474,7 +474,7 @@ typedef struct objc_selector *SEL;
iOS 中提供了一个叫做 `@encode` 的指令,可以将具体的类型表示成字符串编码
![](https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/assets/runtime-method-encoding.png)
![](./../assets/runtime-method-encoding.png)
```objectivec
- (int)calcuate:(int)age heigith:(float)height;
@@ -826,7 +826,7 @@ NSLog(@"%s %p", bucket._key, bucket._imp);
// personSay 0xbec8
```
![](https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/assets/runtime-method-find.png)
![](./../assets/runtime-method-find.png)
原理就是根据类对象结构体找到 cache 结构体cache 结构体内部的 `_buckets` 是一个方法散列表,查看源代码,根据散列表的哈希寻找策略 `(key & mask)` 找到哈希索引,然后找到方法对象 bucket其中寻找方法索引的 key 就是 方法 selector。
@@ -1411,7 +1411,7 @@ for 循环不断查找,找当前类的父类,直到当前类为 nil。
上面的流程是整个 `objc_msgSend` 的消息发送阶段的整个流程。可以用下图表示
![](https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/assets/runtime-objc_msgSend-messageSend.png)
![](./../assets/runtime-objc_msgSend-messageSend.png)
### 动态方法解析阶段
@@ -1546,7 +1546,7 @@ SEL_resolveClassMethod, sel);`
完整流程如下
![](https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/assets/runtime-objc_msgSend-ResolveMethod.png)
![](./../assets/runtime-objc_msgSend-ResolveMethod.png)
上 Demo
@@ -1686,7 +1686,7 @@ void *_objc_forward_handler = (void*)objc_defaultForwardHandler;
为什么是 `__forwarding__` 方法。我们可以根据 Xcode 崩溃窥探一二
![](https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/assets/runtime-forwardingFailed.png)
![](./../assets/runtime-forwardingFailed.png)
```c
int __forwarding__(void *frameStackPointer, int isStret) {
@@ -1730,7 +1730,7 @@ int __forwarding__(void *frameStackPointer, int isStret) {
完整流程如下
![](https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/assets/runtime-forwarding.png)
![](./../assets/runtime-forwarding.png)
上 Demo
@@ -1951,7 +1951,7 @@ objc_msgSendSuper(arg, sel_registerName("class"))
我们对 iOS 项目`[super viewDidLoad]` 下符号断点,发现`objc_msgSendSuper2`
![](https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/assets/runtime-super.png)
![](./../assets/runtime-super.png)
查看 objc4 源代码发现是一段汇编实现。
@@ -2185,7 +2185,7 @@ void test () {
方法内的变量存储在栈上,堆向上增长,栈向下增长。
![](https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/assets/runtime-isa-demo.png)
![](./../assets/runtime-isa-demo.png)
3.**实例对象的本质就是一个结构体存储所有成员变量isa 是一个特殊成员变量,其他的成员变量,这里就是 _name`sayHi` 方法内部的 self 就是 obj找成员变量的本质就是找内存地址的过程此时就是偏移8个字节**
@@ -2234,7 +2234,7 @@ objc_msgSendSuper(arg, sel_registerName("viewDidLoad"));
所以此时的“前一个局部变量” 也就是结构体 `objc_super` 类型的 arg。arg 是一个结构体,结构体第一个成员变量就是 self所以“前一个局部变量” 也就是 selfViewController
![](https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/assets/runtime-super-isa-demo.png)
![](./../assets/runtime-super-isa-demo.png)
## 应用场景
@@ -2268,7 +2268,7 @@ Person *p = [Person new];
object_setClass(p, [Student class]);
```
![](https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/assets/runtime-changeisa-demo.png)
![](./../assets/runtime-changeisa-demo.png)
3.动态创建类
@@ -2295,7 +2295,7 @@ void createClass (void) {
}
```
![](https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/assets/runtime-dynamicCreateClass-demo.png)
![](./../assets/runtime-dynamicCreateClass-demo.png)
runtime 中 copy、create 等出来的内存,不使用的时候需要手动释放`objc_disposeClassPair(newClass>)`

View File

@@ -6,7 +6,7 @@ block 本质上就是一个 oc 对象,也有 isa 指针
block 是封装了函数调用和函数调用环境的 OC 对象
![](https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/assets/block-structure.png)
![](./../assets/block-structure.png)
```objectivec
int age = 27;
@@ -247,7 +247,7 @@ NSLog(@"%@", [[block class] superclass]); // NSBlock
NSLog(@"%@", [[[block class] superclass] superclass]); // NSObjec
```
![](https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/assets/block-memorylayout.png)
![](./../assets/block-memorylayout.png)
代码存放在 text 段static 修饰的数据存放在 data 区,程序员手动申请的内存存放在堆,局部变量存放在栈区
@@ -598,7 +598,7 @@ static void __main_block_func_0(struct __main_block_impl_0 *__cself) {
可以看到 `__block int age = 27;` 变为了 `__Block_byref_age_0 age` 结构体。block 内部的函数在修改 age 的时候其实就是通过 `__main_block_impl_0` 结构体的 age 找到 `__Block_byref_age_0`,然后访问 `__Block_byref_age_0` 中的成员变量 `__forwarding` 访问成员变量 age并修改值。
![](https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/assets/block-forwarding.png)
![](./../assets/block-forwarding.png)
`__block` 修饰基本数据类型和对象,对于生成的结构体也不一样。
@@ -692,7 +692,7 @@ int main(int argc, const char * argv[]) {
我们将断点设置到 NSLog 这里,打印出自定义结构体 `__main_block_impl_0` 中的 age 。
![](https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/assets/Block-variableAddress.png)
![](./../assets/Block-variableAddress.png)
```c
// 0x0000000105231f70
@@ -736,7 +736,7 @@ block 内部对变量的值修改其实就是对 block 内部自定义结构体
## `__forwarding` 的设计
![](https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/assets/block_forwarding.png)
![](./../assets/block_forwarding.png)
当block在栈中时`__Block_byref_age_0`结构体内的`__forwarding`指针指向结构体自己。
@@ -750,7 +750,7 @@ block 内部对变量的值修改其实就是对 block 内部自定义结构体
`__block ` 修饰符修饰的对象在内存中如下
![](https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/assets/block-object-memoery.png)
![](./../assets/block-object-memoery.png)
```c
@@ -871,7 +871,7 @@ p.block();
`__unsafe_retained` 因为不安全所以不推荐,`__block` 因为使用繁琐,且必须等到调用 block 才会释放内存所以不推荐。ARC 下最佳用 `__weak`
![](https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/assets/block_object_cycle.png)
![](./../assets/block_object_cycle.png)
### MRC 下

View File

@@ -109,7 +109,7 @@ MH_DSYM存储着二进制文件符号。`.dSYM/Contents/Resource/DWARF/xx`
Xcode 中也可以查看 Mach-O 文件类型
![](https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/assets/MachOFileType.png)
![](./../assets/MachOFileType.png)
### Universal Binary
@@ -137,7 +137,7 @@ Xcode 中也可以查看 Mach-O 文件类型
## Mach-O 结构
![](https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/assets/Mach-OStructure.png)
![](./../assets/Mach-OStructure.png)
一个 Mach-O 文件包含3块
@@ -149,13 +149,13 @@ Xcode 中也可以查看 Mach-O 文件类型
可以用 [GitHub - fangshufeng/MachOView: 分析Macho必备工具](https://github.com/fangshufeng/MachOView) 和系统自带的 atool 查看 Mach-O 信息
![](https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/assets/otoolhelp.png)
![](./../assets/otoolhelp.png)
用 MachOView 查看 DDD Mach-O 文件
![](https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/assets/MachOPageZero.png)
![](./../assets/MachOPageZero.png)
![](https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/assets/MachOText.png)
![](./../assets/MachOText.png)
可以看到在 Mach-O 文件上,`__PAGEZERO``VM Size` 有值,但是 File Size 为0也就是说 `__PAGEZERO` 在 Mach-O 中不占据内存,但是程序运行起来之后,会占据虚拟内存。所以代码段在 Mach-O 中 File Offset 为0如果前面的 `__PAGEZERO` 的 File size 有值,这里的 File Offset 就不为0
@@ -179,9 +179,9 @@ Xcode 中也可以查看 Mach-O 文件类型
也可以使用 `size -l -m -x DDD` 指令来查看 Mach-O 的内存分布
![](https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/assets/MachOInsepect.png)
![](./../assets/MachOInsepect.png)
![](https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/assets/ASLRDemo.png)
![](./../assets/ASLRDemo.png)
我们会发现根据 Mach-O 文件中的信息File Size、File Offset、VM Address、VM Size 可以判断出 `__TEXT` 段内函数信息,这样子不够安全
@@ -189,7 +189,7 @@ Xcode 中也可以查看 Mach-O 文件类型
Address Space Layout Randomization地址空间布局随机化。是一种针对缓冲区溢出的安全保护技术通过堆、栈、共享库映射等线性区布局的随机化通过增加攻击者预测目的地址的难度防止攻击者直接定位攻击代码的位置达到阻止溢出攻击目的的一种技术。在 iOS 4.3 引入。
![](https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/assets/ASLROffset.png)
![](./../assets/ASLROffset.png)
- LC_SEGMENT (__TEXT) 的 VM Address 0x10005000

View File

@@ -1,39 +0,0 @@
# 账期
### “账期” 是什么?
账期,又叫**现金(循环)周期**, 是指企业在经营中**从付出现金**到**收到现金**所需的平均时间. 它的变化会**直接影响企业所需运营资金**的数额.
### “账期“ 计算公式
下面的公式就是充分认识”账期“的武林秘籍
```
现金循环周期 = 存货周转期 + 应收账款周转期 - 应付账款周转期
```
### 举个🌰
- 例1:某商贸公司 A, 从供应商 B 赊购100万货物,账期60天; 在自己仓库存储20天后, 以120万的价格出售给 C, 收款时间30天.
A 商贸公司的现金循环周期 = 20天(存货周转期) + 30天(应收账款周转期) - 60天(应付账款周转期) = -10天
这个数字有什么意义呢?
这意味着商贸公司 A, 不仅在这个经营过程中不用垫付任何一分钱,还能多利用应支付的货款100万10天时间.
- 例2:还是这家商贸公司 A, 公司领导把收款时间改为60天,再将付款时间定为30天
A 商贸公司的现金循环周期 = 20天(存货周转期) + 60天(应收账款周转期) - 30天(应付账款周转期) = 50天
这个数字有什么意义呢?
这意味着商贸公司 A,需要为经营最少准备100万,使用期限为50天.
结论:
例1和例2, 虽然变化的都是账期,但是最终现金周期却差别巨大,所需运营资金更是天差地别.
### 你的 “账期” 也需要管理
各个企业拼命都在让企业保持充足的现金流,让每日公司运营的成本最低. 根据上述公式也就是拼命**延长应付账款时间**, 同时拼命**缩短应收账款时间、商品生成周期、商品在库时间**的内在商业逻辑. 能够保证**长期充足的现金流**是企业的核心能力之一.

View File

@@ -1,30 +0,0 @@
# 存款准备金率的衍生知识
​​”降准“可能大家都会从新闻联播上听到,很多人可能不太懂它具体是什么意思?降准是简称,全称是「**降低存款准备金率**」.
率,亘古不变就是一个数字除以另一个数字. 比如利率就是利息除以本金. 汇率就是在货币兑换的过程中用一种货币除以另一种货币.比如用100人民币换了 15美元,100/15 = 6.5,也就是1美元对人民币的汇率为6.5
**银行的职能: 存钱、贷款**. 在我们眼中银行非常有钱,因为无数的企业、个人都从银行借钱. 似乎银行就是有钱的代名词.
可是,问题来了,银行的钱来自哪里? 或者开银行的人的哪来那么多钱? 其实答案就是”借“. 可以说「近现代几乎所有的金融活动,本质上都离不开借」. 问题是银行向谁借钱? 背后的金主是谁? 答案再普通不过了,我们生活中的每个人都是银行的金主,都在向银行借钱,这个借钱表现为——向银行存款,也就是银行欠了我们的钱. 是不是觉得”哇,原来银行的本质是这样的, 那他们到底有多少钱是自己的?“ 可以说一个银行,大约不到10%的钱是自己的. 中国的银行资产负债率大多数在90%以上. 所谓资产负债率就是总资产里面,有多少钱是负债(指借钱).
银行就是做存款和借贷的. 人们把钱存进去随时有可能取出,那么银行又要把钱借贷给其他人,但又怕人们取出钱,这就是一个矛盾点(定期存款也一样可以随时取出,只不过就不能享受那么高的利率了).假如你银行的利率为3%,贷款利率为5%,中间的差价2%就是银行的收入来源,用来维护银行的开销收支.
既然把钱存到银行,大多数人,大多数情况下,是不会全部把钱取出来的。至少,通常情况下,大家不会步调一致的、同一个时间把钱全部取出来。这既是一个生活常识,也是经过长期的统计得出的结论。总之,这个判断是靠谱的。
这样银行就可以把钱借贷给其他人或者企业,银行留一部分钱用来给随时取钱的人,可是留多少钱合适?我们去取钱,银行说没钱了.这种事情我们不能接受、人民不能接受、国家不能接受.(银行失信于人是很可怕的)
这种情况有2个保障:国家出手管制、银行自身自律.
国家对银行是“你把别人存在你那里的钱,拿一部分存在我这里”.存在国家的那部分钱,国家是不会再借给别人的,讲道理是非常保险的,这也是老百姓把钱存在银行的安全保证、也是最后的保证.
这个保证关系到银行的信誉. 银行的信誉也就是整个金融体系的信誉,整个金融体系的信誉也就是国家的信誉,如果失去这一点,后果不可设想...
**银行准备金也就是银行把人们存入银行的钱拿给国家的那部分钱.银行每吸纳我们这样的人一百块钱存款,他要交给国家多少呢?这个比例就叫做存款准备金率**. 比如我们国家这一次降准之后大型金融机构的存款准备金率就是15.5%中小型金融机构的存款准备金率就是13.5%。
也就是说对于大型金融机构来说他每吸纳一百块钱的存款要向国家交15块5。剩下的84块5他才能够用于对外贷款当然实际操作中他还要留一部分钱预备我们这些储户随时到他那里去取钱。存在国家那里的那一部分准备金不是随随便便可以用的从逻辑上只是为了应付突发事件。对于中小型金融机构来说也是一样的道理。
**存款准备金率, 就是银行存放在国家那里的那部分钱,占他所吸纳的总存款的比例**
理解了存款准备金率以后。我们也就很好理解降低存款准备金率是什么意思。就拿这次来说对于大型金融机构来说也就是把存款准备金率由原来的16%降到15.5%也就是降了0.5个百分点。这也就意味着降准以前银行每吸纳一百块钱存款他要在国家那里存16块钱。降准以后它只需要在国家那里存15块5。这意味着他留在自己手上的钱多了五毛。这就是存款准备金率的来源和功效也是银行在接收了你我这些人的存款之后背后操作的内幕。
事情说到这儿,似乎基本说清楚了。但事实不是这样。恰恰相反,它才刚刚开始。因为,如果存款准备金仅仅是为了保证你我这些储户的资金安全的话,我们其实完全可以不去管它,因为我们在心理上,还从来没有担心过,我们存在银行里的钱的安全问题。相反我们口口声声地说,钱存在银行里是最安全的。所以如果存款准备金只是这一个原始的含义,那么国家降不降准,对我们应该没有太大心理上的影响,我们也不会去关心它,更不会去热火朝天地议论它。

View File

@@ -1,30 +0,0 @@
# 降准的魔法效应
6月24日央行宣布降准0.5个百分点。存款准备金率由16%降为15.5% 意味着什么? 对于大型金融机构来说降准之前他每吸纳100元存款就要存16块钱到国家那里。降准之后它只需要存放15块5到国家那里。
这样说来,降低或者提高存款准备金率,主要是为了保证我们这些储户存在银行里的钱的安全问题。但之前的文章的最后说了,降低或者提高存款准备金率。它的意义远远不止这些。
它的意义在哪儿呢?它的意义在于,可以增加或者减少市场上货币的供应量。这里先做概述「**降准可以增加市场上货币供应量、升准可以减小市场上货币供应量**」
以大型金融机构为例。原来吸纳一百块钱存款手上可以留84块钱。这84块钱他可以再借给别人这意味着市场上存在着84块钱的货币供应量。而存款准备金率降低0.5个百分点之后意味着它吸纳一百块钱存款之后手上可以留84块5。这意味着市场上存在的货币供应量由84增加到84.5。增加了五毛钱。
不要小看0.5。由于金融机构吸纳的存款总额非常大每一百块钱的存款增加五毛钱的货币供应量。那一千1万一亿十亿百亿的存款分别能增加多少货币供应量呢毫无疑问月到后面这个数字越大。
假如,我们国家目前所有金融机构的存款余额大约是140万亿。这次存款准备金率降低0.5个百分点。用140万亿乘以0.5%结果是7000亿。所以我们在很多文章上都可以看到7000亿这个数字。这一次降准市场上可以增加7000亿的货币供应量。
事实上这一次降准0.5个百分点市场上可以增加的货币供应量远远不是7000亿而是大约5万亿。也就是7000亿的7倍左右银行怎么做到的?那不得不谈谈银行的本质和工作原理(存款、借贷)
还是从我们把一百块钱存进银行说起。
以大型金融机构当前15.5%的存款准备金率为例。当我们把一百块钱存到银行。那么他需要拿出15块5存放在国家那里剩下的84块5他可以对外贷款。当他把这84块5毛钱都贷款给别人以后会是什么样子呢
自然这84块5毛钱就变成了某个企业的钱或者某个个人的钱。不管这些企业或者个人将要把这些钱用作什么用途有一点是可以肯定的。那就是在绝大多数情况下他不是把这些钱取成现金放在自己口袋里或者压在自己枕头下或者放在自己的床底下或者保险柜里。
他会怎么办呢?答案很简单,他还是会把钱继续存在银行里。问题就出在这儿。
因为这样做会产生非常神奇的效果会让银行像变戏法一样变出钱来。我们用生活常识就可以得出判断。那就是这84块5毛钱又变成了银行所吸纳的存款。
银行新吸纳了84块5毛钱的存款之后会怎么办呢规则不变,那就是要把这84块5毛钱的15.5%,存到国家那里,剩下的部分,银行还可以用于对外贷款。剩下的钱也一样,拿到的人将钱继续存入银行,银行在规则不变的情况下继续将拿到钱的15.5%拿给国家,剩下的84.5%用来继续投资.
其实上面的问题不应该是经济学关心的问题,而是数学领域关心的问题.所幸这问题非常简单,计算的结果是n倍,这个n的具体数值,就是**存款准备金率的倒数**. 比如当前的存款准备金率是15.5%,那么这个n就是 1/15.5% = 6.5,6.5有一个专门的称呼,叫做:**货币倍数**。当我们知道了货币倍数的原理就可以根据降准和升准对市场上资金的影响的具体值. 比如某大型金融机构直接释放的存款是5000亿,货币倍数是6.5,那么市场上多出的钱就是 5000*6.5亿​​​​

View File

@@ -1,34 +0,0 @@
# 揭开″定向降准″的神秘面纱
> 可能你听过“-降准”,可能懂它的意.那你知道“定向降准”是什么意思吗?这篇文章带你揭秘
之前的文章说到,这一次的降准释放了7000亿的资金根据货币倍数的原理大约可以向市场上提供将近5万亿的货币供应。那么这些钱会流向哪里呢
那就不得不谈谈“定向”.所谓**定向,就是指这一次降准释放出来的资金只能用于指定的用途,而不能用于其他。而这个指定的用途,自然是不包括股市和楼市的**。
这一次的降准是定到了哪个方向呢?两个方向。
一个方向是**债转股**。债转股是什么意思呢?**就是说有很多企业向银行借了钱,到期是要还的。实行债转股之后,银行就可以不让他还钱,直接把这个债权转成股权**。
这样说貌似还是不太懂那么就举一个具体的例子。比如说某企业有净资产9个亿。他同时在银行贷款了1个亿。还款期限是今年10月底。正常情况下他在10月底以前必须要筹到钱把这1个亿的资金还上。有了债转股这个政策之后。银行可以让他下属的资产管理公司跟他说“算了你不用还银行的钱了那1个亿算我投资我来当你的股东”。于是两家算账这个企业原来的净资产是九个亿加上银行的这一个亿就变成总资产十个亿。其中资产管理公司的投资是一个亿占股比例是10%。
那资产管理公司的这一个亿的钱从哪儿来呢?自然是银行贷款给他。那银行贷款给资产管理公司的钱又是从哪儿来呢?自然是来源于这一次降准当中释放出来的钱。
这么一种操作,你说钱会不会流向股市和楼市?
上面说的是这种操作的背后本质,在具体的操作程序上通常是这样的,这里也顺便说一说:
第一步,银行基于这样一个宏大的规划,向资产管理公司贷款一个亿。
第二步,银行将自己所拥有的债权转移给资产管理公司,而资产管理公司支付给银行一个亿的资金。这样,银行贷款给资产管理公司的一个亿的资金,又回到了银行,于是银行的风险解除。与此同时,企业欠银行的钱就变成了欠资产管理公司的钱。从逻辑上讲,到这一步,企业依然要还钱的,只不过还钱的对象由银行变成了资产管理公司。
第三步,资产管理公司和企业签订合同,放弃这一个亿的债权,而同时拥有一个亿的股权。到了这一步,对于企业来说,它就不需要还钱了。但同时它又多了一个股东,这个股东就是资产管理公司。对于资产管理公司来说,他没有权利要求企业还它的欠款了,但他成了企业的股东,所以他可以从企业的收益当中分红。
走到这一步,债转股的过程就全部走完了,当然还会有后面的故事。后面的故事大致情节是这样的:在这种情况下成为股东,他并不是真心要当这个企业的股东,只是想帮助企业渡过难关,所以当企业经营状况好转的时候,这样特殊的股东就会通过适当的方式,把自己的股权再转移出去。转移出去之后,他失去了股权,但会得到一大笔资金,他可以用这笔资金偿还银行的贷款。
第二个方向,那就是:**小微企业贷款**。
这个方向的分析要简单得多,没那么复杂。**一言以蔽之,就是这释放出来的资金,只能借贷给那些小微企业**。而且对这些小微企业要进行甄别的,在甄别的过程中,搞房地产开发的小微企业自然是会被筛选掉的。
所以说这一部分钱也不会流向股市和楼市。
总之,从定向的两个方向分析可以知道,这一次降准所释放出来的资金不会流向股市和楼市。
虽然不会直接流向股市和楼市,但是还是会有间接的因素,让股市和楼市的资金供应变得更加充裕一些。怎么回事呢,以后文章再说

View File

@@ -1,10 +0,0 @@
# 股市飘来了降准的芳香
之前的文章讲了**定向降准,大型金融机构多出来的钱会用于指定的方向(债转股、小微企业贷款)**. 所以理论上市面上多出来的这些钱不会直接进入房地产和股市. 那这么讲吧,在国家没有降准的时候这些企业向银行借贷的钱,到了还款之日,企业就不得不向民间、或者其他来源去筹集资金向银行还款,有了债转股,企业就不需要筹集资金,那么市场上多余的这部分资金就可以用于其他用途,或多或少都会进入股市、楼市.
所以说债转股虽然不会直接将资金流入股市、楼市,但是多多少少或间接增加股市、楼市的资金供应量.
小微企业贷款也是上面的思路,本来要向民间或者市场借款去维持小微企业运转,现在国家降准后,大型金融机构、小型金融机构多出的这部分资金就可以按照定向降准用于指定的用途了,比如这里所说的方向2,小微企业贷款,那么国家在未发布降准的时候,小微企业要贷款去运营,发布降准后金融机构按照政策贷款给小微企业,那么市场上多余的这部分资金一样会用于投资,或多或少会进入股市和楼市.
或者说某些小微企业本来不缺钱,但是看到有这样的政策,他肯定会去贷款,这个钱到手后可以用来托大经营规模或扩展市场改善生产经营,也有可能用于其他用途,如果用于其他用途,难免不会进入股市、楼市
**定向降准,虽然并不是针对股市和楼市,但是对股市和楼市的资金供应还是有正面的积极作用。不管它的作用大小,总之是有的**

View File

@@ -1,3 +0,0 @@
# k 线图学习
## k 线的参数、构成、分类

View File

@@ -1,17 +0,0 @@
# 亚洲金融危机两三谈
> 借钱是近现代金融危机、金融现象的一个重要看点.
1997年泰铢下跌的危机.泰国政府采取了三项反击策略,其中之一就是提高**利率**. 而在随后香港政府的金融危机的反击政策也是提高利率.可以说**当外汇汇率下跌需要进行政府干预时,央行提高利率是最常见的做法**.
为什么提高利率可以遏制金融危机? 因为索罗斯发起的金融危机本质上是大量借钱,买到大量目标国家的货币(泰铢),然后疯狂卖出(做空).造成市场上存在大量的目标国家的货币,大家都知道价格是由供求关系决定的,市场上该国货币供大于求,造成外汇汇率下降.
如果你会好奇疯狂卖出泰铢怎么赚钱? 这个回答就和股票一样, 当你散播某些消息或者其他某些原因, 金融玩家疯狂卖出手中的泰铢或者股票, 普通民众跟风卖出, 造成市面上充斥着大量的泰铢或者股票, 那么单位泰铢或者股票的价格会下降, 然后金融玩家偷偷让其他合作者或者小账号买入大量泰铢或者股票, 等市场回暖便卖出获利.
为什么政府提高利率会克制汇率下跌? 当有钱人知道利率上升时, 他就会衡量把钱存入银行赚钱还是参与金融活动赚钱,要是金融活动的获利风险大,且获得的回报不如银行利率提升后的回报,那他肯定会选择存入银行.当手里没钱的人想从银行借钱去参与金融活动时,他就会考虑一样的问题,金融活动获得的回报是否大于从银行获得的回报.这样可以有效反抗一波金融危机.
2018年阿根廷比索断崖式下跌,阿根廷政府将指标利率(七天期LELIQ)大幅上调1500个基点由45%升至60%.1.把利率提高到如此高的程度,说明阿根廷政府知道情况已经很糟糕了.
可以看出来,外汇市场水很深.

View File

@@ -1,12 +0,0 @@
# 提高利率的副作用
> 利率提高也有很多副作用.俗话说“杀敌一千,止损八百”.
1997~1998年的亚洲危机这场金融危机中,国际金融玩家索罗斯连续攻占了泰铢、韩元、印度尼西亚盾、马来西亚林吉特4个国家货币后,1998年1月和5月开始对港元进行攻击,当时的香港金管局局长任志刚,获得了一个稍带贬义的称号“任一招”,因为面对接二连三的金融攻击,采取了同一招“提高利率”.
为什么说这个外号略带贬义呢?因为这一招的实际效果不好,而且产生了很多副负面作用。
1. 提高利率的负面作用之一是表现在股市上。提高利率的后果就是提高资金的使用成本,这当然可以遏制市场上的金融大玩家和金融小玩家来卖空货币,其背后的作用机理在上一章已经认真地说过。但是这同时也提高了在股市上操作的资金成本,所以有很多人就会从股市撤出资金。一方,面在股市玩股票的很多人是借钱在玩,由于利率提高了,成本增加了,他们就不再借钱玩儿了。另一方面,有更多的人更愿意把钱存到银行,赚取利息,而不愿意把钱放在股市去炒作股票。前面我们说过,任何一种商品,包括萝卜白菜之类的实物商品,也包括股票或货币这样子的特殊商品,只要市场上的需求下降了,也就是买的人少了,价格就会下跌。总而言之,大体的结论是,提高利率对股市的影响是股市下跌。股市下跌自然不是什么好事儿。当然,为什么股市下跌不是什么好事,这又是另外一个问题,我们以后有机会了再说。总之不是好事儿,所以算是提高利率的一个负面作用.
2. 提高利率的负面作用之二是表现在实体经济上。这个负面作用应该比第一个负面作用更加要命。实体经济是整个社会经济的基础中的基础。虚拟经济说到底只是为实体经济服务的。炒作外汇股票之类的虚拟经济说到底就是玩钱玩来玩去并不创造社会财富。而办工厂、做贸易却是实实在在地创造社会财富所以叫实体经济。全社会的人要想日子过得好点儿归根结底是要实体经济发达。可是提高利率既提高了虚拟经济当中的资金成本同时也提高了实体经济当中的资金成本。打个比方如果银行利率是5%一个企业问银行借了100万块钱一年要支付5万块钱的利息如果他用这100万块钱赚到了7万块钱那么一年之后他还清了100万块钱的本金又还清了5万块钱的利息最后他还可以赚2万块钱。如果银行利息提高到8%那么他一年就要支付利息8万块钱而他一年只赚了7万块钱于是他还亏本1万块钱。或者情况比这好一点他拿着100万块钱一年可以赚10万块钱那么在利率是5%的情况下他还清了本金和利息之后他另外还赚了5万块钱。但是当利率提高到8%的时候他还清了100万的本金和8万块钱的利息之后他只赚了2万块钱。他原来可以赚5万现在却只能赚2万虽然还能赚钱但是生产的积极性却大大的降低了。总之不管是亏本还是因为虽然在赚钱但赚钱数量减少总之都是对实体经济的伤害。
中央政府和香港政府联合作用下,打赢了这场金融危机.

View File

@@ -1,13 +0,0 @@
# 白话贸易战
之前和阿里巴巴商学院学弟聊天,讲到了贸易战。他说应该同意美国提议,让中国更加开放。让美国低价优质商品进入国内,让大家提高生活质量
抛开正确与否。美国不是慈善家。早前我们国家答应了美国的大豆出口。刚开始美国大豆凭借低价格、高品质快速取得了国内市场,大家纷纷购买进口大豆。这样国内种植大豆的人们都不种植大豆了,因为没市场。等美国发现中国大豆领域没啥竞品的时候就开始疯狂提高价格,人们很难过。
这时候国企出手了,中粮集团将存储的大豆低价投放到市场上。然后政策和资金鼓励农民种植大豆。
美国搞芯片的模式是通过资本手段(发行股票和债券)以及风险投资为创业公司注入资金,创业公司获得资金支持后,进行持续的技术创新获得市场,提升公司估值,然后上市,风险资本卖出股票获利退出。这种模式以市场为导向,效率高,但体量小,公司之间整合资源难。造就了一批芯片企业。
日本在70年代开始发展芯片企业。模式是集中力量办大事。这种模式很可怕举国之力办芯片很快发展起来后以低价高性能占领本国市场之后走向全球占领了 Intel 的市场,让美国芯片企业裁员。这些企业见识到日本芯片的可怕,以芯片是军工的核心为由向政府汇报。美国很看重军工的,之后就提高税率,让日本政府保证美国芯片在日本国内份额不能低于一定额度,这样日本芯片基本就没能好好发展。但是不至于消亡。
因为日本和美国搞事情的时候,韩国 DRAM 钻了空子,趁机发展。讨好美国,美国都在大规模使用韩国的芯片,遂日本芯片行业破灭​​​​

View File

@@ -1,14 +0,0 @@
# 股票的本质是帮助企业高飞
> 半小时洗澡过程中的思考
很多人在玩股票,但是对于股票、股市的认知却不够。本人不玩理财,却在最近自学金融和经济学相关的知识。谈一谈个人理解吧。
股票最早诞生于资本主义国家。17世纪初随着资本主义大工业的发展企业生产经营规模不断扩大相应造成资本短缺。「资本」不足便成为制约企业经营和发展的重要因素之一。为了募集更多资本于是出现了以「股份公司」形态由股东出资共同经营进而将筹集资本的范围扩大到社会产生了以股票表示投资者投资入股按出资额大小享受权益和分红。世界上最早的股份有限公司是在荷兰成立的东印度公司。
16世纪商人在荷兰阿姆斯特丹进行荷兰东印度公司的股票买卖交易形成世界上第一个股票市场。
讲道理,上市公司是为了资本匹配的,通过发行股票,将社会资本给了最需要的企业 。有些上市公司增发股票,可能是出发点好,继续扩大经营规模,可是还是存在一些“差强人意”的企业,通过增发股票,(可能自己本身就有很多现金流)吸收更多的社会资本去理财(炒楼、买股票、借贷给第三方企业等),这算是对社会资源的极大浪费。
股票的价值就是:**最强的创始人带着最牛的团队去做最有价值的事情,创造更大的价值**。

View File

@@ -1,8 +0,0 @@
# 需求是分层次的
需求是分层次的比如马斯洛理论。但这个层次的概念存在于大多数的场合在职场中也是一样。比如一个高级工程师的招聘是为了部门需求那么你的薪资可能是20k部门存在的意义是为了公司需求财务部为了处理金钱有关的一切、法务部、人力资源部...那么作为部门的领导你的薪资可能是35k公司存在的意义是为了服务客户市场需求满足用户什么样的问题、这个产品如何帮助人们提高效率等那么作为公司的Boss那么薪资可能是100k。
所以对于即将步入社会或者已经在社会中摸索的同学们应该懂得什么是自己上升的最根本的原因。当然自己的硬实力也是非常重要的一部分。
但切莫眼光局限,被动改变。比如部门需要员工一个什么证书,你就去报名学习,需要一个什么学历你就马上报班考研。​​​​

View File

@@ -1,7 +0,0 @@
# 炒期货比炒股风险高的本质原因
​​一般人都知道炒期货比炒股风险高。知其然但是不知其所以然。原因有几个点:
1. 期货必须使用现金交易;
2. 要想高收益必须使用杠杆的力量
3. 需要长期持有再交易。这几个原因就决定炒期货的风险要高​​​​

View File

@@ -1,14 +0,0 @@
# 浅谈一带一路
先聊一个现象。有些东西明明价格很低,卖不出去。然而这些生产者在卖不出去的情况下即使扔掉、倒掉、销毁掉,却不给那些穷人或者需要的人。以前不明白为什么。
举个例子,亚马逊和很多品牌企业有合作,由于种种原因这些东西卖不出去。那么出于要更换商品等其他原因,这些商家宁愿当作垃圾销毁也不给那些有需要的人。为什么?
在卖不出去,价格再低的情况,你如果再白白送给那些人,那市场的需求就更低了。更加没人愿意买。
“产能过剩”和“一带一路”有关系吗还真有。目前中国面临的一个问题就是产能过剩生产的钢铁、家电等等都供大于求价格很低了。为了更好的发展国家用差不多4000亿美元用来搞“一带一路”很多国家也参与进来和中国签订合作。这样有什么好处中国提供资金给这些国家然后这些国家的新项目都用人民币来交易了。那么可以更好的让人民币走向世界。如果越来越多的国家用人民币进行交易那么人民币的地位上去好处非常多。
一般来说,国内房价的上涨和不断印币有关系。以前这个价格可以买一套房,现在不断印刷人民币,那么需要买这样一套房的总价就要上去。普通老百姓一般都是储蓄,很少跑赢通货膨胀。所以就又不断贷款,依次循环。
保「房价」、「货币」?为什么保护货币?因为一个国家的货币代表着这个国家的信誉。代表着国际地位等。俄罗斯、日本等都面临过和中国一样的问题。俄罗斯选择保护房价。日本选择保护货币。都有劣势。我们国家选择保护货币和控制房价。通过政策抑制房价上涨、抑制人民币的借贷。

View File

@@ -1,34 +0,0 @@
# 隐形的投资你看得到吗?
> 生活中每天都发生着各种投资,有些很传统一眼可辨,有些比较神秘,你可能不认识它,文章为你揭秘
1. 彩票彩票不属于投资它更多类似于赌博。低额的门槛去尝试取得n倍的回报。之前看到过一些数据世界各国通过彩票中奖的人挺多的而且是高额的中奖。有人追踪过这些人的结局基本都是破产或者千金散尽。因为彩票手段获取的财富一点都不会珍惜基本都是挥霍并且摧毁这些人踏实工作或者认真生活的能力。
2. 贵金属:黄金、白银等贵金属,基本都属于期货。很多人没有大量的现金交易,所以基本采取保证金交易。这样子就会造成无上限的投资。因为是期货所以利用杠杆的手段,加上需要时间的因素(类似于囤积居奇),等到几十年找到合适的时机换取巨额回报,但是一般人根本不会有这样的机会,且成功的比较少
3. 古董:如果是古董世家或者本身是专家可以从事。一般人不太适合。因为一般人根本无法判断这东西的真假。讲个故事:之前有人参考一个经济村,全村流水线、工厂模式生产假古币(各种朝代的铜钱、刀型币等等)。最后按斤交易。(突然发现水很深啊😂)
4. 艺术品优秀的艺术品是非常棒的。可是有些人把它当作资本炒作的时候就很恶心了。艺术品的恶劣交易和炒资本一样。一批投资者找到一个合适的画家合作者一般都是年纪40左右 画画水平可以但是名气不大。谈好合作模式。几位操盘者帮这个画家报名了几乎所有的画展一般人的画假如300万这个画家的画被这些投资者抬高然后投资者自己出手买到。一般是高价比如500万。然后参加了几乎所有的画展交易后这个画家的名气就起来了。等到下一次画展交易有“小白”就会接盘。以高额的价格买了他所谓的名作。之前的几个投资者早就和画家签订了合约每幅画的50%都要参与枫红
5. 域名:早起微博的域名是 weibo.sina.com 后来发现不太好记。有个小孩叫张伟波爱好计算机他父亲就买了一个域名送给小孩。新浪的人知道这事后找到小孩家里人说给你2小时思考一个价格我们不还价。最后880万成交。我觉得要是他不卖给新浪后来腾讯和网易也做过博客要是找上去买的话以腾讯的手笔估计1000万以上吧。同样的故事很多阿里巴巴早起创建的启动资金是50万。马云当时从老外手中用1万美元买来差不多是启动资金的20%。为什么买这个域名?因为全世界小孩学过阿里巴巴与四十大盗的故事,一听到阿里巴巴就是商人。从今天来看阿里巴巴这个域名的价值应该非常高吧
6. 邮票、书籍:这些可以当作兴趣爱好,但是想作为投资的话,成效甚微。
7. 信托:信托门槛非常高。主要投资一些大项目,比如房地产。起步几百万,高风险高收益。
8. 比特币:比特币之前概念很火,但是真的很有前景吗?如果它壮大会冲击各个国家政府的铸币权,这一点是非常可怕的。所以它会作为一些场景下的监督模式,或者现有金融体系的补充模式。
9. 储蓄储蓄不算是投资。20年前的2万块钱可以买一所房子。假如你存银行现在连本带利拿出来连个厕所都不够卖😂。所以储蓄绝壁不算投资只可以说是现金流的一个形式。储蓄基本上贬值的基本跑不赢每年的通货膨胀。同样理财也算是减小或者跑赢通货膨胀大爷大妈在银行购买的理财产品一般在5%左右每年的通货膨胀差不多7%)。
## 画一道分割线。
记者采访巴菲特,你认为最成功的投资是什么?巴菲特说是自己对自己的投资。
这种投资属于「广义投资」。巴菲特举了两个例子。年轻的巴菲特不擅长演讲,他报班学习演讲课程,这让他成就感很足,可以在公众场合进行演讲。另一个例子是他为了研究自己投资或者计划投资的公司的情况,经常找那个公司的职员或者经历,要么自己认识,要么朋友认识介绍给他。他们聊完业务和合作之后觉得对方职业水平很高、思想很棒,就交了朋友,这对巴菲特是非常棒的,优秀的人脉的价值是无限且无形的。
广义的投资是对自己的投资、对自己的人脉、身体健康素质、专业技能、能力、行业视野等
狭义的投资显而易见就是大家经常玩的投资。
随着年龄的增长,你不断成长,广义投资和狭义投资相辅相成,不断互促,良性循环。​​​​

View File

@@ -1,19 +0,0 @@
# 第八部分
第八部分主要记录在学习金融学中遇到的概念、生活中的经济学现象的解读
* [1、“账期”](https://github.com/FantasticLBP/knowledge-kit/blob/master/Chapter8%20-%20Finance/8.1.md)
* [2、亚洲金融危机两三谈](https://github.com/FantasticLBP/knowledge-kit/blob/master/Chapter8%20-%20Finance/8.2.md)
* [3、提高利率的副作用](https://github.com/FantasticLBP/knowledge-kit/blob/master/Chapter8%20-%20Finance/8.3.md)
* [4、白话贸易战](https://github.com/FantasticLBP/knowledge-kit/blob/master/Chapter8%20-%20Finance/8.4.md)
* [5、股票的本质是帮助企业高飞](https://github.com/FantasticLBP/knowledge-kit/blob/master/Chapter8%20-%20Finance/8.5.md)
* [6、需求是分层次的](https://github.com/FantasticLBP/knowledge-kit/blob/master/Chapter8%20-%20Finance/8.6.md)
* [7、炒期货比炒股风险高的本质原因](https://github.com/FantasticLBP/knowledge-kit/blob/master/Chapter8%20-%20Finance/8.7.md)
* [8、浅谈一带一路](https://github.com/FantasticLBP/knowledge-kit/blob/master/Chapter8%20-%20Finance/8.8.md)
* [9、隐形的投资你看得到吗](https://github.com/FantasticLBP/knowledge-kit/blob/master/Chapter8%20-%20Finance/8.9.md)
* [10、存款准备金率的衍生知识](https://github.com/FantasticLBP/knowledge-kit/blob/master/Chapter8%20-%20Finance/8.10.md)
* [11、降准的魔法效应](https://github.com/FantasticLBP/knowledge-kit/blob/master/Chapter8%20-%20Finance/8.11.md)
* [12、揭开″定向降准″的神秘面纱](https://github.com/FantasticLBP/knowledge-kit/blob/master/Chapter8%20-%20Finance/8.12.md)
* [13、股市飘来了降准的芳香](https://github.com/FantasticLBP/knowledge-kit/blob/master/Chapter8%20-%20Finance/8.13.md)
* [14、K线图学习](https://github.com/FantasticLBP/knowledge-kit/blob/master/Chapter8%20-%20Finance/8.14.md)

View File

@@ -1,114 +0,0 @@
# "CFA 证书" 不再那么神秘
> CFA 证书作为证明猫咪血统纯正的一个材料,大多数人知其然,不知所以然。本文的目的就是教你看懂 CFA 证书和判断真伪。
## 一、 CFA 证书是什么
先看一张 CFA 证书的图片,是我家 Simba 的证书。
![CFA-Certificate](https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/master/assets/CFA-Certificate.png)
不难发现 CFA 证书就像我们日常的身份证一样,虽然没有猫的照片,但猫咪的其他信息一应俱全,花色精细到色号,父母和主人的信息也都在上面。具体每个字段的意思我已经在图上打好圈圈了,每个圆圈的信息都是一个独立的信息点。
所以图上每个圆圈的信息都应该和你的掌握的有效信息前后形成逻辑闭环,比如 `OWNER``DESCRIPTION` 等信息全都对得上之后,那么这个 CFA 证书很大程度上就是一个真实有效的证书。还不能百分百确定,具体的还需要下文中的方法去判断。
学会看和查一张证书上的信息,五代血谱已经基本可以过滤大部分后院和假证了。
它有什么作用呢?可以证明猫咪是纯种的。算是某种装逼意义上的象征吧,可以用来做繁育、打比赛的用途。
## 二、 CFA 证书真伪
上面看了 CFA 证书的例子,对比下面的文字解释再次查看上图。
1. 繁育此小猫的猫舍名(需与猫舍证书上所登记的一致)
11
2. 本猫名字可要求猫舍注册时填写自己取的名字一般猫舍在小猫订出去之后才会为小猫注册证书。这里需要说明的是我的猫是具有繁育权的所以这里名字最后没有NOT FOR BREEDING
3. 猫咪花纹级颜色(需与购买的猫咪花纹颜色一致,具体英文所对应中文花色见附一)
4. 品种官方名称布偶猫为ragdoll
5. 性别neuter绝育公猫spay绝育母猫male未绝育公猫female未绝育母猫
6. 猫咪出生日期(月/日/年)
7. 公猫全名(与公猫证书以及五代血普一致)
8. 母猫全名(与母猫证书以及五代血普一致)
9. 猫咪所有人的名字(可要求猫舍在此处登记购买者的名字,可登记多人)
10. 猫咪所有人的地址(可要求猫舍在此处登记购买者的地址)
11. 猫咪花纹对应的官方颜色编号(具体见附一)
12. 繁育者姓名(一般为猫舍主人,与猫舍证书上的人名一致)
13. 注册日期(此日期不应早于买家提供个人资料日期)
14. 窝次编号(在绿色证书出来之前,猫舍一般会先整窝注册,此处为注册窝次时的编号,可要求猫舍提供窝次注册时的蓝色证书,核对编号是否一致)
可能有些人会好奇,为什么我的猫咪的母亲的编号是 **0463**
那就来继续科普下,下图是来自 [CFA 官网](https://cfa.org/breeds/color-prefix-chart/)对布偶猫的颜色划分。
```shell
RAGDOOL
0080 RAGDOLL FOR BREEDING ONLY
0420 RAGDOLL LYNX MITTED
0422 RAGDOLL LYNX POINT
0424 RAGDOLL LYNX POINT-WHITE
0426 RAGDOLL LYNX POINT-WHITE VAN
0430 RAGDOLL OTHER MITTED COLORS
0432 RAGDOLL OTHER POINT COLORS
0434 RAGDOLL OTHER POINT-WHITE
0436 RAGDOLL OTHER POINT-WHITE VAN
0460 RAGDOLL CHOCOLATE MITTED
0462 RAGDOLL SEAL MITTED
0464 RAGDOLL LILAC MITTED
0466 RAGDOLL BLUE MITTED
0470 RAGDOLL CHOCOLATE POINT
0472 RAGDOLL SEAL POINT
0474 RAGDOLL LILAC POINT
0476 RAGDOLL BLUE POINT
0480 RAGDOLL CHOCOLATE POINT-WHITE
0482 RAGDOLL SEAL POINT-WHITE
0484 RAGDOLL LILAC POINT-WHITE
0486 RAGDOLL BLUE POINT-WHITE
0490 RAGDOLL CHOC POINT-WHITE VAN
0492 RAGDOLL SEAL POINT-WHITE VAN
0494 RAGDOLL LILAC POINT-WHITE VAN
0496 RAGDOLL BLUE POINT-WHITE VAN
```
注意:**以上的编号为公猫编号,相同颜色的母猫编号则为对应公猫编号+1**。
所以 Simba 母亲是一只海豹手套母,则编号为 0462 +1.
那么到底如何辨别证书的真伪:
1. 看 CFA 证书的信息,如果所有的信息和你已知信息吻合,则进行下一步的验证(猫咪信息、猫舍信息、品种、拥有者、注册日期、猫咪父母亲信息等等)
2. 访问 [CFA 官网](https://ecat.cfa.org/public/hermanonline.aspx),在 Registration Code 的地方输入证书编号
![示意图](https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/master/assets/CFAWebsite.png)
3. 点击 “Show Report” 按钮,查看 “**Grand Scoring show records for**" 右边的猫咪信息是否匹配。
4. **Cumulative Grand Points** 后显示的是猫咪比赛获得的分数。
5. 如果猫咪在 CFA 官方没找到信息,则显示 “sorrythe cat registration number you provided does not exists.”

View File

@@ -1,368 +0,0 @@
# 猫咪饮食
> 首先先抛出一个结论:本人还是比较推荐生骨肉,哪怕不能做成营养均衡的主食,就算是当零食吃,每周最好也给保持足量的鲜肉摄入,哪怕就是只有一块鸡胸肉,也好过天天吃肉粉小饼干。
## 一、 生骨肉能喂否
先说一下个人赞成生骨肉喂养。
![多种肉](https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/master/assets/Rawmeat1.jpg)
![三文鱼](https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/master/assets/Rawmeat2.JPG)
![全牛肉](https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/master/assets/Rawmeat3.jpg)
群里面经常看到讨论生骨肉的话题,哎呀猫猫这么小,能不能给喂肉吃啊,是不是等半岁/一岁等等各种神奇的时间节点后再喂比较好呢,也不知道这个时间节点从哪来的。
众所周知,猫在野外都是吃荤的,各种小动物都是他的猎物,比如鱼、鸟等
亿万年的自然演化后最适应猫咪的饮食方式,居然被质疑不如近几十年才出现的,首先是为了饲主方便的才出现,其次才考虑到猫咪营养均衡的猫粮。
哪个更像骗局,我假装自己没看出来。
<img src="https://pic2.zhimg.com/50/v2-5799f351a1ea1937d44cc782db5cf93b_hd.jpg" data-caption="" data-size="normal" data-rawwidth="239" data-rawheight="189" data-default-watermark-src="https://pic3.zhimg.com/50/v2-c56b3a15c324d654499c60249bcad8a5_hd.jpg" class="content_image" width="239"/>
我们大家养猫,首先要明确的一点,**猫咪是肉食动物**,和我们不一样完完全全不一样。所以千万千万不要用自己的经验去类比猫咪所需要的的食物。人对蛋白质的代谢能力是有限的,如果过度摄入确实会对肾脏造成比较大的负荷。但是猫咪和人是完全全的两码事啊,猫是纯粹的肉食动物。
**肉食动物的意思就是,它的能量来源来自动物蛋白质和脂肪,完全不需要淀粉这些碳水化合物。**猫粮中含有大量的淀粉,并不是因为猫咪需要这些淀粉,而是做猫粮这种小饼干,不得不添加淀粉。
这些淀粉会对猫咪的消化造成比较大的压力是造成家养猫粑粑臭破天际的主要原因消化不了的淀粉在肠道内发酵直到变成生化武器投放出来。所以我们能看到越好的猫粮淀粉含量越低有的能低到20%以内,而一些不太好的猫粮中,可能有超过一半的成分都是猫咪不需要的淀粉。
实在理解不了不同动物食性不同的,建议从今天开始,天天吃干草,牛羊都是靠吃这个长了一身腱子肉的。就下图这个玩意。
<img src="https://pic1.zhimg.com/50/v2-05b378df3ec01342ad6102831004f57f_hd.jpg" data-caption="" data-size="normal" data-rawwidth="750" data-rawheight="556" data-default-watermark-src="https://pic3.zhimg.com/50/v2-fecffa302d316b502116b76fdb47a10e_hd.jpg" class="origin_image zh-lightbox-thumb" width="750" data-original="https://pic1.zhimg.com/v2-05b378df3ec01342ad6102831004f57f_r.jpg"/>
是不是第一反应是这TM能吃
没错,猫看着淀粉也是这种感觉。
<img src="https://pic1.zhimg.com/50/v2-4f7993c7ef824ddaa29f20b9b8fa8e2e_hd.jpg" data-caption="" data-size="normal" data-rawwidth="197" data-rawheight="187" class="content_image" width="197"/>
**猫粮中除了必须添加的淀粉外,还有一个很致命的缺点,就是会导致猫咪慢性缺水。**
猫咪通常靠新鲜的肉类来补充水分,新鲜的肉类看着一大块肉,其实里边含水量真是不少,只不过这些水不是以自由流动的水的形式存在的,是结合水。
香蕉就是典型的结合水含量很高的水果虽然咬一口感觉没什么汁水但是本身却有高达80%左右的成分是水分。
掐断鲜肉这个补充水分的途径后,猫咪就只能依靠喝水来补充了,但是猫咪的天性又是不太喜欢去喝水的,所以长期干粮喂养,会导致猫咪慢性脱水。在猫咪老年后,脱水是导致尿路结石的最大元凶,尿路结石还是挺常见的一种毛病的。
所以对比来说,生骨肉相对猫粮的好处有:
1、更符合猫咪的天性这是亿万年进化抉择的成果。
2、更多的动物蛋白。
3、更多的水分。
4、没有淀粉。
但是生骨肉也不是没有缺点:
1、相比猫粮喂食过于麻烦这就是生骨肉一直被推荐却始终是非主流的原因。亲自处理过生骨肉的恐怕想起肉类处理-分装-冷冻-解冻这个繁琐的流程就头疼。
2、有潜在的寄生虫风险这也是很多萌新望而却步的原因家用冰箱的冷冻可以有效处理掉绝大部分的寄生虫其实问题没那么大更何况现在有-40度冷冻的冰箱出现寄生虫基本上无处可逃。
看了半天,猫粮和生骨肉都有很可怕的缺点,似乎啥都不能喂的样子,其实大可不必这么焦虑,只是需要额外的注意一些事情,比如生骨肉如何配比,如何除虫保证安全,猫粮如何补充水分,和充足的蛋白质等等,看起来是挺麻烦的,但是养宠从来都不是一个省事的事。
好在除了干粮和生骨肉,我们还有第三种懒人选择,猫罐头。
猫罐头综合了生骨肉和猫粮各自的优点--更方便,营养搭配更均衡,也避免了他们的缺点--缺水,缺足够量的动物蛋白,淀粉含量过于高。
需要注意的是猫罐头有主食和零食罐头的区分有一个简单区分的方法是否符合AAFCO的标准符合AAFCO标准的可以认为是主食罐头可以长期大量的食用不符合AAFCO的就是零食罐头当做日常调情的小奖励长期食用会由于营养失衡出问题。这只是一个简单的标准不过通常也可以了。
还有一种相当不可靠的说法是,主食罐头是肉泥状的,看着像松软的午餐肉,而零食罐头是食物本身的样子……
emmmmmmmmmm对于这个说法无力吐槽是否主食主要看搭配配比和食物的形态没什么关系主要还是看是否符合AAFCO标准吧。
不过需要避免的是,有不少号称主食罐的罐头,也含有大量的淀粉,如果说猫粮使用淀粉是因为做小饼干不得不使用,那就完全搞不懂罐头为什么会添加大量的淀粉了,是感觉吃肉菜不来点米饭吃不饱???配料表前三位出现淀粉/谷物的可以pass掉了完全就是坑钱的玩意。
猫罐头的缺点嘛,贵。
所以个人结论是:**猫可以吃生骨肉**。
## 二、 生骨肉怎么吃
### 1. 比例
自制饮食最重要的一点就是需要营养均衡。要达到这一点,饮食中动物组织的比例是一大关键。生骨肉遵循的喂食习惯从不要求每一顿饭都精确无比,这很好理解,因为人/动物也不是每顿饭都算着来吃的。在一段周期内饮食配比均衡就足够了。
这个周期通常是一周。猫的饮食比例遵循以下:
```
7-10%骨骼 (初期可蛋壳粉代替,添加量后详)
4-5% 肝脏(必须)
80-85%肌肉组织(包括心脏,胗)
5% 其他内脏 (脑、腰、胰、脾,非必须,有最好)
```
**如何才算“太多心”心脏富含牛磺酸每天吃5个以上鸡鸭兔心都是可以的**
### 2. 添加物
这边我不会说的太复杂把你们吓跑我是不倾向使用昂贵预拌粉这类产品的事实上大量国外生食喂养者也不会使用因为没有任何的必要。以下这些仅仅需要几十元。以下5项中大半在特定情况下能省略大部分添加频率不是每天并不费力。
接触生骨肉喂食你需要以下的补充品:
- **蛋壳粉**
极端重要的钙质来源切忌省略。没有做到7%骨骼摄入前每餐添加。准备好**量勺淘宝购买1/2茶勺及1/8茶勺都是很好的**二分之一茶勺即2.5ml蛋壳粉大约对应450g纯肉/肝脏可适当浮动20-30%。**不要凭感觉放!实际量比你想象的多。**购买来源找淘宝。如何精确添加请参考工具篇。
- **维生素E**
购买人用的维生素E软胶囊**100IU版本**,且必须是**【天然型】**。价格约30元内不用买高价产品。频率一周**一粒**,未成年猫或小体格猫咪可以将这一周期改成一周半到两周**一粒**。这方面的详细解释请看第四章【释义篇】的脂溶性维生素条目。
- **综合维生素B**
水溶性维生素不存在过量。故直接药店购买人用版本100片2元。每一到两天添加一片即可。如果能够大量食用鸭肉、鸭肝视情况可省略。
拓展阅读:[维生素B族详解看着那些术语犯愁呢大可不必](http://mp.weixin.qq.com/s?__biz=MzI0NzE0MDcyMA==&mid=2650692342&idx=1&sn=cbecd29a3a02811cab5fd3d00215da6a&scene=21#wechat_redirect)
- **牛磺酸**
虽然我本人倾向于认为大量的心脏和足够比例的肝脏提供了充足的牛磺酸,但是保险起见还是写在这里。**冷冻并不会完全毁掉牛磺酸但的确会让其损失一部分。引用1**
暂时不存在过量值每两天给一撮即可。淘宝购买20元内。没有必要买高价进口产品全部中国生产品质一样。需要注意的是虽然有提供了这种合成牛磺酸并不代表你的猫就不吃心脏了心脏还是多吃一些。如果能经常、足量食用禽类、牛羊心脏可以省略。
**Omega-3脂肪酸**
每一周到一周半喂自家猫 100-200g 按成年9斤猫算 新鲜购买的,烹饪并去骨的秋刀鱼/鲅鱼/鲐鱼/青占鱼等可以满足omega3脂肪酸需求**请不要用鳕鱼,金枪鱼,龙利鱼替代**。同时鱼是极为关键的维生素D及碘元素来源故更推荐吃鱼而不是吃鱼油。
### 3. 冷冻
| **类别** | **冰冻时间** |
| -------------- | ------------------------------------------------ |
| 品牌冷鲜禽类 | 三至四天 |
| 较新鲜冷冻禽类 | 无需 |
| 活杀鹌鹑 | 三至四天 |
| 品牌鲜猪肉 | 小块分割冷冻22-30天 |
| 冷冻牛羊肉 | 进口肉类可以直接吃,新鲜牛羊切**小块**冻**10**天 |
| 鱼生 | 七天 (但推荐熟吃) |
| 新鲜兔肉 | 五天以上,观察腹腔有无异状 |
| 冷冻鸡鸭兔心肝 | 无需 |
| **季节/室温** | **解冻方式** |
| ---------------- | ------------------------------------------ |
| 春夏 | 置于密封袋后泡水解冻需2小时完成。 |
| 夏,室温较高 | 提前12小时将食材置于冷藏室解冻四季皆可 |
| | |
| 冬室温10度以下 | 可室温解冻或密封泡水解冻3-6小时 |
**解冻完成后请尽快喂食。如开始发粘则丢弃。**
### 4. 卫生
- 所有用于生骨肉喂食的肉都需要经过冷冻处理。
- 需要解冻时,请密封后,提前放置于冰箱冷藏室解冻,或用温/凉水快速解冻,切忌高室温情况下放在空气中解冻!
- 牢记并认真执行卫生操作习惯,事后擦洗台面、刀具、设备,用肥皂彻底洗手(其实很简单很普通,对不对?洗手!)
- 不要让宠物在灶台、厨房台面上乱窜。
- 如果宠物有剩饭超过1小时尽快扔掉
- 肥皂不要掉地上哟
## 三、 动手实践
### 1. 需要什么工具
你所需要准备的工具并不多,非常简便,全部可以淘宝,合起来不足百元。
1. 剪刀
2. 电子秤
3. 量勺
4. 便宜的塑料保鲜袋
5. Ziploc防水袋
6. 可选)一口不粘锅
7. 一个砧板
![猫饭工具](https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/master/assets/CatsFoodTools.jpeg)
### 2. 喂多少?多久喂?
这里就需要各位自己做一下数学和好好用电子秤了。喂食量方面狗与猫食量一样。
- 成年猫/狗每日食量 体重的3%-4%,酌情增加(如发情/哺乳)
- 幼年猫/狗每日食量 体重的10%8%6% (按年龄增长递减)
- 肥胖猫/狗每日食量 体重的2%-2.5%
**那么,需要多久喂一次呢?**
建议是幼年至少3次每天4次5次更佳成年最少2次每天但是3次每天一定更好喂食次数过少很可能造成呕吐。
每次喂食的间隔务必至少达到**4-5小时以上**,过度频繁或者单次过量的饮食容易出现腹泻与软便。猫与狗需要适当的空腹和饥饿感以促进机体的正常运转,他们不需要吃太多。
> **”FAST YOUR CAT“这不是快的意思这里fast是指禁食。如同大型猫科表亲狮、虎一样适当的饥饿与断食有利猫的健康。如果你的猫没有肥胖过度每周挑一天禁食18-20个小时对消化系统是有好处的。还是要给水哦超过20小时不合适误试**
### 3. 如何加工
任何食物在**解冻**后置于密封袋泡在40-50度比平时的洗澡水烫一些的感觉的热水中至温热大约15-20分钟就可以喂食了切块后温热速度会更快一些。
如果食物没有密封直接泡水,不仅气味失去大半,也给了细菌增殖和水溶维生素流失更多机会,这也是为何我推荐大家用 Ziploc 密封袋作为温肉的必备工具----可以重复使用又不渗水。
鸡胸鸭胸和大块猪牛羊怎么办?
可以同样选择上面的隔水泡温,也可以选择:无油煎。锅**烧够热后**放入肉。两面各几十秒到一分钟内立刻关火。这时候如果是工作日的早晨你可以去忙洗漱或者其他的。锅的余温会将肉的内部温至30度左右并不会造成肉被烹熟。
## 四、 食谱拟定与范例
菜谱的拟定可以复杂异常,也可以用逻辑简单思考得出结果:猫野外怎么吃我们怎么模仿其比例。大原则永远不变新鲜的食材符合肉类、骨骼、内脏比例83710足够多样的动物种类就靠鸡鸭万万不可
![生骨肉](https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/master/assets/rawMeat-recipe.jpeg)
食谱范例:针对入门者的初级版本,会吃骨头的进阶版版本**
第一种是基本无骨骼喂食计划表,针对入门者进行了极端的简化,未进行部分微量矿物质的平衡,保证最基础的维生素、蛋白质、脂肪、钙、磷、镁、钾、钠、铁、锌。**该初级版计划表不合适使用超过半年**。已经非常简单了,所以如果没有信心请**不要再简化**
请随意调换顺序哪怕你某一天全部喂鸡肉也可以但是要把缺失的部份在一周内补回。维生素b和牛磺酸可以在每天的任何一顿中添加一次即可。**蛋壳粉则每顿需要**。
> *再次提醒肝脏占总量的5%。肉的种类多多益善,\*只吃鸡肉要不得。**蛋壳粉二分之一茶勺也就是2.5ml对应450g-500g肉是初级版必须的添加品。**
- 橙色是早餐
- 绿色是正餐,喂食时间下班后
- 粉色是睡前餐,喂食时间睡觉前
| 周一 | 周二 | 周三 | 周四 | 周五 | 周六 | 周日 | 喂食时间 |
| -------------------- | -------- | -------- | -------- | -------- | ------------- | -------- | ---------- |
| 任意禽肉 | 任意禽肉 | 禽类心脏 | 任意禽肉 | 去皮鸭胸 | 禽肉+非肝内脏 | 牛肉或羊 | 早上喂食 |
| | | | | | | | |
| 鸡腿带皮 | 牛肉或羊 | 海鱼 | 鸡腿带皮 | 任意禽肉 | 任意肉类 | 去皮鸭胸 | 下班后喂食 |
| *四至五小时以上间隔* | | | | | | | |
| 鸡蛋黄 | 禽类肝脏 | 任意肉类 | 鸡蛋黄 | 禽类心脏 | 任意肝脏 | 禽类心脏 | 睡觉前喂食 |
接下来是进阶版。这是较为理想的、带骨骼、无需蛋壳粉的版本。在你的猫习惯生食与大致学会初步的如何吃骨头后半年内过渡到这个版本是有必要的。此版本来源是catcentric.org我根据国内食材作了细微变动顺序依旧可以按需求变动。你也可以继续修改越丰富多样就是越好的。别忘记内脏大脑、腰子都是非常好的食物。
| 周一 | 周二 | 周三 | 周四 | 周五 | 周六 | 周日 | 喂食时间 |
| -------------------- | ------------------ | ------------ | ----------- | ------------------ | ------------ | ------------ | ---------- |
| 鸡鸭牛心任选 | 大块肉类任选 | 鸡鸭牛心任选 | 大块猪肉 | 鸭肉 | 大块牛羊任选 | 大块牛羊任选 | 早上喂食 |
| | | | | | | | |
| 海鱼 | 鸡琵琶腿 | 带骨兔或鹌鹑 | 带骨兔肉 | 任意肉+非肝内脏 | 鸡腿或鹌鹑 | 整块鸡边腿 | 下班后喂食 |
| *四至五小时以上间隔* | | | | | | | |
| 带骨兔肉 | 肝脏为主,搭配心脏 | 1-2个鸡翅 | 鸡鸭肉+蛋黄 | 肝脏为主,搭配心脏 | 1-2个鸡翅 | 鸭肉+蛋黄 | 睡觉前喂食 |
## 五、 名词解释
能看到这里的我需要给你鼓掌咯,接下来我简单提一些容易忽略或者配方组合时可能遇到的麻烦,不会讲的非常详细,免的把你看花眼,此外讲太细的话------我以后的想找题材填坑不就麻烦了么。资料来源很多来自NRC的《Nutrient requirements of dogs and cats》2006版。
- **维生素A**肝脏富含维生素A是猫维生素A的最主要来源**猫必须吃动物肝脏。**许多人知道维生素A过量会中毒但是从来没人告诉你多少维生素A吃多久会中毒。维生素A中毒量为每公斤体重摄入超过57000IU 维生素A每天如此超过1-2个月引用2。这意味着我家4公斤的阿布得每天吃19副鸡肝800g连续一个月才可能中毒。
- **维生素D**维生素D在陆地动物身上存量不是很多至少字面如此。好消息是鱼类有极高含量的维生素D所以请记得给你的猫吃一些海鱼不用很多一周到一周半给100g就可以了。
- **维生素E**你如果查询了每种肉食的维生素E含量会发现无论怎么喂维生素E似乎和NRC对外发布的标准8斤猫日需求10mg差了一截实际上维生素E的需求量并不是那么简单。如果摄入太多长链多不饱和脂肪酸来自鱼维生素E的需求量会陡然增加多倍坏消息是很多猫粮猫罐头是鱼做出来所以NRC做了妥协。当我们实际喂猫的时候大部分的肉食搭配肝脏后所有的维生素E含量是卡及格线的。引用3但是考虑到我们依旧会喂鱼甚至很多饲主喂食的肉太瘦脂溶性维生素可是在脂肪里而且我不喜欢卡及格线所以在添加物条目里加入了100IU维生素E。
- **维生素K**:不需要额外补充,猫大肠菌群可以合成不少。
脂肪呀脂肪!很多人觉得,猫不该吃太油,这没错,是不该太油,但也不能一天到晚鸡胸肉啊?
> 脂肪对猫来说不只是正常代谢需求还是重要的脂溶性维生素来源。猫目前的脂肪需求我使用了2项研究倒推一个是野化家猫的猎物分析引用4一个是猫天生的口味偏好引用5。得出完全相同的结果猫对脂肪的需求量大约是**含脂率8-10%**,这个含脂率大约相当于去皮鸡大腿,大家感受下。
各种各样的宣传说言论都说“缺乏微量元素、矿物质会xxxxx”这种营销式的说辞忽悠了不少人。这次我不赘述猫需要什么什么矿物质怎么满足-----实际上饮食都能满足,我就单独说一下容易走误区的几个。
- **钙质**
“补钙”一说并不精确,已经有的再额外添加,那叫补。猫则是不人为添加蛋壳粉/钙粉或者不吃骨头的话钙质来源是完全全全的0所以钙质可千万不能略过
- **锰**
如果你用USDA数据库计算肉食的锰含量你一定会绝望因为数值太低了根本不符合NRC对外发布的标准4.8mg/kg食物肉类含量介于2-3.3mg/kg。事实却是锰需求量是本糊涂账精确的需求量不明过量后果也不明。流程大致如下
- *1960年的研究使用每公斤含锰2.28mg的肉类purified diet长时间喂食幼猫没发现问题。*
- 1964年、1975年的研究建议成年猫饮食需要每公斤含锰3.2mg的食物,但是没有提供支持该观点的数据。
- *有人表示猫粮standard diet**中的锰生物活性不如肉食吸收程度更差所以要改掉需求量又参考了其他动物的需求量大笔一挥改为每公斤食物中需要含锰4.8mg。*
不用介意锰元素了,让科学家自己理清楚再说吧。
- **锌元素**
猫作为纯肉食动物有着极高的锌元素需求量相比成年人一只成年猫每公斤体重需要1.2毫克的锌元素5公斤的大猫咪一天可以要6mg的锌而一个成年人类男性需求量也只是11毫克而已。
应对办法多吃一些牛羊肉包括内脏牛羊肉是高锌含量的翘楚搭配其他肉类中的锌含量成年猫一周吃200g左右牛羊肉就很合适了。
## 六、 鱼
对于猫这种自然食谱里完全没鱼类的动物过量吃不该吃的东西永远是危险的更不要提目前海鱼受到的严重污染PBDE、PCB、汞
可惜我们没法完美还原猫的自然饮食不得不给猫适当吃一些海鱼以补充维生素D、碘、omega3脂肪酸。
**可别吃多!**
**海鱼严重的污染与甲状腺亢进疾病有不可分割的联系鱼类又大幅度增加猫的维生素E需求量更不要提很多鱼罐头的原料质量简直臭不可闻。如果要吃鱼浅海、短生命周期的鲭鱼、马鲛鱼、秋刀鱼都是好选择干净的三文鱼也是很棒的。**
注:部分文字来自网络,因为意思表达也是我所想,所以做了资源聚合。

View File

@@ -1,134 +0,0 @@
# 养猫心得与总结
> 我自己养了3个布偶猫个人看来还是非常好看的毕竟倾注了个人感情和时间。所以在这个过程中有些心得、经验等现在梳理记录下来方便自己总结和帮追到有需要的人。
### 一、猫咪起名
说杜邦卫可、紫外灯定期消毒这些是养猫必备且小猫疫苗没打全的情况下不要洗澡。然后问了宠物医生说家里消毒很好的情况下可以接新猫且猫咪最好是6个月以上的大猫。<br>
思想上做了个「转变」,之前想着浪费时间,现在思考了下,猫很可爱,可以解压,养猫可以培养爱心。且自己爱好很多,但是有了猫,可以花时间在其他爱好上少一些,多在家养猫、写代码或者写博客总结。<br>
买了2只8个月大的布偶猫
公猫叫 Simba是一只海双布偶。母猫叫 Bella是一只蓝双布偶。还有个最新来的母猫叫碎星是一只海双布偶。
**Simba中文名叫辛巴大家应该看过狮子王希望像狮子王一样成为一个勇敢、坚强、健康的猫。**
![Simba](https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/master/assets/Simba.png)
![Simba](https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/master/assets/Simba2.png)
![Simba](https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/master/assets/Simba3.jpg)
![Simba](https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/master/assets/Simba4.jpg)
**Bella贝拉小公主的名字希望像公主一样永远漂亮、可爱、仙气凌人。**
![Bella](https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/master/assets/Bella2.jpg)
![Bella](https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/master/assets/Bella3.jpg)
![Bella](https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/master/assets/Bella1.jpg)
![Bella](https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/master/assets/Bella4.jpg)
**碎星,眼眸中的光芒星星点点,好似撒下的一把星。正好和“遂心”同音,是对毛孩子的美好祈愿**
![碎星](https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/master/assets/SuperStar1.jpg)
![碎星](https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/master/assets/SuperStar2.jpg)
![碎星](https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/master/assets/SuperStar3.jpg)
![碎星](https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/master/assets/SuperStar4.jpg)
### 二、 吃饭
家里有人是修正的老总,和我聊猫的时候说,现在很多国内做猫粮的人,早期是做方便面零食的。思考了下有几分道理,早期国内好几家方便面企业,到最后行业聚合,行业龙头形成,小企业要么不做了,要么发展子业务,比如做猫粮、罐头、零食等。
很多猫咪食品里面添加了「诱食剂」。且营养成分参差不齐,没人真正去督查品质,偶尔会报道一些牌子的猫粮不合格。相比之下国外进口的猫粮质量靠谱多了,但是现在网络电商平台非常多,所以购买渠道非常多,豆瓣“猫”组,就有好多团购猫粮的,真假需要自辨。比如 Ziwi、go、Orijen、ACANA等。
猫粮推荐:
- 皇家奶糕是一个比较有名的比较多人知道的一种猫粮这种猫粮呢它是针对布偶幼猫的适合哺乳期的小猫吃一般来说布偶幼猫在3~5个月的时候就可以喂皇家奶糕了只是给布偶小猫喂皇家奶糕猫粮需要注意我们要用水把奶膏泡软了再给小猫吃。为什么呢一方面呢是因为布偶小猫它本身的牙齿还不是很发达还有就是天气冷的时候奶糕容易变硬所以呢泡软给小猫吃是比较好。除了给哺乳期的小猫吃之外其实皇家奶糕还可以给刚分娩完的布偶母猫吃喂布偶母猫就简单一些直接喂就可以。
- 渴望六种鱼这是一款国外的猫粮原产于加拿大是加拿大的一个猫粮品牌。这款猫粮富含这个布偶猫生长的高营养肉类成分需求肉类成分达85%,可以帮助猫咪的快速生长,它适合各阶段的布偶猫。推荐这款猫粮,其中还有一个最大的原因就是它有美毛的作用,我们都知道,布偶猫是一个长毛猫的品种,国内很多长毛类的猫舍繁育人都在使用这款猫粮来帮助猫咪美毛。这款猫粮的口味,是海鱼味的,对布偶猫来说,比较有吸引力,一般的猫都接受这个味道。
- 生骨肉材料:鸡胸肉、鸡心、牛肝、牛肉、三文鱼、鱼油、维生素 B、牛磺酸、鸡蛋等。我认识的阿里朋友养了50多只布偶猫隔天生骨肉喂养隔天猫粮。所以我也是这个策略。一天猫粮、一天生骨肉。也可以牛、鸡、猪肉、鱼肉等为主食剁成肉末经过低温蒸煮再给猫咪食用。记得煮透去骨再喂食避免刺伤猫咪的胃。还可以添加烤胡萝卜、蒸芦笋或蒸花椰菜、青豆、笋瓜或其他切碎的蔬菜。不过在加工过程中要注意不要添加调味料。可以买个绞肉机将这些材料打碎然后蒸煮。
注意:
- 因为是生肉所以需要在冰箱冷淡一周杀菌。用的时候拿到水里融化掉各种肉切成小肉丁85%、动物内脏5%鸡蛋液8%、营养品2%),混合均匀后给猫咪喂食即可。
- 需要一个月做一次驱虫。
- 猫粮和自制生骨肉不要太多一顿一顿的准备不然放在碗里太多会进入空气中的灰尘、细菌等。猫咪吃完后3分支后拿走。
### 三、喝水
**猫咪喝水很重要、猫咪喝水很重要、猫咪喝水很重要**。重要的事情说三遍。
猫咪缺水的情况下,尿路会得病。情况很严重。所以我们需要想办法让猫咪喝水。比如一些自动饮水器,因为水是流动的,猫咪会有兴趣去玩耍,有机会喝。
说了要喝水,接下来说怎么喝?喝什么样的?
不要喝酸奶、牛奶、饮料等乱七八糟的东西。就给猫咪烧开的白开水,待到常温,给猫咪饮用即可。幼猫或者有需要的猫咪可以喝**羊奶粉**。
## 四、猫咪健康
- 如果吃生骨肉,猫咪毛发好、吸收好、肠胃好,拉的 shit 也”健康“,不会软便。
- 幼猫不要洗澡。疫苗打全后三周可以洗澡。
- 洗完澡必须吹干毛发。如果是长毛猫,则需要给猫咪梳子梳理好,不然打结就很难过,因为无解。我之前剪掉了布偶的打结毛。
- 猫必须干燥,不然会得猫藓。
- 猫咪需要适当的运动。
- 猫咪需要晒太阳。
- 猫咪需要吃猫草,促进排毛球。
- 猫不能打,不然应激或者疏远主人就得不偿失了。
## 五、小疾病
### 1. 猫咪黑下巴
黑下巴治疗,先用剃须刀把黑下巴周围的毛全剃掉,然后用碘伏消毒,在涂抹红霉素软膏,坚持一周。更换猫碗最好瓷碗和不锈钢的,保持干净,每隔几天用宠物专用的消毒液消毒,在搽洗干净✔看猫粮油脂含量有多高再考虑是否更换猫粮
红霉素软膏、凡士林,混合在黑下巴的地方揉搓,搓一会小黑点就下来了,然后用硼酸洗液擦一下,反复几次就干净了
### 2. 驱虫
外驱虫:大宠爱/福来恩,内驱虫海乐妙。(大猫和小猫购买驱虫药需要区分开,驱虫药都是有大猫和小猫的版本)

View File

@@ -1,153 +0,0 @@
# 我的猫不吃生骨肉!别急,我来教你
> 这是一篇详尽的饮食转换教程,本意是作为生食转换之用,但是也很合适拒绝自制、罐头等,有着不健康挑嘴习惯的猫咪,可以把里面的生骨肉想象成自制来看。请大家挑选需要的章节阅读。
为猫进行食物转换是我们的必经之路。大多数人养猫后第一反应是买火腿肠、饼干等,而不是鲜肉。为了扭转这一“洗脑”,推行自然饮食任重而道远------这一教程为解决最大门槛:食物转换而写。
## 一、 **4月以下幼猫**
如此小的猫大部份不需要食物转换,他们吃起生食来就像鸭子学游泳一样简单。断奶期的“奶糕”之流是没必要的(看看那可怕的配料?)。断奶后的幼猫吃的食和成年猫一回事,只不过幼猫需要喂的更频繁与更多。他们的胃容量很小,所以他们需要吃的更频繁,一天至少要吃三顿,最好四顿。
让幼猫啃骨头是非常有必要的,这样他们会慢慢学会如何有效率的吃带骨肉。吃过生食的幼猫看见一块鸡翅就会马上开心的叼走,如果你家有会吃生食的大猫那就更好了,小猫会照葫芦画瓢学习怎么吃。
## 二、 **4月以上及成年猫**
我们将这部份分为三块:
1. **干粮上瘾不吃别的**
2. **罐头到生食**
3. **吃带骨生肉**
成功的关键是**耐心**。这一过程可能极快也可能反之。我家中的猫有的花了5秒就接受了生食而有的花费了长达三个月。无论这花费多久相信我一切都是值得的。
整个过程我们会缓慢,渐进式的进行。通常这方式会起效,但是有些时候有的猫咪真的就油盐不进,多试试看,不要轻言放弃!
通常情况下我不建议用饥饿来强迫你的猫意即饿18-21个小时以上。不过如果你的猫是个超级老顽固那么试一下也无妨。
**假如你的猫健康不肥胖,饿更久一点点也不会有负面影响。 **如果你的猫超重或者肥胖请不尝试饥饿法超过21小时。
> 无论你的猫现在吃的是什么,给一块生肉探探路总是值得的。你的猫咪也许会令你吃惊的马上吃起来。鸡肉,鸭肉,鸡肝都可以拿来尝试。
## 三、干粮上瘾不吃别的
有的饲主说“**我家的猫除了猫粮什么都不吃**”,说这话的口气似乎很轻松。事实是,这句话和“我家孩子吃饭只吃肯德基”差不多一个意思,或许更糟。干粮成瘾是一种非常危险的饮食习惯,假如不及时纠正,收获一只病猫不过是时间问题罢了。
目前猫高发病第一名“下泌尿道疾病”确定的起因之一就是干粮。许多医生也将猫粮与猫糖尿病、炎症性肠炎、慢性肝炎、胰腺炎联系到一起。长期吃膨化食品做主食,有不出问题的可能吗?
**首先,停止自由采食**
不要食盆空了就加。你的猫完全不需要无时无刻的吃东西猫不是牛羊他们一天吃2-3顿就足够了。让你的猫把你这个人和食物联系起来而不是只认那个食盆。
### 1. **第一步:制定喂食计划**
制定好每天的喂食计划(如早上一餐,回家一餐,睡前一餐),你的猫很快就会习惯。**放下食盆后30分钟没吃完就收走**。务必严格执行你的猫会用撒娇和哀嚎来操纵你喂他额外的食物。起初你可能需要喂食3-4餐/天两周后就可以砍成2-3餐。如果猫们有争抢行为那么分房间或者错开进食时间。
你的猫咪会感到饿----好事。肚子饿才有食欲。“肚子饿了什么都好吃”,不过,可得确保猫咪们都有吃到自己那份饭。
**小提示**
猫咪热量需求计算公式为公斤数x35再加70.比如译者我家的大傻重5公斤那么每天需要175+70大约245大卡的热量。你可以算算你家猫咪一天要多少热量对比一下猫粮包装背后标记的热量值由此可以得知一天吃多少合适。将这些猫粮分成一天三份把持住相信科学不要多喂。
### 2. **第二步:让猫咪认识新食物**
试着把猫平时会吃的干粮与**少少罐头(一指头)**放一起喂,这一目的是使得猫习惯罐头的气味和口感。你不一定需要用很高质量的罐头,只要是不是鱼类的,质量不是很差的就可以了,这里我们的目的只是让猫去习惯不同于干粮的东西。你的猫起初有可能完全置之不理,这不要紧,**我们的这阶段的目的不是让他吃,只是为了熟悉。**
使用以上方法的同时,尝试将干粮弄碎撒在罐头或自制上(*依旧,不吃就收走*),干粮沾染上的气味会让猫渐渐习惯。同时尽可能拓展罐头的品种,也许这种你家猫不爱吃却疯狂迷恋另一个品牌。
**小提示**
**含肉类婴儿食品**也是一种选择。有的拒绝罐头的猫会很喜欢这种食品,如果他们吃的话可以放在罐头上当诱食剂,这类东西淘宝有出售
**木鱼花,冻干零食**也是效果显著,可以诱使猫吃不一样食物的好东西。
**干粮不就是缺水么,干粮泡水不得了?**
**据Lisa A Pierson医生DVM**
“干粮有极大量的菌群污染。霉菌是最容易存在于干粮中的。除了霉菌外,因为摄入干粮中的 真菌毒素mycotoxins呕吐毒素vomitoxins和黄曲霉素aflatoxin也造成过猫狗因此死亡的案例。细菌和霉菌在水中非常活跃繁殖速度惊人如果你一定要干粮泡水请确保将剩余的食物在30分钟内丢掉。”
**干粮的缺点可不只是缺水那么简单:**
可以查看[这篇文章](./9.5.md)
现在我的猫吃干粮也吃罐头了,然后呢?
很简单,把猫粮从主食中去掉。给他们一些时间来习惯按饭点吃饭,并且尽量吃罐头,然后开始下一步,转移到生食。
### 3. **第三步:生食转换**
我们先尝试一下切小块的鸡,鸭肉,鸡肝,鸭肝。大多数年轻猫不会迟疑,更不用说幼猫了。饮食转换这事儿总是越年轻越容易。
如果猫咪们对生肉没有兴趣,别急,我们还有不少方法.
- **确保肉是温热的**想象一下老鼠的体温就懂了猫不喜欢冰冰凉的食物。可别用微波炉把肉放入密封袋后浸入温热的水里5-15分钟。大块的肉如鸡鸭胸肉用煎锅无油煎一下表面有时候也会起到奇效 .
- **罐头食品搭配生肉一起吃。**你可能注意到了,相比罐头食品极为浓烈的气味,生肉的气息非常小,习惯了浓烈气味的猫甚至不知道生肉可以吃。这时候搭配一些平日的罐头会让猫的胃口重新调动起来。
> 以下还有一些食物可以诱导猫去吃生食,请不要过于依赖这些食物,不是有必要就不要再用了
>
> - 日料中会用的木鱼/鲣鱼花
> - 帕玛森奶酪/小三角奶酪 微量
> - 啤酒酵母(淘宝买散装)
> - 猫薄荷
> - 脱水冻干零食
> - 煮三文鱼或者金枪鱼的汤汁
>
> **如果你的猫开始吃生食了,恭喜你!慢慢的把肉块加大让猫能用牙齿充分咀嚼。**
### 4. **第四步:小心节奏**
动物的饮食转换过快会产生腹泻换干粮品牌都会如此更别说突然换成肉了当你尝试喂身体健康的宠物新食品尤其生食时建议以零食形式很少量的每天吃一两次如1-2颗鸡心留心排便状况。随后几天慢慢增加这些零食的次数再看看是否出现不适。至此粪便依旧正常那么把食物全部换成生食吃两天看反应。等这结束后依旧排便完好的话就可以完全改吃生食了。
假如软便怎么办?如果出现三次以内,那么减少喂食量(依旧要喂),观察猫咪精神,一般精神食欲都不错。这时候我们等待自愈就可以了。
救命!便血,拉黏膜了!
出现便血和黏膜看起来是很可怕但是不要惊慌这只是猫大肠受刺激的表现。假如连续出现超过2次那么我们就需要**暂时停止喂食**让猫咪饿20个小时**后**,给他吃一些全熟的肉类观察排便反应,待大便状况好转,再**非常少量**的重新给生食或者表面煎熟的半生肉。
猫咪习惯生肉了,该吃骨头了吧?
先别急,生肉吃够久了吗?假如是一只长年吃干粮的猫,他的咬合力会很弱,根本咬不动骨头。首先我们从增加肉块的大小开始吧!依旧慢慢来,**欲速则不达**(多对自己默念这句话真的很有用)
> 通常来说吃大肉块1-2个月后咬合力就足够对付骨头了。
### 5. **第五步:吧唧吧唧啃骨头**
有的猫完全不需要教就本能的会去吃,不过对于大多数猫来说,有以下一些主意可供参考。
- 试试在猫非常饿的时候给他吃带骨肉,他们会更加愿意尝试。
- 你的猫喜欢零食吗?木鱼花,猫薄荷?试着把鸡翅在这些零食中滚一圈。
- 用小一点的带骨肉.关节处开始分割好的鹌鹑如何?
- 试试看其他肉?也许他们讨厌鸡肉却喜欢鸭子,鹌鹑,**很多猫喜欢吃兔子哦,试试看吧!**
- 利用猫咪的学习本能。猫饿的时候给其中一只猫吃,其他猫有样学样也会开始吃起来。

View File

@@ -1,35 +0,0 @@
# 猫粮对你猫咪的牙齿做了什么?
> 我家 Simba 喜欢吃猫粮,牙齿好像比较黄。 Bella 喜欢吃肉,牙齿很洁白。到底是为什么
我们人类将猫咪带入家中与我们生活在一个屋檐下数千年,但是这一切并没有在生理上改变猫作为纯肉食动物的本质。事实上,我们所带回家的是一只迷你小老虎,狮子,豹子。家猫在与人生活同时完整保存了其肉食动物的本能,恰恰是人类自身错误地剥夺了大自然与进化赐予猫的东西。
在我的兽医行医生涯中,我经常需要去动物园为年纪各异的大型猫科动物行医---黑豹,狮子,老虎各式各样。但是在此期间,我从未在任何一只大猫的口腔中看到过牙结石 tartar。这一情况和家猫形成了明显的反差。我不禁想到“为什么这些大猫可以有如此整洁的牙齿为什么我们的家猫反而远远达不到这样
原因如此简单:差别就在食物。
大型猫科动物和家猫拥着同样的身体结构,口腔结构,牙齿形状。他们都有着大大的犬牙以撕裂猎物肢体,尖锐的后槽牙像剪刀一样分割血肉。当进食的时候,在柔韧的筋骨肌肉上进行反复的撕咬和切割动作非常有效的洗刷了其牙齿---这一切在每一天,每一顿餐重复。这一切完成了猫科每日所需的牙齿保养。
不幸的是这一切在我们的伙伴家猫身上完全相反。我们大多数人选择喂食的干粮形状都非常小而脆很难有效咀嚼。猫们往往选择大口吞入猫粮。这造成了几乎0的牙齿清洁作用。是的干粮洁牙是营销的谎言更糟糕的是当猫粮接触唾液时猫粮自身大量含有的碳水化合物carbohydrates或者说多糖polysaccharides释放在牙齿的表面。这时候就进入了口腔疾病的第一阶段牙菌斑的形成 ¹(译者:大黄牙是也)
当牙菌斑形成第二阶段开始了牙石。tartar/calculus).这里开始各类口腔疾病的产生就开始了。当然这篇文章的主旨并不在讨论这些疾病,就不再详细叙述,但是各位猫奴们需要知道,这些牙石上有数百万的细菌在高速繁殖,其副作用有 口臭,摄入毒性,流口水,脓包和牙龈出血,牙齿松动以及颚骨损坏。造成这些损伤的细菌可以经由口腔到达各个关键性器官,比如肺,肾脏,心脏,肝脏。在最严重的情况下,甚至会造成生命上的危险。你的猫咪的口腔健康至关重要。
在澳大利亚进行的一次小测试显示了干粮对口腔的影响有多么的快速。² 四只日常食用生食的犬类全部进行纯干粮饲喂17天后全体出现不同程度的口臭以及黄牙有的还出现了体重下降。行为上的变化包括口气粪便大量增加以及严重的臭味。虽然这一个针对犬类的实验但是对肉食倾向更纯粹的猫来说可窥一斑。
到这里一切就非常明了了:给你的猫咪吃大自然母亲给他吃的东西。一顿生食应该包括可咀嚼的肉块以及合适的骨骼以提供足量的清洁作用。避免喂食会导致猫咪口腔问题的高碳水化合物/淀粉的食物。
虽然猫的个体差异存在,有些猫咪对口腔问题更有抵抗力,但是喂食正确的食物总好过赌运气。

View File

@@ -1,132 +0,0 @@
# 新猫到家指南
> 越来越很多小伙伴都喜欢猫咪,经历各种步骤最后选了一只心仪的猫咪,去接新猫到家的时刻,心情无疑是非常激动的。可是猫咪作为一种神奇的存在,新猫到家的时候需要一些额外的注意事项。所以本篇文章就是从这样一个初衷出发,写一篇给各位新手铲屎官的新猫到家指南
## 一、 到家做什么?
**新猫到家基本不用做什么特殊的处理**
新猫到家前,你应该和猫舍或者前主人那里了解到猫咪的习性。知道猫咪喜欢吃什么样的猫粮、喜欢吃什么样的生骨肉、喜欢喝什么、一日吃几餐、用什么猫砂,这样就可以无缝迁移、让猫咪感受到的变化越小就越有助于猫咪熟悉新环境。
所以有些主人会给新主人带一些猫咪平常用的东西,比如猫砂盆、用过的猫砂,因为这些东西都有猫咪的气味,猫咪会更加习惯和熟悉些。
猫咪到家后,主人不需要特意去“关怀”他。你以为的关怀可能会让猫咪觉得陌生、害怕。
1. 主人可以提前给环境做一个彻底的消毒,新猫来的猫窝、玩具等,先用消毒水洗一下、风吹一下、晒下太阳。
2. 猫咪到新家之后,在家里合适的位置放置好猫砂盆、猫砂。放置好猫粮、常温的开水(烧开的开水)
3. 家里的阳台密封好
4. 不要去干扰他,他会在家里到处走走、一般是躲到床底下,去闻闻嗅嗅各个地方的气味
5. 猫咪到家一个月内不要洗澡。一个月后找个温暖的环境,可以在家洗,也可以去宠物店洗。最好在家洗,安全卫生
6. 如果猫咪的疫苗没有打完,则不要洗澡,三针疫苗一针狂犬疫苗注射完半个月后可以洗澡
7. 猫咪如果熟悉环境了会自己过来找你。所以不要抢行拖拽去抱他
8. 猫咪的猫砂盆需要保持干净,特别脏就不会去大小便了
9. 猫粮不要一次放太多,早上出门一顿,晚上到家一顿。放太多在空气中会变潮,滋生细菌。同样,猫粮袋子也要密封保存
## 二、猫吃什么?
科学生骨肉和不错的猫粮。生骨肉可以简单些,因为并不是一直吃生骨肉,所以一些所谓的营养元素可以加,但不是必须(营养均衡、微量元素)。
简易版的生骨肉:鸡胸肉、牛肉、三文鱼、鸡蛋、羊奶、鸡心、鸡肝。
猫粮推荐渴望、Go、爱肯拿、绿福摩、百利。
## 三、猫喝什么?
基础版:成猫的话可以喝烧开后恢复到常温的温水。
进阶版:可以在温水中加入一颗鸡蛋,混合均匀后给猫咪喝。(蛋黄有助于猫咪健康和毛发生长,网上说的卵磷脂,鸡蛋中挺多的)
Pro 版:可以喝新鲜羊奶,淘宝有,不是那种劣质的羊奶粉。我之前买的羊奶 20元1斤
## 四、猫咪玩什么?
猫咪需要一些玩具,嘴简单的玩具有:逗猫棒、激光灯、毛线球、猫薄荷。因为我喜欢玩乒乓球,我家里地上可能会有乒乓球,所以发现地上乒乓球猫咪也会很喜欢抓来抓去,可爱极了。
猫爬架这些东西可有可无。
## 五、 猫砂
猫砂这个东西不是特别要紧,有几个需要说明的点。
- 膨润土猫砂特别重感觉就是水泥石头渣不能冲马桶。女生如果网购的话膨润土一般20斤左右的规模拿不动啊慎重考虑下
- 豆腐猫砂,可以方便的冲马桶,遇水即化。市面上有很多味道的猫砂,最好选没有香味的猫砂,你闻着好闻,猫咪那么小,可能对这种味道接受不了。
猫砂的价格区间差别也很大没必要选太好的所以等电商节双11、双12、或者年中的时候可以批量囤一些。
自动铲屎机,目前不太稳定,可能会对猫咪不好。所以还是勤劳些,一周给猫砂盆洗一次,通风晒干。保持猫咪用品的干净无菌。
## 六、 猫咪健康
### 1. 驱虫
不吃生骨肉的情况下猫咪1个月一次外驱虫三个月一次内驱虫。
吃生骨肉的情况下猫咪1个月一次内外驱虫。
**驱虫推荐用大宠爱、拜耳驱虫药。**
需要注意的是,这些驱虫药都有成猫和幼猫的区别,因为药剂含量不一样,所以主人需要细心些。
### 2. 疫苗
小猫出生的**一年需要3针疫苗、一次狂犬幼苗。从第二年开始每年打一针**。疫苗本上有时间
### 3. 猫咪美容
- 猫咪一个月剪一次指甲。
- 定期给猫咪用“排梳”梳梳头,猫咪非常享受这个过程,会一直“呼噜呼噜”的叫。
- 可以学一下按摩手法,看一下知乎或者抖音教程,猫咪非常享受给他摸下巴、头部等区域。
- 布偶是长毛猫,所以脚底的毛,可以用电动剃毛机,剃掉。
- 猫咪冬天3个月洗一次澡夏天可以2个月洗一次澡。猫咪洗护的东西和人的不一样酸碱度 PH 值不一样,所以需要专门给猫咪洗澡的东西。布偶猫尾巴会出油,所以还需要去油膏。我用的是赛级布偶洗护套装,千元价格,**克里斯汀森的洗护,去油用的是 Goop 去油膏**。其他性价比高的推荐**“isb伊珊娜宠物浴液”**,除此之外的猫咪主人可以按需购买。
- 可以去外面的宠物店给猫咪洗澡,但是因为猫咪的美容机构有太多的猫咪去过,所以我不去那种地方,怕有残留细菌。或者工作人员心情不好,会不会对猫咪不温柔?
### 4. 猫咪发情
如果你的猫咪不打算生小猫,那么可以在猫咪发情的时候给他绝育掉。公猫绝育价格比母猫绝育价格便宜。
如果打算生小猫那么要等猫咪在第二次发情的时候交配1岁后各方面发育成熟可以交配。
### 5. 消毒
可以买一个**紫外臭氧灯**,消毒效果好。猫舍、宠物店都用这个。我用过的牌子是”雪莱“,是一家专门做这个的上市公司。
需要注意的是,紫外线、臭氧灯均对生物有害,所以消毒的时候人、猫咪、宠物、植物都需要离开。消毒完毕后通风半小时再进入。
另外还可以选用**杜邦卫可**,它是一种粉红色细末状的小颗粒,兑水后可以喷洒消毒。
## 六、 结语
小时候学完老舍的《猫》这篇文章就挺喜欢猫咪的上班族的我们下班后有猫咪在家陪伴或者在学习看书累了后给猫咪喂食物、梳毛发等都是一种解压的行为。猫咪也是一门复杂的学问需要主人的耐心和一定的经济基础比如不要给猫咪吃30元1斤以下的猫咪这样的猫粮钱省了可以猫咪生病就是好几千比较费猫 😂)
耐心观察他、善待他猫咪和主人互相成就他让你不再孤单、无聊、那么萌、可爱可以成为你朋友圈的主角。你给了他一个温暖、舒适、安全、衣食无忧的家所以Enjoy yourself。

View File

@@ -1,18 +0,0 @@
# 猫咪健康
## 肠胃炎
猫咪的肠胃炎通常分细菌性肠胃炎及病毒性肠胃炎,临床症状通常是拉肚子、呕吐、腹痛、精神不振等,针对猫咪一般性的肠胃炎家长自己就可以给猫咪诊断治疗。
1. 调节消化系统  
建议用药:乳酶生、多酶片、乳酸菌片、动物用咪可乐、丽珠肠乐、整肠生等活菌类药物。帮助猫咪调节消化道菌群。
2. 消炎
调节消化系统三天没有大的作用可以考虑为猫咪消除肠道炎症。
这里有一个消炎药选择的问题在肠道感染中99e%都是由杆菌引起的,对付杆菌最好的选择是硫磺庆大霉素、卡那霉素等药。其中由于庆大霉素的分子量比较大,口服不会被内脏吸收,是猫咪处理肠道炎症的首选药物。  
需要注意的是,在服用消炎类药物半个小时后,需要给猫咪喂些活菌类的助消化药,如乳酶生、妈咪爱等,帮助猫咪恢复消化能力。
3. 饮食
肠炎严重的话建议每日以吃流食为主少食多餐如果拉稀呕吐比较频繁尤其是拉肠粘膜时应禁食禁水12个小时左右。
4. 猫藓
小奶猫20天左右可以打大宠爱在猫咪的耳朵边上。1g左右

View File

@@ -1,113 +0,0 @@
# 第九部分
> 主要记录猫咪饮食、吃饭、健康、玩具、洗护、社会化等方面的经验和心得,还有一部分晒猫的原因。
## 基础信息
坐标 :杭州
猫咪养了4只吞金兽-布偶猫,每个猫咪都有 CFA 证书,有些猫咪小时候拿过比赛大奖,赛级布偶。
- Bella 是一只波斯系蓝双布偶,妹妹
- Simba 是一只海双布偶,弟弟
- PiPi 是一只海双布偶,弟弟
- 碎星 是一只海双布偶,妹妹
环境:家里一周一次紫外臭氧灯消毒
洗护:克里斯汀森赛级洗护
饮食:生骨肉、羊奶
## 猫咪
<h5 style="text-align:center;">PiPi</h5>
<img src="https://i.niupic.com/images/2021/06/30/9mn6.gif" width="500">
<h5 style="text-align:center;">碎星:</h5>
<img src="https://i.niupic.com/images/2021/06/30/9mn7.JPG" width="500">
<h5 style="text-align:center;">Bella</h5>
<img src="https://i.niupic.com/images/2021/06/30/9mnZ.JPG" width="500">
<img src="https://i.niupic.com/images/2021/06/30/9mqS.JPG" width="500">
<img src="https://i.niupic.com/images/2021/06/30/9mqU.JPG" width="500">
<img src="https://i.niupic.com/images/2021/06/30/9mqT.JPG" width="500">
<h5 style="text-align:center;">Simba</h5>
<img src="https://i.niupic.com/images/2021/06/30/9mo0.JPG" width="500">
<h5 style="text-align:center;">小猫:</h5>
写入2021-04周前拍的
<img src="https://i.niupic.com/images/2021/06/30/9mn8.JPG" width="500">
<img src="https://i.niupic.com/images/2021/06/30/9mn9.JPG" width="500">
<img src="https://i.niupic.com/images/2021/06/30/9mqV.JPG" width="500">
<img src="https://i.niupic.com/images/2021/06/30/9mqW.JPG" width="500">
<img src="https://i.niupic.com/images/2021/06/30/9mqX.JPG" width="500">
写入2021-07-11现在
<img src="https://i.niupic.com/images/2021/07/11/9ny4.gif" width="500">
<img src="https://i.niupic.com/images/2021/07/11/9nxU.JPG" width="500">
<img src="https://i.niupic.com/images/2021/07/11/9nxX.JPG" width="500">
<img src="https://i.niupic.com/images/2021/07/11/9nxY.JPG" width="500">
更多:
其他更多的猫咪的美照,可以访问[这里](./assets)
## 交流
如果你是一名铲屎官,想进群晒猫或者是交流猫咪养护经验
如果没有养猫,想云吸猫
如果打算养一只可爱、高颜值的布偶猫
可以联系我微信704568245
## 目录
* [1、"CFA 证书" 不再那么神秘](https://github.com/FantasticLBP/knowledge-kit/blob/master/Chapter9%20-%20Ragdoll/9.1.md)
* [2、猫咪饮食](https://github.com/FantasticLBP/knowledge-kit/blob/master/Chapter9%20-%20Ragdoll/9.2.md)
* [3、养猫心得与总结](https://github.com/FantasticLBP/knowledge-kit/blob/master/Chapter9%20-%20Ragdoll/9.3.md)
* [4、我的猫不吃生骨肉别急我来教你](https://github.com/FantasticLBP/knowledge-kit/blob/master/Chapter9%20-%20Ragdoll/9.4.md)
* [5、猫粮对你猫咪的牙齿做了什么](https://github.com/FantasticLBP/knowledge-kit/blob/master/Chapter9%20-%20Ragdoll/9.5.md)
* [6、新猫到家的注意事项](https://github.com/FantasticLBP/knowledge-kit/blob/master/Chapter9%20-%20Ragdoll/9.6.md)
* [7、猫咪健康](https://github.com/FantasticLBP/knowledge-kit/blob/master/Chapter9%20-%20Ragdoll/9.7.md)

View File

@@ -8,8 +8,6 @@
技术点: iOS、Web 前端、后端、Hybrid、Node 的应用、爬虫、反爬虫、后端、数据库、算法等领域。
后面的2个小章节主要记录自学经济学遇和养布偶猫的一些心得和经验。
## 目录
@@ -21,5 +19,5 @@
## 反馈
定期更新博文,如果在查看文章的时候发现了问题可以提出 issue。
关注大前端领域,喜欢乒乓球、布偶猫,杭州的小伙伴可以约乒乓球或者交流养猫心得
杭州的小伙伴可以约乒乓球,打算养布偶猫的可以联系我,家有小布偶
有事情可以通过[微博](http://weibo.com/u/3194053975)联系

View File

@@ -202,30 +202,4 @@
* [18、云服务器靠谱推荐](https://github.com/FantasticLBP/knowledge-kit/blob/master/Chapter7%20-%20Geek%20Talk/7.19.md)
* [19、规范化团队 git 提交信息](https://github.com/FantasticLBP/knowledge-kit/blob/master/Chapter7%20-%20Geek%20Talk/7.20.md)
* [20、如何画架构图](https://github.com/FantasticLBP/knowledge-kit/blob/master/Chapter7%20-%20Geek%20Talk/7.21.md)
* [21、项目管理案例分析](https://github.com/FantasticLBP/knowledge-kit/blob/master/Chapter7%20-%20Geek%20Talk/7.22.md)
* [Chapter8 - Finance](https://github.com/FantasticLBP/knowledge-kit/blob/master/Chapter8%20-%20Finance/chapter8.md)
* [1、“账期”](https://github.com/FantasticLBP/knowledge-kit/blob/master/Chapter8%20-%20Finance/8.1.md)
* [2、亚洲金融危机两三谈](https://github.com/FantasticLBP/knowledge-kit/blob/master/Chapter8%20-%20Finance/8.1.md)
* [3、提高利率的副作用](https://github.com/FantasticLBP/knowledge-kit/blob/master/Chapter8%20-%20Finance/8.1.md)
* [4、白话贸易战](https://github.com/FantasticLBP/knowledge-kit/blob/master/Chapter8%20-%20Finance/8.1.md)
* [5、股票的本质是帮助企业高飞](https://github.com/FantasticLBP/knowledge-kit/blob/master/Chapter8%20-%20Finance/8.1.md)
* [6、需求是分层次的](https://github.com/FantasticLBP/knowledge-kit/blob/master/Chapter8%20-%20Finance/8.1.md)
* [7、炒期货比炒股风险高的本质原因](https://github.com/FantasticLBP/knowledge-kit/blob/master/Chapter8%20-%20Finance/8.1.md)
* [8、浅谈一带一路](https://github.com/FantasticLBP/knowledge-kit/blob/master/Chapter8%20-%20Finance/8.1.md)
* [9、隐形的投资你看得到吗](https://github.com/FantasticLBP/knowledge-kit/blob/master/Chapter8%20-%20Finance/8.1.md)
* [10、存款准备金率的衍生知识](https://github.com/FantasticLBP/knowledge-kit/blob/master/Chapter8%20-%20Finance/8.1.md)
* [11、降准的魔法效应](https://github.com/FantasticLBP/knowledge-kit/blob/master/Chapter8%20-%20Finance/8.1.md)
* [12、揭开″定向降准″的神秘面纱](https://github.com/FantasticLBP/knowledge-kit/blob/master/Chapter8%20-%20Finance/8.1.md)
* [13、股市飘来了降准的芳香](https://github.com/FantasticLBP/knowledge-kit/blob/master/Chapter8%20-%20Finance/8.1.md)
* [Chapter9 - Ragdoll](https://github.com/FantasticLBP/knowledge-kit/blob/master/Chapter9%20-%20Ragdoll/chapter9.md)
* [1、"CFA 证书" 不再那么神秘](https://github.com/FantasticLBP/knowledge-kit/blob/master/Chapter9%20-%20Ragdoll/9.1.md)
* [2、猫咪饮食](https://github.com/FantasticLBP/knowledge-kit/blob/master/Chapter9%20-%20Ragdoll/9.2.md)
* [3、养猫心得与总结](https://github.com/FantasticLBP/knowledge-kit/blob/master/Chapter9%20-%20Ragdoll/9.3.md)
* [4、我的猫不吃生骨肉别急我来教你](https://github.com/FantasticLBP/knowledge-kit/blob/master/Chapter9%20-%20Ragdoll/9.4.md)
* [5、猫粮对你猫咪的牙齿做了什么](https://github.com/FantasticLBP/knowledge-kit/blob/master/Chapter9%20-%20Ragdoll/9.5.md)
* [6、新猫到家的注意事项](https://github.com/FantasticLBP/knowledge-kit/blob/master/Chapter9%20-%20Ragdoll/9.6.md)
* [7、猫咪健康](https://github.com/FantasticLBP/knowledge-kit/blob/master/Chapter9%20-%20Ragdoll/9.7.md)
* [21、项目管理案例分析](https://github.com/FantasticLBP/knowledge-kit/blob/master/Chapter7%20-%20Geek%20Talk/7.22.md)

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 489 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 589 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 730 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 172 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.5 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.7 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 877 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.1 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.2 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 80 KiB