好文收藏
好文收藏
Netty
聊聊Netty那些事儿之从内核角度看IO模型 ⭐⭐⭐⭐⭐
很详细的介绍了各种I/O模型,附带图文,源码
算法-内存分配算法
参考文献
内存分配算法
常用的内存分配算法:
动态内存分配(Dynamic memory allocation DMA)
伙伴算法
Slab算法
动态内存分配(Dynamic memory allocation DMA)
动态内存分配,又称堆内存分配.操作系统根据程序运行过程中需求及时分配内存,且分配的内存大小就是程序需求的大小.在大部分场景下,只有程序运行的时候才知道所需要分配的内存大小,如果提前分配可能分配的大小无法把控,分配太大会浪费空间,分配太小会无法使用.
DMA是从一整块内存中按需分配,对于分配的内存会记录元数据,同时还会使用空闲分区链维护空闲内存,便于在内存分配时查找可用的空闲分区.常用的有三种查找策略:
首次适应算法(first fit)
循环适应算法(next fit)
最佳适应算法(best fit)
首次适应算法(first fit)
空闲分区链以地址递增的顺序,将空闲分区以双向链表的形式连接在一起,从空闲分区链中找到第一个满足分配条件的空闲分区,然后从空闲分区中划分一块可用内存给请求进程,剩余的空闲分区仍然保留在空闲分区链中.
如下图 ...
Linux工具-strace
参考文献
5 simple ways to troubleshoot using Strace
strace
strace命令用于跟踪系统调用和信号。主要用于诊断,调试程序,使用该命令能够打印出进程执行的系统调用信息。
示例
找出应用程序启动时读取的配置文件
12345strace mysql 2>&1 |grep my.cnfstat("/etc/my.cnf", 0x7ffc3bd0d7e0) = -1 ENOENT (No such file or directory)stat("/etc/mysql/my.cnf", {st_mode=S_IFREG|0644, st_size=869, ...}) = 0openat(AT_FDCWD, "/etc/mysql/my.cnf", O_RDONLY|O_CLOEXEC) = 3stat("/home/xx/.my.cnf", 0x7ffc3bd0d7e0) = -1 ENOENT (No such f ...
网络基础(七)-WebSocket协议
参考文献
趣谈网络协议
WebSocket-RFC-6455
WebSocket
数据格式
123456789101112131415161718 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1+-+-+-+-+-------+-+-------------+-------------------------------+|F|R|R|R| opcode|M| Payload len | Extended payload length ||I|S|S|S| (4) |A| (7) | (16/64) ||N|V|V|V| |S| | (if payload len==126/127) || |1|2|3| |K| | ...
MySQL-Security
参考文献
MySQL 8 Cookbook
使用mysql_config_editor进行无密码认证
1234567891011121314151617181920212223242526272829mysql_config_editor --helpmysql_config_editor Ver 1.0 Distrib 5.7.24, for osx11.1 on x86_64Copyright (c) 2012, 2018, Oracle and/or its affiliates. All rights reserved.Oracle is a registered trademark of Oracle Corporation and/or itsaffiliates. Other names may be trademarks of their respectiveowners.MySQL Configuration Utility.Usage: mysql_config_editor [program options] [command [command options ...
读书笔记-动手学深度学习-Pytorch版
参考文献
动手学深度学习 Pytorch版
2.3 线性代数
标量
本书采⽤了数学表⽰法,其中标量变量由普通⼩写字⺟表⽰(例如,xxx、yyy和zzz).本书⽤R表⽰所有(连续)实数标量的空间,之后将严格定义空间(space)是什么,但现在只要记住表达式x∈Rx\in Rx∈R是表⽰x是⼀个实值标量的正式形式.符号∈\in∈称为“属于”,它表⽰“是集合中的成员”.例如x,y∈{0,1}x, y \in \{0, 1\}x,y∈{0,1}可以⽤来表明xxx和yyy是值只能为0或1的数字.
标量由只有⼀个元素的张量表⽰.下⾯的代码将实例化两个标量,并执⾏⼀些熟悉的算术运算,即加法、乘法、除法和指数
123456import torchx = torch.tensor(3.0)y = torch.tensor(2.0)x + y,x * y,x / y,x ** y==> (tensor(5.), tensor(6.), tensor(1.5000), tensor(9.))
向量
向量可以被视为标量值组成的列表.这些标量值被称为向量的元素(element)或分量( ...
MySQL-redo log
参考文献
千金良方: MySQL性能优化金字塔法则
redo log
redo log用来实现事务的持久性,即事务ACID的D.其由两部分组成:
一是内存中的重做日志缓冲(redo log buffer),其是易失的
二是重做日志文件(redo log file),其是持久的.
InnoDB是事务的存储引擎,其通过Force Log at Commit机制实现事务的持久性,即当事务提交(COMMIT)时,必须先将事务的所有日志写入到重做日志文件进行持久化,待事务的COMMIT操作完成才算完成.
redo log基本上都是顺序写的,在数据库运行时不需要对redo log的文件进行读取操作,而undo log是需要进行随机读写的.
WAL(Write-Ahead Logging),它的关键点就是先写日志,再写磁盘.
当有一条记录需要更新的时候,InnoDB引擎就会先把记录写到redo log里面,并更新内存,这个时候更新算完成了.同时,InnoDB引擎会在合适的时候,将这个操作记录更新到磁盘里面,而这个更新往往是在系统比较空闲的时候做.
InnoDB的red ...
MySQL-sys
参考文献
千金良方: MySQL性能优化金字塔法则
sys系统库使用基础环境
因为sys系统库提供了一些代替直接访问performance_schema的视图,所以必须启用performance_schema(将performance_schema系统参数设置为ON),sys系统库的大部分功能才能正常使用
要完全访问sys系统库,用户必须具有以下权限.
对所有sys表和视图具有SELECT权限.
对所有sys存储过程和函数具有EXECUTE权限.
对sys_config表具有INSERT、UPDATE权限.
对某些特定的sys系统库存储过程和函数需要额外权限,如ps_setup_save()存储过程,需要与临时表相关的权限.
还要有与被sys系统库执行访问的对象相关的权限.
任何被sys系统库访问的performance_schema表都需要有SELECT权限,如果要使用sys系统库对performance_schema相关表执行更新,则需要有performance_schema相关表的UPDATE权限.
INFORMATION_SCHEMA.INNODB_BUF ...
MySQL-performance_schema
参考文献
千金良方: MySQL性能优化金字塔法则
performance_schema
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117mysql> show tables ;+------------------------------------------------------+| Tables_in_performance_schema |+------------------------------------------------------+| accounts ...
Linux工具-fuser
参考文献
fuser
123456789101112131415161718192021222324252627# fuser -hUsage: fuser [-fIMuvw] [-a|-s] [-4|-6] [-c|-m|-n SPACE] [-k [-i] [-SIGNAL]] NAME... fuser -l fuser -VShow which processes use the named files, sockets, or filesystems. -a,--all display unused files too -i,--interactive ask before killing (ignored without -k) -I,--inode use always inodes to compare files -k,--kill kill processes accessing the named file -l,--list ...