小纸箱
封面作者:NOEYEBROW
⭐中介效应
已转移到站内心理统计学笔记
⭐Homebrew
Homebrew 是一款 macOS 下的包管理器, 用于安装 macOS 缺少的软件包
核心概念
| 概念 | 含义 |
|---|---|
Formula |
软件包的安装脚本 |
Cask |
用于安装 macOS 应用程序的扩展, 通常用于安装图形界面应用程序 |
Tap |
用于扩展 Homebrew 的仓库, 用于存放 Formula 和 Cask |
Bottle |
二进制安装包, 用于加速安装过程 |
Cellar |
安装软件包的目录 |
Keg |
Cellar 中的软件包目录, 通常是软件包的版本号 |
基本命令
| 命令 | 含义 |
|---|---|
brew install xxx |
安装软件包 |
brew search xxx |
搜索软件包 |
brew list |
列出已安装的软件包 |
brew outdated |
列出过时的软件包 |
brew upgrade [xxx] |
更新软件包 |
brew uninstall xxx |
卸载软件包 |
brew cleanup |
清理旧版本软件包 |
brew services list |
列出已安装的服务 |
brew services start/run/stop/restart xxx |
启动/单次运行/停止/重启服务 |
brew doctor |
检查 Homebrew 是否正常 |
brew update |
更新 Homebrew |
brew bundle dump |
导出已安装的软件包列表 |
brew bundle |
安装已导出的软件包列表 |
⭐LaTeX
LaTeX 是一种基于 TeX 的排版系统, 正式名称为 LATEX , 由美国计算机学家 Leslie Lamport 开发, 用于生成高质量的科技文档, 如论文、书籍、报告等
LaTeX 有很多学术论文模板, 通过这些模板可以快速生成符合学术规范的论文; 拿到一个模板后, 只需要修改内容, 不需要关心格式, 就可以生成符合要求的论文
推荐使用 VSCode 来编辑 LaTeX 文档, 用 TeX Live 来生成 PDF 文件; 也可以使用 Overleaf 在线编辑 LaTeX 文档
这玩意儿真是安装又麻烦, 使用又复杂
关键字
| 关键字 | 含义 | 示例 |
|---|---|---|
% |
注释 | % xxx |
\ |
命令或转义符 | \section{标题}、\%、\{ |
{} |
参数 | \section{标题} |
[] |
可选参数 | \documentclass[12pt]{article} |
^ |
上标 | x^2 |
_ |
下标 | x_1 |
$ |
数学公式 | $x^2$ |
~ |
空格 | x~y |
# |
编写宏 |
基本结构
1 | \documentclass{article} % 文档类型 |
数学公式
有时间再学习
图片
1 | \usepackage{graphicx} % 添加依赖包 - 图片支持 |
{figure} 的可选参数 |
含义 |
|---|---|
[h] |
当前位置 |
[t] |
顶部 |
[b] |
底部 |
[p] |
单独一页 |
多个可选参数可以组合使用, 会优先使用前面的参数
\includegraphics 的参数 |
含义 |
|---|---|
{图片路径} |
图片的相对路径 |
[width=xxx] |
宽度, 0.8\textwidth 表示占文本宽度的 80% |
[height=xxx] |
高度, 一般只需要设置宽度, 高度会自动计算 |
表格
1 | \begin{table}[htbp] |
{tabular} 的参数 |
含义 |
|---|---|
| |
一条垂直线 |
c |
居中的列 |
l |
左对齐的列 |
r |
右对齐的列 |
t |
顶部对齐的列 |
b |
底部对齐的列 |
| 正文关键字 | 含义 |
|---|---|
& |
列分隔符 |
\\ |
行分隔符(换行) |
\hline |
横线 |
\newline |
在单元格内换行 |
可以在这里生成
LaTeX表格代码
参考文献
1 | % 文中引用 |
如果引文较多, 可以存在一个 .bib 文件中
1 | % Google 学术等可以直接导出 `.bib` 文件的引用 |
⭐学习心理学
经典条件作用的应用
进化领域
对雄性蓝曼龙鱼配对-CS灯光-UCS可望而不可即的雌鱼, 结果发现在呈现CS后交配时, 配对组相对于未配对组的性能力更强
医药领域
药物耐受
对小鼠进行糖精水和免疫抑制剂的配对, 一个月后将小鼠分为淡水组和糖精水组, 结果糖精水组的小鼠死亡率更高且表现出味觉厌恶: 条件性免疫功能抑制
- 安慰剂效应
- 一致性反应: CR与UCR相同或相似
如条件性过敏反应 - 对立性反应: CR与UCR相反
如酒杯让人冷 - 机制解释: 补偿性反应模型
补偿性反应模型 / Compensatory-response Model
- 有机体具有一种试图维持体内平衡的生理机制
- 由于某种原因失衡时, 机体会产生补偿反应, 以维持身体平衡
- UCS药物→UCR反应增强
- CS场景/线索→CR反应减弱
- CS逐渐引发与UCS相对立的反应
产生耐药性
情绪与态度
- 焦虑 / 恐惧 / 厌食 / 恋物 / 情欲 / 偏好
- 一开学就肚子疼-CS开学-CR恐惧焦虑
- 让被试闻臭味儿, 再让被试对一些事情进行道德判断, 相比于对照组, 实验组更倾向于做出消极评价
- 厌恶敏感性越高, 个体越难接受
非我族类个体, 政治认同越趋向于保守 - 厌恶感从进化的角度, 可以帮助个体回避潜在的有毒人事物
评价性条件作用 / Evaluative Conditioning, EC
- 中性刺激与具有UCS特性(情绪性)的刺激配对
- 更强调中性刺激CS效价(好恶)的改变-情感性评价
- 能解释污名化现象
- 很难消除, 很多都是稀里糊涂形成的
所以兼听则明, 要有批判性思维 - 看到艾滋病患者CS的让人感到不适的图片UCS, 就会产生评价性条件作用, 变得排斥艾滋病患者
- 被逼迫去相亲, 更容易对相亲对象产生负面评价
- 被逼迫去学习, 学习会与消极情绪联结。要让学习与积极情绪联结, 需要给学生提供良好的心理环境和物理环境
- 库里肖夫效应: 把无表情特写与其他镜头组合, 同一张无表情特写中可以读出不同的含义
- 和令人愉悦的词汇/图像一起出现的人物更容易获得高的愉悦评价
精神障碍矫治
恐惧症
- 亲身体验
幽闭恐惧、香蕉恐惧 - 社会传播
替代性条件作用 - PTSD
既可能是亲身体验, 也可能是目睹而获得
患者特点
- 患者建立条件反应更快
- 患者有意义的遗忘能力更差-前额叶皮层功能受损
- 患者海马体小
- 患者杏仁核过度活跃
矫治方法
建立对抗(立)性条件作用
建立与先前习得反应相对立/竞争的新反应的过程
- Mary Cover Jones 第一个用反条件作用原理帮助患者克服恐惧
- 将引发恐惧的兔子CS与好吃的糖果UCS建立联结
关键要求
- 新旧反应不相容
- 识别新UCS
- 原CS逐渐地带入
- 使积极反应一直大于消极反应
系统脱敏法
- 逐渐增大CS强度, 因个体放松和不断适应, 使CS失效
- 用放松反应对抗恐惧/焦虑性反应
具体步骤
- 确立CS恐惧等级
从最轻微的开始 - 进行放松训练
- 建立对立性条件作用
仅有想象或放松不足以克服恐惧, 需将CS与新UCS配对
要点
- 刺激CS想象+放松训练
- 深度放松, 始终不产生恐惧
- 将反条件作用泛化, 逐渐消退恐惧
成瘾行为矫治
消退疗法
- CS反复呈现
- 变化CS场景
治疗场所→真实生活环境, 促进泛化和迁移 - 长期地坚持消退疗法
用VR技术模拟CS和场景, 生态效度高
其他辅助手段
- 净化环境
- 认知/正念
- 参与其他活动
- 药物支持
- 社会支持
厌恶疗法
- 用消极情感反应替代积极情感反应
- 建立某事物与厌恶/恐惧刺激之间的联系
对立性条件作用, 形成恐惧或厌恶 - 有时无效: 辨别学习
- 与其他疗法相结合
应用场景
- 动物保护
让狼吃了羊后呕吐 - 治疗酗酒/吸烟
电击不行, 催吐剂可以 - 治疗暴露癖/恋物癖
伦理问题, 需要自愿自主电击自己
诱因敏感化理论
- 存在 Wanting
渴望/欲望/着迷和 Liking愉悦/享受两种不同的心理机制 - 两种机制的大脑生理过程不同
- 反复用药/吸烟/饮酒改变了多巴胺系统的敏感性(神经敏化), 从而产生了诱因凸显
CS→UCSwanting, wanting越来越高, liking越来越低
个体差异
- 信号跟踪
关注、趋近、接触CS - 目标跟踪
关注、趋近、接触奖赏装置 - 信号跟踪的个体更容易产生成瘾行为(强迫性反应模式), 诱因凸显, 难以抵制诱惑, 易上瘾和复发
- 对于小鼠: 生长环境单调、与母亲社会交往少的个体更容易成为信号跟踪者
条件性情绪反应与测谎
基本原理
- 多道生理心理描记器/记录仪
- 通过皮电、呼吸、心率、血压等变化推定情绪反应
- 其他指标如面部微表情、血谱光学成像、眼动、脑血流图、fMRI
- 测谎时通过特殊问题呈现CS
基本程序
- 在放松状态下进行基线水平测量
- 提问: 是或否、每题不超过25秒、总共不超过30分钟
- 问题类型: 控制性问题-不自觉说谎的问题
你是否有不可告人的想法, 关键性问题-为掩盖事实而说谎的问题你把他埋土里了吗, 中性问题-无关问题今天吃早饭了吗
广告与消费
将品牌/产品等事物(CS)与能诱发积极/消极情绪反应的刺激(UCS) 车模、代言人、音乐、场景 联系起来
⭐WSL
Windows Subsystem for Linux 是一个在 Windows 上运行 Linux 的兼容层, 它允许用户在 Windows 上运行 Linux 命令行工具
1 | # 安装 WSL |
⭐实验心理学
Experimental Psychology, 用科学的实验方法研究心理现象和行为规律的科学
心理学的科学性质
解决问题的方法 / 知识的来源
- 权威: 听信有影响力的他人
父母、书本、媒体、专家、宗教 - 注意凝聚: 相信重复出现的信息
常识、俗语、刻板印象 - 先验: 不经研究和考证就相信看上去合理的观点
- 科学: 建立在经验
客观测量基础上, 可重复并可自我矫正科学的程序: 验证、校正、因素控制
科学的定义
- 注重科学的内容: 科学是一种有系统、有组织地描述事物间规律的知识
- 注重科学的过程: 科学是发现事实, 建立关联, 解释规律的过程。即解决
是什么、怎么样、为什么
科学的基本目的
科学是为了探索自然界事物间的秩序、一致性及规律
科学的基本特征
- 客观性: 不是个人的经验或意见
- 实证性: 经得起系统性的观察和检验
- 公开性: 任何人都可以公开观察和评估
科学方法的基本要素
- 客观的测量
- 可重复验证: 同行评议
- 系统性: 对因素的控制和操纵
包含感兴趣的因素, 无关因素 - 自我校正
- 科学方法并不固守某个信念, 而是提供判断信念正误的程序
- 理论→假设→检验→修正
- 科学致力于可解决的问题
即可检验的、可证伪的 - 科学的本质就是”在公众面前犯错——在众目睽睽下犯错, 以期他人能够帮助其修正这些错误”
科学研究的一般性方法
- 归纳法: 数据→理论
- 演绎法: 理论→特定结果
科学研究过程: 两种研究的循环

科学研究的层次与过程
- 描述: 发现宇宙间中的事物现象
现象学的定性研究, 观察研究 - 解释: 探讨它们之间的关系
定量研究, 相关研究 - 预测: 解释产生关联的原因和预测未来的变化
定量研究, 实验研究 - 调控
实验心理学和科学方法
- 心理学研究对象: 人的特殊性和一般性
- 实验心理学的研究对象: 人的行为和心理活动, 如感觉、记忆、情绪等
- 能否自我校正: 心理学理论是否以一种可证伪的形式提出, 能否通过心理学实验来检验
科学的心理学研究
- 心理学是一门以解释、预测和调控人的行为为目的, 通过研究、分析人的行为, 揭示人的心理活动规律的科学
- 心理学研究是从理论或实际课题入手, 系统地收集与分析数据资料, 发现和测量心理变量, 研究分析变量间的关联, 解释产生关联的原因, 以求正确地描述、解释、预测、调控行为和心理活动的过程
心理学的法则
- 心理学的目的在于建立行为以及心理过程的法则
- 在建立这种法则的过程中, 寻求变量间的关系是最主要的目标
- 首先, 选定某一心理变量作为研究的对象
- 然后, 采用科学方法有系统地探索与该变量有关的其他变量
- 最后, 对所得变量间的关系加以概括性的陈述, 建立起某种心理法则
心理学法则的建立
依据心理学的基本变量: 刺激变量S、机体变量O、反应变量R, 可建立的法则包括:
- S—R法则: 反应是刺激的函数, R=f(S)
- O—R法则: 反应是机体的函数, R=f(O)
- R1—R2法则: 相关关系
事物间的规律
- 相关关系
Correlation: 两个事物之间具有共变当一个事物发生变化时, 另一个事物也发生相应的变化关系, 便是相关关系 - 因果关系
Causality: 因果关系的三个标准为两个变量之间具有实证性的相关、在时间顺序上, 先有因后有果、两个变量之间的实证相关并不因为第三个变量的存在而存在
相关的解释
- 存在因果关系
Causation: 但是方向不一定如身高 - 共同反应
Common Response: 都与第三变量存在因果关系如一般智力 - 混淆影响
Confounding: 有因果, 又有第三变量影响如基因和环境
评估理论的标准
- 简洁性: 越少的概念, 解释越多的结果
- 准确性: 准确的描述
- 可验证性
实验心理学简史
科学心理学诞生前
19世纪以前, 真正的科学心理学还没有开始。这一时期的心理学研究者是由哲学家、医生或生理学家兼任的, 心理学的研究方法主要是思辩; 实验生理学家对人的神经活动、感知觉进行研究, 但是还没有系统的心理学实验研究方法与技术
- 主要采用哲学思辨的方法
- 近代哲学、解剖学、生理学的发展为心理学的诞生提供了理论与实验基础
- 近代实验生理学为现代心理学实验方法做出直接贡献
经验主义哲学 / Empiricism, 霍布斯和洛克
- 人的知识源于经验
- 外部经验即人对环境刺激的感知觉, 内部经验即对自己内部活动的反省
- 人的心灵在出生时就如同一块白板
Blank Slate, 心灵从经验中获得有关推理和知识的所有原料
理性主义哲学 / Rationalism, 笛卡尔和斯宾诺莎
- 只有依靠理性直接把握到事物本质的
理性直观知识, 或依靠理性进行逻辑推理得来的知识, 即理性认识, 才是可靠的。依靠感觉经验得来的感性认识往往是不可靠的 - 天赋论: 人的观念不是经验作用的结果, 存在与生俱来的
天赋观念, 如欧几里得几何学的公理和逻辑学的规律
联想主义哲学 / Associationism, 培因
- 从经验主义演变而来
- 把联想的原则看成是解释一切心理活动的原则
- 在时间上同时发生的事件倾向于在心灵中被联系起来
理性主义与经验主义
- 数学和逻辑学-自然科学
- 演绎法-归纳法
- 先天
Nature-后天Nurture
实验生理学的发展
- 人体解剖: 达芬奇, 米开朗琪罗。维萨留斯, 《论人体的结构》
- 生理学的奠基人: 哈维, 《关于动物心脏和血液运动的解剖学研究》
- 实验生理学之父: 哈勒, 《人体生理学纲要》
- 比夏, 《生理学与医学中的应用解剖学》
1800-1850生理学与心理学史上的重大事件
- 感觉神经与运动神经的区别, 贝尔和马戎第
- 神经特质能说, 缪勒: 神经纤维分为五类, 五种感官各对应一类神经纤维
- 颅相学, 加尔: 心理机能取决于脑内特定区域的大小, 头颅结构与人的性格有关
- 脑机能定位说, 弗卢龙, 布洛卡: 人的特殊机能在脑内有明确的定位, 大脑解剖
- 反射动作的发现, 惠特: 脊髓与大脑分离后, 刺激身体, 还能产生不随意运动
- 神经冲动的电性质, 马特锡
- 神经冲动速度的测定, 赫尔姆霍茨: 刺激神经, 引起肌肉收缩。刺激被试的脚趾和大腿, 根据肌肉收缩时间差异和刺激位置的距离, 可以得出神经传导速度
- 人差方程的提出, 来自于天文观测
- 反应时实验, 唐德斯: 简单反应时、选择反应时、辨别反应时
- 感知觉研究, 韦伯: 韦伯定律, K=△I(最小可觉差)/ I(原刺激量)
实验心理学的兴起
冯特: 世界上第一个心理学实验室
1879年, 冯特在德国莱比锡大学建立世界上第一个心理学实验室。标志着心理学从哲学思辨中分离出来, 成为一门独立的学科。也第一次确立了实验法在科学心理学研究中的核心地位, 实验心理学由此成为科学心理学的先锋
冯特的生平
- 1832年8月16日出生于德国海德堡附近的一个牧师家庭
- 19岁进入杜宾根大学学习医学与哲学
- 后转入海德堡大学就读, 在那里他广泛涉猎了解剖学、生理学、医学、物理学和化学等, 并对生理学产生浓厚兴趣
- 在海德堡作生理学研究时, 冯特关于心理学是独立的实验科学的概念开始出现
- 在《对感官知觉理论的贡献》一书中, 他阐述了关于新心理科学的思考和建议。在这本书里, 冯特第一次讲到”实验心理学”
- 这本著作与费希纳的《心理物理学纲要》(1860)一起常被看作新心理学著作诞生的标志
- 1863年, 冯特出版了《人与动物的心理讲义》, 该书所探讨的许多问题都是实验心理学家们多年来一直关注的问题
- 1873—1874年, 出版了《生理心理学原理》, 被心理学界誉为科学心理学史上最伟大的著作
- 冯特晚年兴趣发生了转变, 在其最后的20年间完成了10卷巨著《民族心理学》
- 1920年8月31日这位伟大的心理学家病逝于莱比锡, 享年88岁
对心理学的贡献
- 冯特倡导用心理现实作为心理学的研究内容, 反对把神学和哲学上的灵魂作为自己的研究对象, 为心理学的独立开辟了道路
- 冯特提出必须用实验方法研究心理学, 并于1879年在莱比锡建立了第一个心理学实验室, 对心理现象进行量化的科学研究, 从而创立了实验心理学这门新学科, 使心理学真正地走入科学的殿堂
- 冯特的伟大之处还在于运用莱比锡实验室培养了一大批学生, 遍撒心理学国际性发展的种子。据统计, 冯特的学生中有116人研究心理学课题, 其中34人成为心理学界的知名学者, 如霍尔、卡特尔、铁钦纳、蔡元培
于1917年在北京大学建立了心理学实验室, 并于1926年在该校设立了心理学系
对现代实验心理学的影响
作为现代心理学的创始人, 冯特开创的心理学是以实验方法研究现实的人类心理。因而冯特也就同时成为了实验心理学的开山人物, 这是他对现代实验心理学的最大影响
费希纳: 心理过程的量化研究
费希纳开创性地提出了量化研究”心灵”的思想, 以及具体可操作的量化方法, 即影响深远的心理物理法, 从而为实验心理学指明了方向
费希纳的生平
- 1801年4月19日出生于德国东南部一个小村落的牧师家庭
- 5岁丧父, 由母亲及兄长抚养长大
- 1817年到莱比锡大学开始学医
- 1822年获得医学博士学位, 但此后的十年间费希纳的兴趣转向物理学
- 1824年被聘为莱比锡大学物理学教授, 在教授物理学的同时, 他开始从事感觉研究, 率先采用心理物理学方法研究色觉与后像
- 其后受19世纪荷兰理性主义哲学家斯宾诺莎
Spinoza的身心合一二元论的影响, 相信身体和心理是一个共同体的两个方面, 开始采用科学方法对此进行深入的研究, 进而走向用心理物理学方法研究物理刺激变化和感觉变化之间关系的道路 - 1860年他出版了《心理物理学纲要》
- 1887年11月18日病逝于莱比锡
对心理学的贡献
联系内部世界和外部世界
费希纳采用物理学方法研究感觉生理, 以探讨哲学心理学中身心关系的问题。1860年他在韦伯定律 Weber’s Law 的基础上, 提出了用以了解人们对刺激量的心理经验 即知觉大小 的费希纳定律 Fechner’s Law, 即刺激量的心理经验与刺激量的对数成正比, K=ΔI/I → P=KlogI
费希纳定律深刻地反映了某些本质规律
首先, 这一定律证明了内部世界 心理和经验的世界 与外部世界 物理和环境刺激 之间存在联系, 而且这种联系可以进行简单的数学表达; 其次, 费希纳定律还表明内部世界和外部世界存在差异, 刺激强度增加的效果不是绝对的, 而是相对于已有感觉的强度
心理现象的定量研究方法
费希纳在心理物理学研究中创造了三种感觉测量方法, 它们分别是: 最小可觉差法 Method of Just Noticeable Differences、正误法 Method of Right And Wrong Cases、均差法 Method of Average Error。这三种方法虽然关注的只是最简单的心理过程-感觉, 但它们第一次将人类的心理现象量化地表达出来, 使人们有可能对人类心理进行实验研究
对现代实验心理学的影响
他关于感觉测量的思想被后人进一步深化: 对各种心理现象都试图进行科学量化的研究, 并用数字形式表现出来。人们在这方面走得越远, 实验心理学研究所能涉及的变量就越多。这种不断量化心理现象的趋势, 最终还奠定了心理学中的一个新兴分支-心理测量学的基础
从费希纳阈限思想的不足和缺陷出发, 后人发展出了新的心理物理学方法-信号检测论。信号检测论是现代实验心理学最有力的研究工具之一
赫尔姆霍兹
赫尔姆霍兹的生平
- 1821年出生于柏林附近的波茨坦, 父亲教授语言学和哲学
- 17岁时进入柏林一医药学校, 此后在柏林任军医七年
- 1847年, 在柏林物理学会宣读著名论文, 《论能量守恒》
- 1849年, 在柯尼斯堡大学任生理学教授
- 1858年, 在海德堡大学任生理学教授
- 1871年, 在柏林大学任物理学教授
- 1863年, 出版《声学》
- 1867年, 出版《光学》
- 1894年, 逝世于柏林
对心理学的贡献
- 在视觉和听觉方面进行了大量实验研究, 对感知心理学的发展产生重要影响
- 关于视觉和听觉的心理学知识, 多起源于霍尔姆霍茨的学说和研究, 《光学》和《声学》至今仍为视觉及听觉的实验心理学的经典著作
- 在视觉方面, 在缪勒的神经特质能说和扬的颜色知觉学说的基础上, 提出和完善了颜色知觉的三色论, “扬-赫尔姆霍茨”说
- 在听觉方面, 对听觉刺激、耳的解剖结构以及听觉的空间理论进行了详细论述
- 主张心理学的经验主义, 反对直觉主义
艾宾浩斯
艾宾浩斯的生平
- 1850年2月24日出生于德国波恩附近的一个富商之家
- 17岁进入波恩大学学习历史与哲学
- 1873年获得波恩大学哲学博士学位
- 此后的七年中遍游英法等国从事独立研究
- 大约于1876年, 艾宾浩斯在巴黎的一家旧书店里买到了一本费希纳著的《心理物理学纲要》, 这个偶然的机会深深地影响了他, 也影响了当时新心理学的发展
- 艾宾浩斯深受费希纳用于研究心理现象的数学方法的启发, 决定运用严格、系统的数学方法研究已经被冯特认为无法研究的高级心理过程-记忆
- 此后, 他放弃了哲学, 转而探索用心理物理学的方法研究记忆, 正是这一工作发掘了实验心理学的无穷潜力
- 1880年, 艾宾浩斯成为柏林大学的讲师
- 1885年出版了《记忆》
- 1894年晋升为柏林大学的教授, 不久转任波兰的布雷斯劳大学教授
- 1908年出版了《心理学概论》
- 1909年2月26日病逝
对心理学的贡献
发现并证明了实验法在整个心理学研究中都是有效的工具。实验法可以应用于所有或者至少是大部分的心理现象, 直接关系到实验心理学的最终地位。艾宾浩斯的工作证明了实验法的普适性:
- 证明了实验方法可以用来研究高级心理过程
- 从根本上变革了实验心理学的研究范式。艾宾浩斯创造性地使用无意义音节作为记忆的研究材料, 将实验心理学的研究范式从此导向了人工实验情景
- 为实验心理学提供新的变量测量方法, 解决了高级心理过程的量化问题。艾宾浩斯发明节省法来测量学习和记忆的效果, 不同于以往研究中使用的背诵法。节省法是在识记或学习了一行音节后, 经过一定的时间间隔, 再次识记或学习, 然后对两次识记或学习的次数进行比较, 从而推断记忆的保存量。节省法的问世, 意味着高级心理过程也能够被精确地量化。这种方法隐含着现今实验心理学对高级心理过程进行量化把握的基本原则: 找到某些行为指标的变化来反映心理过程的特性。对所有高级心理过程的量化开创了全新的时代
- 通过实验研究, 建立了第一个和高级心理过程有关的函数关系-遗忘曲线。艾宾浩斯就是试图建立高级心理过程函数的第一人。时间和记忆之间的关系作为常识人人皆知, 记忆之后的时间间隔越长, 记的越少, 但艾宾浩斯正式采用科学手段对时间和遗忘之间的函数关系做了确切研究
对现代实验心理学的影响
整个现代实验心理学的辉煌成就, 都应该部分地归功于艾宾浩斯。如果没有他对高级心理过程应用实验法的探索研究, 记忆、思维、想象、情绪情感等领域或许至今仍是现代实验心理学的禁足之地, 而今它们恰恰是现代实验心理学取得丰硕成果的领域。艾宾浩斯对记忆规律深入而成功的研究, 诱使后辈心理学家们不断尝试将实验法应用于各种心理现象; 而他所采用的人工条件下实验研究的方法, 则成为此后所有实验室心理研究的金科玉律, 保证了实验心理学结论的客观性
- 费希纳和赫尔姆霍兹为实验心理学打下地基
- 冯特的研究实践和大量著述则宣告了实验心理学的诞生, 搭建起了实验心理学这座大厦的框架
- 艾宾浩斯证明了实验法的普适性, 证明实验法可以应用于所有或者至少是大部分的心理现象, 这直接关系到实验心理学的最终地位, 为现代实验心理学取得丰硕成果指明了方向
现代实验心理学
心理学发展的早期思想
- 构造主义: Wilhelm Wundt, 1832 – 1920
- 机能主义: William James, 1842 - 1910
- 联想主义: Hermann Ebbinghaus, 1850 - 1909
- 行为主义: John Watson, 1878 – 1958; B.F. Skinner, 1904 - 1990
- 格式塔心理学: Kohler, 1887 - 1967; K. Koffka, 1886 - 1941
行为主义
- 否定意识, 主张心理学应该研究行为
- 反对内省, 主张应该用实验的方法研究人的心理与行为
- 否定遗传和神经中枢对心理发展的作用
- 行为主义又称SR心理学。刺激-反应模式
Stimulus-Response - 新行为主义的刺激-反应模式: R=f(S, A)的刺激-反应模式, 其中A为中间变量, 即改变刺激-反应之间关系的条件
行为主义心理学在研究方法和手段上对实验方法和实验器材的重视, 对行为与反应之间关系的重视, 在这方面, 行为主义对实验心理学做出了重要的贡献, 对心理学实验方法与技术的发展产生了深远影响
行为主义详见学习心理学笔记
信号检测论 / Signal Detection Theory, SDT
- 产生原因: 传统心理物理法的局限
- 受雷达的工作原理启发
- 如果个体对某一刺激不能作出正确判断, 可能是由于噪声造成的
- 通过被试对于刺激的强度, 肯定程度等的判断来测量个体判断时的感受性, 判断标准, 反应倾向等
认知心理学
- 认为人不是刺激的被动接受者, 而是主动的信息加工者。人的心理过程本质上是信息加工过程
- 关注内部的心理过程
认知心理学的产生
- 系统论、控制论、信息论和计算机技术的产生与发展
- 心理学与人工智能
Artificial Intelligence的研究进展 - 第一部”认知心理学”专著: Ulrich Neisser, 1967
认知科学与认知心理学
- 认知科学的主要研究领域: 认知心理学、心理语言学、人工智能与人工神经网络
- 认知心理学是心理学基础研究的主要领域之一
心理学研究方法的发展
- 行为主义的刺激反应模式及其研究手段
- 认知心理学的发展、研究方法与技术手段
- 认知神经科学的方法与技术手段
- 未来的认知心理学及认知神经科学研究手段及其发展趋势
- 各个阶段的方法技术与仪器设备
认知神经科学
认知神经科学产生和发展: 交叉学科的研究
德国解剖学家弗朗兹·约瑟夫·加尔 Franz Joseph Gall, 1796 提出; 加尔和史普汉 J. G. Spurzheim 在他的《神经系统的解剖生理学概论和脑部深论》提出大脑可以分为35个不同的区域, 认为头壳上较大的凸起代表着这块区域被较频繁的使用, 并与人的心智活动密切相关。颅相学缺乏科学性, 但是却对后来研究心理活动的神经基础提出了开创性的视角
总体论
法国的实验心理学家佛罗伦斯 Pierre Flourens, 他发现兔子和鸽子特定部位的脑损伤并不会造成行为上的改变, 认为行为表现是不同脑区共同参与的结果
区位化论
杰克森 John Hughlings Jackson 通过癫痫病人研究发现特定脑区活动引起癫痫, 提出特定脑区负责特定功能的观点
神经心理学
法国的神经科学家布洛卡在1861在病人大脑发现语言表达障碍区 左脑的额叶布洛卡区, 德国神经病学家卡尔·韦尼克 Carl Wernicke 发现左脑顶叶和颞叶交界处的脑伤导致阅读障碍 韦尼克区
脑功能定位
1870年, 德国两位医师希兹格 Eduard Hitzig 和弗里茨 Gustav Fritsch; 神经解剖学家科比尼安·布鲁德曼 Korbinian Brodmann, 1909 发表论文认为大脑部是由52个不同功能区组成
- 在1970s后期, “认知神经科学”由乔治·A·米勒和迈克尔·葛詹尼加
Michael Gazzaniga共同提出。认知神经科学开始用实验心理学、神经心理学和神经科学的研究方法来研究认知科学的神经机制 - 在1990后期, 经颅磁刺激
TMS、功能性磁振造影fMRI、脑电ERP和脑磁图MEG、正子断层扫描造影PET、单光子电脑断层扫描SPECT、在动物实验实验中采用的单细胞电位记录Single-unit Recording、微神经图Microneurography、面孔肌电图、眼动仪等技术广泛应用到认知神经科学研究领域 - 认知神经科学从分子生物学、神经生化和遗传学、心理学、神经解剖学、计算机科学、临床医学等领域开展了大量跨学科领域的研究, 并取得了丰富的研究成果
- 现代实验心理学方法与技术的发展: 反应时、眼动、生理信息、脑电、脑功能成像、神经调控、计算机模拟、人工智能
心理学研究方法

实验研究的基本流程
课题选择
- 先选择研究领域, 然后选择具体的研究课题
- 从基础理论的角度选题: 验证, 更正, 完善, 解决矛盾
- 从实践应用的角度选题
- 从研究方法的角度选题
- 交叉学科选题
选择研究课题的原则
- 具有理论价值和应用价值
- 具有充分的科学依据和实践依据
- 具有创造性和创新性
- 根据研究者自身的学科兴趣
文献查阅
查阅研究文献的意义
- 系统和全面地了解某一研究领域研究历史和现状
- 有助研究者选择课题
- 查阅文献有助于研究者对研究的结果分析、解释和撰写研究报告
研究文献的种类
- 专业期刊: SCI / SSCI / CSCI / CSSCI
- 专著
- 学位论文
MA & Ph.D - 学术会议论文
Proceeding - 摘要 / 索引
Indexes - 电子出版物和电子学术期刊
Electronic Pubs and Periodicals - 网络文献数据库
要解决的问题
- 以前有人研究过这个问题吗?谁最早研究的?
- 用什么方法研究?得出了什么结论?
- 别人对他/她的研究结果如何看待的?
- 其他人后来研究过该问题吗?他们都用了哪些方法?得出了哪些结论?
- 目前对该问题的主要观点是什么?还有哪些方面不清楚?你感兴趣的是其中的哪个方面?
提出具体问题
如何提出问题
- 对文献不断进行分析和思考, 并发现问题
- 对问题进行分类、归纳和总结
将一般问题转化为研究课题
- 化大为小, 化抽象为具体: 大而无当的问题转化为可以操作可以研究的问题
- 化问题为研究变量与假设: 操作化, 测量, 模型
- 化问题为研究设计: 选择合适的研究设计来检验假设
提出研究假设
如何提出研究假设 Hypothesis
- 演绎推理法 / Deductive Reasoning
- 归纳推理法 / Inductive Reasoning
应注意的问题
- 研究假设在文字表述方面应该简明扼要
- 研究假设应该具有充分的理论与实证有依据
- 通常情况下, 研究假设中应该包括两个或两个以上变量
- 在文字叙述方面, 研究假设应该陈述清楚, 避免使用模棱两可的词汇
- 研究假设具有可验证性, 能够通过不同的研究方法得以实现
好假设的特点
- 指向研究目的
- 阐述变量关系
- 可操作化
- 能得到检验的
实验设计与实施
被试样本的选择
- 被试样本背景信息的控制
- 选择被试样本的方法: 完全随机取样 / 随机分层取样 / 等组匹配取样 / 个案样本取样
确定样本容量
- 样本容量是由统计抽样的基本原理、研究的内容、采用的研究方法以及课题本身的客观条件等因素决定的
- 统计抽样的基本原理(样本分布理论)是确定样本容量的基本前提
- 通常情况下, 研究者可以根据课题研究的需要、采用的研究方法以及客观条件等因素, 采用抽取样本理论或者经验的公式计算样本容量
选择研究方法及技术手段
- 心理物理学的方法
- 传统行为实验研究的方法
- 认知心理学的研究方法
- 神经科学的研究方法与技术
变量控制和实验设计
课题实施的进度及应注意的问题
- 研究者应不断根据反馈的结果, 对下一步课题实施计划进行及时调整
- 对课题实施过程中的不可预期的因素, 应该有充分的思想准备
- 课题组成员应该定期举行课题进展情况的交流会
- 对课题及课题组成员进行组织与管理, 充分发挥课题组人力资源的潜力
- 实验过程: Consent→预备实验→练习实验→正式实验→Debrief
要解决的问题
- 你拿什么人群来研究这个问题?为什么要用他们?
- 这些人群应该具备哪些特征?(教育、智力、民族、性别、年龄、职业、经济收入、社会地位、健康状况、心理特征)
- 他们的哪些特征与该问题更有密切联系?
- 你需要使用刺激材料吗?它们应该具备哪些特征?哪些特征需要加以特别控制?如何呈现它们?对呈现设备有哪些要求?
- 你的实验逻辑是什么?如何根据你的实验逻辑安排被试和刺激?你的实验中的自变量、因变量和控制变量各是什么?自变量有几个?各有几个水平?因变量有几个?如何记录?控制变量有那些?如何控制?
- 你要记录研究对象的哪些特征?这些特征如何量化?你的量化可靠吗?对将来获得的数据打算如何进行分析?所获得的数据会有哪几种模式?哪种模式是你所期望的?
- 你需要什么样的实验或研究环境?实验的基本步骤包括哪些?
- 你如何确保被试理解了实验要求?需要进行预备实验吗?
数据整理与统计分析
- 数据整理原则, 统计学原则, 观察, 经验原则
- 统计分析: 描述统计
平均数, 标准差, 相关分析、推论统计T-Test, 方差分析, 回归分析
研究报告的撰写与交流
- 你的实验结果用图呈现恰当还是用表呈现恰当?
- 图和表的数据告诉了我们什么?需要进行进一步的数据分析吗?若需要, 应采用哪些方法?这些方法的假设得到了满足吗?你的数据信息都得到充分挖掘了吗?数据之间存在矛盾吗?
- 你的数据的主要结果有哪些?你的数据结果支持你前面的研究假设吗?多大程度上支持了你的假设?
- 与相关的研究相比, 一致的地方有哪些?不一致的地方有哪些?这些不一致的地方如何解释?这样的解释合理吗?
- 你的研究对该问题的解决有起到了什么作用?研究本身有哪些不足?如何进行进一步的深入研究?
- 你的研究结论主要有几点?这些结论确定是从你的研究中推论出来的吗?
🚧其他理论课程
上期
- ⭐研究论文和报告
- ⭐伦理道德
- ⭐变量及其控制
- ⭐实验设计
下期
- ⭐传统心理物理法
- ⭐信号检测论
- ⭐反应时实验
- ⭐听觉实验
- ⭐视觉实验
- ⭐注意实验
- ⭐知觉实验
- ⭐语言实验
- ⭐学习与记忆实验
- ⭐情绪实验
⭐生理心理学重点
- 考试题型:选择题
15,简答题5,问答题4 - 提示: 选择题没有多选,简答题需要答点,简单把要点罗列好作答即可,涉及到的名词不需要掌握英文拼写,记得中文名称及对应的位置,问答题需要详细的作答和解释说明
第五章 研究方法与策略 -> 遗传性研究不考第十六章 ADHD 等不考- 重点之外的也可能考
第一章 绪论
本章整理者: 🐏
裂脑术研究
- 裂脑术是切开了胼胝体
- 斯佩里因为裂脑术的研究获得诺贝尔医学奖
- 左脑负责言语
- 嗅觉同侧传递, 视觉触觉对侧传递, 听觉双侧传递
- 左视野看到的东西,说不出来,但是可以用左手指出来或者拿到,不能用右手拿到
相关实验
- 给裂脑人右侧视野呈现一张照片, 他能看到并说出来
- 给裂脑人左侧视野呈现一张照片, 会引起他的情绪反应
- 让裂脑人两只手分别绘制立体图形, 左手绘制的图形更准确 (右脑和空间感知有关)
- 给被试堵住左边的鼻孔,让他用右边的鼻孔闻一朵花,问被试有没有闻到什么,被试说没有,但是让被试用左手拿他闻到的气味对应的东西,被试拿了一朵玫瑰花(右脑闻到了,右脑听懂了,右脑控制左手)
第二章 神经细胞
本章整理者: 🐏
神经系统的细胞
神经细胞的细胞类型
- 神经元:神经系统结构和功能的基本单位
- 神经胶质细胞:支持神经元分布的框架
- 二者都含有胞体和突起
神经元的类型和特征性结构
- 按突起的数量分:
- 多极神经元:最常见
- 单极神经元:触觉和痛觉, 从胞体发出一枝然后分成两支
- 双极神经元:从胞体发出两枝, 视觉, 听觉, 嗅觉
- 无极神经元
- 按功能分:
- 感觉神经元:感知外部刺激传入中枢神经系统
- 中间神经元:获得感觉神经元的信息, 传给其他中间神经元或运动神经元
- 运动神经元:中枢神经系统传出到肌肉或腺体
- 结构:
- 胞体
- 细胞膜、细胞核
- 线粒体:提供能量
- 核糖体:在
RNA序列的指导下进行氨基酸链(蛋白质一级结构)的合成 - 内质网:将蛋白质一级结构加工成二级和三级结构
- 高尔基体:蛋白质的进一步组装(四级结构)
- 溶酶体:吞噬垃圾
- 树突、轴突(髓鞘、郎飞氏节)、轴突终扣
- 郎飞氏节:作用是节约能量,传导更快
- 轴突终扣:包含突触小泡、突触前膜、突触间隙、线粒体、钙离子通道(动作电位到达时,电压门控钙离子通道打开,钙离子进入轴突终扣,触发突触小泡与膜的融合和神经递质的释放)
- 轴突和树突的主要区别
- 内部组成不同: 都有线粒体和微管、微丝,但是轴突有轴浆(由前三者组成),树突有尼氏体(粗面内质网+游离的核糖体)和神经元纤维(电镜下由神经丝、微管和微丝构成)
- 功能不同:树突传入,轴突传出和运输
- 结构不同:树突呈放射状,起始部较粗,经反复分支后变细,表面分布多个棘突。轴突粗细均一,表面光滑无分支,一个神经元通常只有一个轴突
神经胶质细胞的类型和功能
- 功能:占神经系统细胞的
85%,负责支持固定、吞噬、营养、绝缘 - 类型:
- 外周神经系统:
- 许旺细胞:形成髓鞘,每个细胞包裹一段髓鞘
- 卫星细胞:产生神经营养因子 ,维持神经元的生长和发育
- 中枢神经系统:
- 少突胶质细胞:构成中枢髓鞘和形成郎飞氏节,每个细胞包裹若干段髓鞘
- 星形胶质细胞:吞噬死亡神经元残骸,形成脑白质,为神经元提供营养,固定神经元的位置
- 小胶质细胞:吞噬死亡神经元残骸,和炎症反应有关,脑灰质
- 室管膜细胞:位于脑室和脊髓中央管壁表层的细胞脑灰质,在脑脊液
CSF的产生和调节中起重要作用
- 外周神经系统:
神经元内的信息传导
静息电位的机制
- 静息电位是扩散压力与静电压力平衡的结果
- 初始状态:细胞内有高浓度的钾离子,低浓度的钠离子;细胞外有高浓度的钠离子,低浓度的钾离子
- 钾离子的扩散:钾离子通过漏钾通道从细胞内扩散到细胞外,由于扩散压力,钾离子不断外流
- 静电压力的形成:随着钾离子的外流,细胞内变得更加负电,负电荷积累产生了静电压力,这种压力吸引钾离子回到细胞内
- 动态平衡:当扩散压力推动钾离子外流的速度与静电压力吸引钾离子回流的速度相等时,达到平衡状态,形成稳定的静息电位; 这时,细胞内外的电位差通常在
-70mV左右 - 钠钾泵的维持作用:钠钾泵不断地将
Na⁺泵出细胞,将K⁺泵入细胞,维持细胞内外离子浓度的差异,从而维持静息电位的稳定
动作电位的形成和传导(时相、电位及离子通道)
- 静息电位:约为
-70mV; 主要是钾离子漏通道开放,钠钾泵维持离子浓度梯度 - 阈值电位:约为
-55mV; 当膜电位达到阈值电位时,电压门控钠离子通道开始开放,钠离子内流 - 去极化:膜电位迅速升高至约
+30mV; 电压门控钠离子通道大量开放,钠离子快速内流,导致膜电位正向变化; 电压门控钾离子通道的敏感性略低于钠离子,当去极化达到比较高的水平时候钾离子通道开启,钾离子外流 - 动作电位最高值时:钠离子通道关闭,只有当膜电位变为静息水平之后才有可能被再次激活(不应期),此时钾离子继续外流
- 复极化:膜电位下降回到负值; 电压门控钾离子通道继续开放,钾离子继续外流
- 超极化:回到静息电位后钾离子通道关闭,钠离子通道重置(准备好接受下一次激活); 电压会短暂低于静息电位然后回升,因为细胞外的钾离子先积累后扩散(动作电位之后,细胞内的钠离子会有增加,因此钠钾泵要努力把钠离子运出去,钾离子运进来)
静息电位和动作电位过程中跨膜钠钾转移机制有哪些
- 钾漏通道:始终开放,不受膜电位变化的影响。允许钾离子沿着其浓度梯度从细胞内流向细胞外,有助于维持静息电位
- 电压门控钠离子通道:在膜电位达到一定的阈值(约
-55mV,去极化)时开放,此时大量钠离子通过电压门控钠离子通道进入细胞内,使膜电位迅速上升 - 电压门控钾离子通道:在去极化达到较高的水平时开放,钾离子通过电压门控钾离子通道流出细胞,使膜电位下降并恢复到静息电位
- 钠钾泵:利用
ATP的能量将3个钠离子从细胞内运出,同时将2个钾离子从细胞外运入; 维持细胞内低浓度的钠离子和高浓度的钾离子,保持静息电位
神经元之间的信息传导
突触的结构与功能
- 结构:突触前膜(电信号→化学信号)、突触间隙(化学信号→神经递质)、突触后膜(化学信号→电信号)
- 功能:神经元间的信号传递
- 突触前膜细胞器:
- 线粒体
- 囊泡
- 就地合成
- 胞体来源
- 微管微丝
突触后电位的类型和机制
突触后电位是神经递质激活突触后受体从而产生的短暂的去极化或者超极化过程
- 是局部电位变化,而非动作电位
- 兴奋性突触后电位
EPSP: 受体激活后,钠离子通道(或钙离子通道)打开,钠离子或钙离子进入突触后神经元, 导致膜电位去极化(膜电位变得更正)- 去极化:这种去极化如果达到阈值,可以触发突触后神经元产生动作电位
- 抑制性突触后电位
IPSP: 受体激活后,氯离子通道或钾离子通道打开,氯离子进入突触后神经元,或钾离子离开 突触后神经元,导致膜电位超极化(膜电位变得更负)- 超极化:这种超极化使突触后神经元更难达到动作电位的阈值,从而抑制动作电位的产 生
- 突触后电位的终止:
- 再摄取:通过突触前膜自受体再摄取
- 酶失活:通过代谢酶被降解(如乙酰胆碱酯酶将乙酰胆碱降解为醋酸和胆碱)

突触后膜受体的类型
- 都属于递质门控离子通道
- 促代谢型受体(G蛋白偶联受体): 消耗能量
- 机制:当神经递质与受体结合时,通过激活G蛋白,触发一系列细胞内信号传导 级联反应。这些信号可以间接影响离子通道的开放或关闭,也可以引发其他细胞反 应,如基因表达改变
- 反应时间:较慢,通常在秒到分钟范围内
- 功能:调节神经元的长期反应,包括突触可塑性、基因表达、细胞代谢等
- 促离子型受体(也叫做递质门控离子通道): 不消耗能量
- 机制:当神经递质(如谷氨酸、GABA、乙酰胆碱)与受体结合时,直接引起离子通道的开放或关闭,导致离子流动
- 反应时间:非常快,通常在毫秒范围内
- 功能:调节突触后神经元的膜电位,迅速引发兴奋性或抑制性突触后电位(
EPSP或IPSP)
- 例子:
- GABAA 受体:促离子型受体,控制氯离子通道
- GABAB 受体:促代谢型受体,控制钾离子通道
第三章 神经系统结构
本章整理者: (匿名)
神经系统基本特点
脑脊膜结构及功能
- 结构: 硬膜 -> 蛛网膜 -> 软膜 -> 蛛网膜下腔
- 功能: 保护神经系统
脑室结构及脑脊液分布
- 侧脑室
- 第三脑室
- 第四脑室
- 中脑导水管:链接第三和第四脑室
脑脊液 / CSF
- 脑脊液是一种无色透明的体液,见于脑和脊髓
- 由脑室脉络丛中的试管膜细胞产生,并被蛛网膜颗粒吸收
- 脑脊液 ➡ 脑心室系统 ➡ 脊髓 ➡ 血流
- 脑脊液充满心室和蛛网膜下腔; 体积为
125~150ml - 生产速率为
550ml/d - 脑脊液的产生部位主要存在于脑和脊髓的蛛网膜下腔区域
- 脑积水是由于脑脊液在大脑中过度积聚所致。脑室炎是由感染引起的脑室炎症
中枢神经系统结构与功能
前脑结构及功能
- 端脑:
- 大脑皮层: 由外向内分别是分子层、外颗粒层、外锥体层、内颗粒层、内锥体层、多形细胞层
Brodmann, 1909- 额叶: 解决问题, 注意, 内存, 语言, 动机, 判断, 决策, 冲动控制/抑制控制, 社交和性行为
- 顶叶: 触觉, 嗅觉, 味觉, 感官和空间意识, 眼手协调和手臂运动
- 颞叶: 情绪, 气味, 品尝, 感知, 内存, 了解音乐, 侵略性, 语言区
- 枕叶: 视觉和识别
- 皮层下脑区:
- 边缘系统: 情绪, 记忆, 嗅觉链接, 内脏反应
- 海马
- 杏仁核
- 穹窿
- 乳头体
- 扣带回
- 基底神经节: 运动系统的重要组成部分
- 尾状核
- 壳核
- 苍白球
- 边缘系统: 情绪, 记忆, 嗅觉链接, 内脏反应
- 大脑皮层: 由外向内分别是分子层、外颗粒层、外锥体层、内颗粒层、内锥体层、多形细胞层
- 间脑:
- 丘脑: 视觉信号经丘脑转发,听觉信号经网状结构 (丘脑转发)
- 外侧膝状体核:视觉信息,投射至初级视觉皮层
- 内侧膝状体核:听觉信息,投射至初级听觉皮层
- 下丘脑:
- 下丘脑-神经垂体系统: 垂体前叶分泌激素控制内分泌腺, 如促性腺激素刺激性腺垂体前叶激素, 催乳素, 生长素; 垂体后叶分泌催产素,抗利尿激素
- 丘脑: 视觉信号经丘脑转发,听觉信号经网状结构 (丘脑转发)
中脑结构及功能
- 顶盖:
- 上丘:视觉
- 下丘:听觉
- 被盖:
- 网状结构:睡眠和觉醒、注意、运动、生存反射
- 导水管周围灰质:控制运动序列的神经回路
- 红核:运动
- 黑质:运动
后脑结构及功能
- 延髓:控制心血管、呼吸
- 脑桥
- 小脑:运动
脊髓结构及功能
- 脊髓解剖结构:
- 长度为18英寸(45厘米)
- 1/2英寸(14毫米)宽
- 31个节段(31对脊椎骨), 包括:
- 8个颈部区域(颈髓)
- 12个胸部区域(胸髓)
- 5个腰椎区域(腰髓)
- 5个骶部区域(骶髓)
- 1个共同区域(尾节)
- 每个节段包括:
- 背根感觉
- 背根神经节
- 腹根运动
- 脊神经
- 脊髓根:
- 白质
- 黑质
- 中央管
- 前纵裂
- 后纵裂
- 脊髓灰质炎,也称小儿麻痹症
外周神经系统结构与功能
脑神经结构功能
- 1.嗅 2.视 3.动眼 4.滑车 5.三叉 6.展 7.面 8.位听 9.舌咽 10.迷走 11副 12.舌下
- 第一对链接大脑,第二对链接间脑,第3-12对链接脑干
- 感觉神经:1,2,8
- 运动神经:3,4,6,11,12
- 混合神经:5,7,9,10
脊神经结构功能
- 颈神经(C)8对
- 胸神经(T)12对
- 腰神经(L)5对
- 骶神经(S)5对
- 尾神经(Co)1对
自主神经系统结构与功能
交感神经与副交感神经

第四章 精神药理
本章整理者: (匿名)
药物的作用点
- AGO:激动剂——促进特定神经递质的突触后效应
- ANT:拮抗剂——阻断或抑制特定神经递质的突触后效应
药物对神经递质生成的影响作用
- 增加前体物质 (药物作为前体物质,AGO,比如:左旋多巴——多巴胺)
- 抑制合成酶(药物使酶合成失活,阻止NT合成,ANT,比如:PCPA——5-羟色胺)
药物对神经递质储存及释放的影响作用
- 囊泡组装(药物阻止NT在小泡中储存,ANT,比如:利血平——单胺)
- 促进囊泡与突触前膜融合(药物激活NT释放,AGO,比如:黑寡妇蜘蛛毒素——乙酰胆碱)
- 阻止囊泡与突触前膜融合(药物阻止NT释放,ANT,比如肉毒毒素——乙酰胆碱)
药物对受体的影响作用
- 激活突触后膜受体(药物激活突触后膜受体,AGO,比如:尼古丁、毒蕈碱——乙酰胆碱)
- 抑制突触后膜受体(药物激活突触后膜受体,ANT,比如,箭毒、阿托品——乙酰胆碱)
- 激活突触前膜(自身)受体(药物激活自身受体,抑制合成或释放NT,ANT,比如:阿扑吗啡——多巴胺)
- 抑制突触前膜(自身)受体(药物阻止自身受体,增加合成或释放NT,AGO,比如:咪唑克生——去甲肾上腺素)
药物对神经递质再摄取或酶解的影响作用
- 抑制突触前转运子(药物阻止再摄,AGO,比如:可卡因——多巴胺)
- 抑制代谢酶(药物使乙酰胆碱酯酶失活,AGO,比如:毒扁豆碱——乙酰胆碱)
神经递质和神经调质
功能、分布、受体、拮抗剂及激动剂
乙酰胆碱、单胺递质(多巴胺、去甲肾上腺素、肾上腺素)、氨基酸(谷氨酸、GABA、甘氨酸)、肽类、脂类、核苷类
激动剂是激活受体并产生生理反应的物质,而拮抗剂是阻断受体并阻止生理反应的物质






失调相关的疾病机制
PPT 缺失
第五章 研究方法与策略
本章整理者: (匿名)
脑影像与脑刺激
EEG/ERP、MEG、MRI/fMRI、PET、fNIRS、TMS/tDCS成像技术的神经生理机制及各自的优势、劣势(时间分辨率、空间分辨率等),相互之间的区别
- 脑影像: 发现脑的功能,机制类研究
- 脑刺激: 改变脑的功能,应用类研究
- EEG (Electroencephalography)
- 神经生理机制:记录大脑皮层神经元群体的同步突触活动产生的电位变化。主要反映在头皮上的电位变化,与脑功能活动密切相关
- 优势:
- 时间分辨率高,可以达到毫秒级别
- 便携且价格适中,便于在多种环境下使用
- 相对于fMRI而言,对头部移动较为容忍
- 劣势:
- 空间分辨率低
- 易受环境干扰和设备误差影响
- MEG (Magnetoencephalography)
- 神经生理机制:通过检测由大量锥体细胞神经突触在数十毫秒内激活产生的微弱磁场信号无创伤性地探测大脑生理信号
- 优势:
- 高时间分辨率和空间分辨率,达到毫秒级和毫米级
- 不受颅骨影响,图像清晰,不易受到头部移动的影响
- 劣势:
- 设备昂贵且复杂,安装和维护成本较高
- 对环境要求高,需要特定的屏蔽环境来减少噪声干扰
- MRI (MagneticResonanceImaging), 包括 fMRI(功能性磁共振成像)
- 神经生理机制:利用水分子中的氢原子在磁场中核磁共振的性质,检测脑部结构和功能的变化
- 优势:
- 高空间分辨率,能够详细显示脑部结构
- 可以重复测量,适用于长期跟踪研究
- 结合BOLD效应,用于功能成像,监测血氧水平依赖变化
- 劣势:
- 空间分辨率受限于设备大小和线圈设计
- 扫描过程较长,不适合动态事件的研究
- PET (PositronEmissionTomography)
- 神经生理机制:使用放射性示踪剂标记特定受体或代谢物,通过探测湮没辐射产生的γ光子来获取活体组织的功能和代谢信息
- 优势:
- 直接测量代谢活动和受体密度
- 可用于药物研发和疾病诊断
- 时间分辨率相对较好,适合动态研究
- 劣势:
- 涉及放射性物质,安全性问题
- 成本高昂,设备复杂
- 空间分辨率较低
- fNIRS (FunctionalNear-InfraredSpectroscopy)
- 神经生理机制:利用近红外光探测脑组织中的氧合血红蛋白和脱氧血红蛋白对不同波长光的吸收率差异,实时直接检测大脑皮层的血液动力学活动
- 优势:
- 时间分辨率高,可实时监测脑部活动
- 非侵入性,无需担心辐射问题
- 开放性测试环境,适用于实际场景下的研究
- 劣势:
- 空间分辨率较低,只能覆盖有限的脑区
- 受光线散射和吸收影响较大,准确性有限
- TMS (TranscranialMagneticStimulation) / tDCS (TranscranialDirectCurrentStimulation)
- 神经生理机制:通过电磁场改变大脑皮层神经细胞的膜电位,从而调节脑功能。TMS产生短暂的感应电流,而tDCS则是持续的微弱电流刺激
- 优势:
- 非侵入性,安全性较高
- 可以精确控制刺激参数(如频率、强度和持续时间)以调控特定脑区的兴奋性
- 可用于临床治疗,如抑郁症、帕金森病等疾病的辅助治疗
- 劣势:
- 作用范围相对局限,仅能影响局部脑区的活动
- 对于深部脑结构的刺激效果有限,穿透力不足
第六章 视觉
本章整理者: (匿名)
视觉系统的神经通路
- 视网膜:光感受器细胞(视锥细胞和视杆细胞)在这里将光信号转换为电信号
- 双极细胞
- 神经节细胞
- 视神经
- 视交叉
- 外侧膝状体核:六层神经元组成,每层神经元都只接收一只眼睛传入的信息。第1、4、6层接收对侧眼的传入;第2、3、5层接收同侧眼的传入
- 初级视觉皮层(纹状皮层):朝向和运动、视差(形成立体视觉)、颜色
- 纹状皮层V1-V2
- 两条通路:
- 腹侧:下颞叶皮层(大细胞、小细胞、尘细胞系统); what, 是什么、颜色、大小、纹理等
- 背侧:后顶叶皮层(大细胞系统); where, 那里、是否移动、速度与方向
![]() |
![]() |
![]() |
|---|
视网膜对视觉信息的编码方式
- 明暗
- 感受野:
- 视野的一部分,呈现于某细胞感受野内的视觉刺激引起该细胞发放率的变化; 神经元感受野的位置依赖于向它提供视觉信息的光感受器位置。中央视野精确度远高于周围视野
- 由一个近似于圆形的中心部和一个环形的外周部组成,刺激中心部和外周部会产生相反的光线抑制

- ON细胞被照射在中心部的光线激活,被照射在外周部的光线抑制

- OFF细胞则相反

- 编码: 当光照到光感受器上时,某些与之相连的节细胞就会兴奋
- 感受野:
- 色彩
- 光感受器: 三原色编码: 三原色理论(同实心),短、中、长三种波长对应蓝、绿、红视锥细胞(光感受器),每种光感受器的吸收特征是由其含有的视蛋白决定,不同的视蛋白吸收不同波长的光
- 视觉遗传缺损:三种视锥细胞异常的结果
- 蓝色盲:缺失蓝视锥细胞
- 红色盲:红视锥细胞含有绿视蛋白
- 绿色盲:绿视锥细胞含有红视蛋白
- 后两者都无法分辨红绿色
- 视网膜节细胞:对立加工编码:
- 两种颜色敏感性节细胞:红-绿细胞; 黄-蓝细胞; 以中心与外周对立的方式进行反应

- 对颜色不敏感的节细胞:”黑白探测器”
- 两种颜色敏感性节细胞:红-绿细胞; 黄-蓝细胞; 以中心与外周对立的方式进行反应
- 光感受器: 三原色编码: 三原色理论(同实心),短、中、长三种波长对应蓝、绿、红视锥细胞(光感受器),每种光感受器的吸收特征是由其含有的视蛋白决定,不同的视蛋白吸收不同波长的光
视觉联合皮层对视觉信息编码中的作用
- 纹外皮层: 属于视觉联合皮层的一部分:接收纹状皮层和上丘的传入纤维,其传出纤维投射至下颞叶皮层

- 视觉联合皮层的两条通路:
![]() |
![]() |
![]() |
|---|
- 作用

![]() |
![]() |
|---|
小测题目
- 初级视觉区位于大脑皮层的(枕叶)
- 视锥细胞主要负责提供(色调)信息
- (背外侧膝状体)接受视网膜的传入信息,并将信息传出至初级视觉皮层
- 以下哪个脑区主要参与视觉控制的加工(顶内沟)
- 视网膜主要负责对哪些视觉信息进行编码(明暗与颜色)
第七章 听觉、躯体感觉和化学感觉
听觉信息传递的神经通路
躯体感觉信息传递的神经通路
味觉与嗅觉的感觉通路
小测题目
第八章 睡眠
本章整理者: (匿名)
各睡眠阶段的脑电波及其特征
- 觉醒状态:α波(休息)β波(注意, 积极思考时)
- 第1阶段:θ波
- 第2阶段:睡眠纺锤波,K复合波
- 第3阶段:开始出现δ波(慢波睡眠)
- 第4阶段:δ波为主(慢波睡眠)
- 快速眼动期:去同步化快波
各种脑电波的特征
- α波:8-12hz的平稳脑电波,一般和休息状态相联系
- β波:12-30hz的不规则低振幅脑电波,在注意环境中的事件或积极思考时出现
- θ波:3.5-7.5Hz的脑电波,觉醒到睡眠的过渡-慢波睡眠的早期与快速眼动睡眠阶段间歇产生
- δ波:规则的,低于4hz的同步脑电波,高振幅,在慢波睡眠最深阶段出现
- 睡眠纺锤波:12-14hz的波的短脉冲,在睡眠1-4阶段每分钟发生2-5次
- K复合波:突发性,尖波形,是delta波出现的预兆,通常只在第2阶段出现
快速眼动睡眠的特征与功能
- 特征:快速眼动;去同步化脑电波;脑的血液流动和氧气消耗速率增加;肌肉瘫痪;生殖器活动;做梦
- 功能:促进大脑的发展和学习,在大脑发展最活跃的阶段rem占比最高,参与记忆与学习,促进非陈述性记忆的巩固
- 反跳现象:一段时间的rem剥夺后会出现rem增加
参与睡眠与觉醒的主要神经递质
- 睡眠:腺苷(积累会引发睡意);γ氨基丁酸(GABA)
- 觉醒:乙酰胆碱(作用于大脑皮层的唤醒);去甲肾上腺素(蓝斑);5-羟色胺(中缝核);组胺(结节乳头核);下丘泌素或食欲素(外侧丘脑)
参与生理节律的神经控制
- 生理节律的控制来自神经元的投射,视网膜到视交叉上核的直接投射:视网膜-下丘脑路径
- 黑视素:视网膜神经节细胞内的感光色素; 神经节细胞将轴突信息传至视交叉
- 视交叉上核:位于视神经交叉,通过释放化学信号调节生理节律,控制睡眠时间循环
- 松果体在夜间分泌的褪黑素对日常生理节律和季节节律起作用
小测题目
- 随年龄增长, 个体的快速眼动睡眠量越来越少
- 大脑处于安静或休息状态时, 通常是α波
- 腺苷属于睡眠的化学控制 (乙酰胆碱, 去甲肾上腺素, 食欲素不属于)
- 视交叉上核不参与疼痛的知觉, 主要负责调节生理节律
- 有关睡眠的陈述
- 深度睡眠时期的脑电波主要是δ波
- 深度睡眠的事件在前半夜多于后半夜
- 大多数快速眼动睡眠发生在睡眠的后期
- 错误:
深度睡眠阶段后马上进入快速眼动睡眠阶段
第十章 情绪
本章整理者: (匿名)
杏仁核在情绪中的重要作用
- 杏仁核在恐惧情绪中的作用:
- 动物研究:
- 呈现威胁刺激,中央核会激活
- 中央核被破坏,遇到曾经害怕的事件,将不再有害怕的表现: 动物表现更温顺; 血液中的应激激素水平降低; 发生溃疡和其他应激性疾病的概率也降低
- 若电击或者注入兴奋性氨基酸的方法来刺激中央核,动物则表现不安,导致应激性疾病
- 人类研究 - 脑损伤患者:
- 手术中刺激杏仁核,患者才会明确报告感到害怕;但刺激下丘脑等其他脑区的确可以诱发人类恐惧和焦虑时的典型的自主神经反应
- 杏仁核受损的患者对音乐的感知毫无问题,能辨别出愉快和悲伤的音乐,但是无法辨别出令人害怕的音乐
- 动物研究:
- 脑损伤后果: 使患者识别面部表情的能力受到损害,特别是识别恐惧表情的能力
- 脑成像研究: 当人们看到恐惧表情的面孔照片时,杏仁核的活动大幅度增加;但看到愉快表情时,杏仁核的增加幅度很小
- 植入电极: 观察恐惧的表情时,杏仁核比视觉皮层先激活,表明杏仁核直接从皮层下视觉系统接收视觉信息,从而识别恐惧表情
- 杏仁核与面部识别有关,但与表情的产生无关
参与恐惧、愤怒、攻击、冲动控制、道德判断的关键脑区
- 恐惧: 杏仁核
- 愤怒、攻击和冲动控制:
- 杏仁核: 负面情绪的宣泄
- 下丘脑
- 腹内侧前额叶: 负面情绪控制; 做出功利性判断 → 反社会行为
- 道德判断:
- 腹内侧前额叶: 与情绪反应相关, 情绪反应操纵着道德判断 (腹内侧前额叶皮层受损的被试在完成”个人道德”问题时,未表现出明显的不悦情绪的生理迹象)
情绪识别与情绪表达的神经控制
- 镜像神经元:
- 对运动控制有重要影响
- 当动物进行特定行为或者观察另一动物进行特定行为时,镜像神经元被激活
- 看到他人表情,镜像神经系统所提供的的反馈可以帮我们更好地理解他人的感受
- 共情
- 莫比斯综合征
Moebius Syndrome:- 参与面部肌肉运动的神经发育缺陷导致该综合征产生
- 无法作出表情
- 识别他人情感表达也存在障碍
- 无法作出/模仿表情 → 运动系统到躯体感觉皮层的内部反馈信息缺失 → 表情识别困难
- 意志性面瘫
Volitional Facial Paresis:- 面部肌肉不能随意运动
- 由初级运动皮层的面孔区或该区的皮层下连接受损所致
- 但可以使用这些肌肉表现发自内心的情绪
- 情绪性面瘫
Emotional Facial Paresis:- 面部肌肉能随意运动
- 但有情绪反应时,面肌的运动缺乏
- 由于前额叶的脑岛、额叶白质或部分丘脑受损导致
- 右半球损伤 → 情绪表达损伤: 面部表情, 语调
詹姆斯-兰格的情绪感受理论
- 内容:
- 诱发情绪的情境引起了一系列生理反应如发抖、出汗和心跳加快等
- 这些情境也会诱发行为,如攥紧拳头或争斗等
- 随后,从肌肉和参与反应的器官发出的感觉信息反馈到脑,正是这些反馈回来的感觉信息构成了我们对情绪的感受
- 令人恐惧的处境 → 逃跑,心跳加快 → 恐惧
- 实证证据:
- 脊髓损伤的患者(强调自主神经在情绪感受中的作用):
- 损伤的平面越高,情绪感受的强度越小
- 患者主观的情绪感受的自我报告减少
- 实验 (条件A: 牙齿咬住钢笔,微笑表情; 条件B: 嘴唇咬住钢笔,无微笑表情):
- 对观看的连环画进行有趣程度的评分
- A条件的人对连环画有趣度的评分更高
- 脊髓损伤的患者(强调自主神经在情绪感受中的作用):
小测题目
- 前额叶皮层主要与道德判断有关
- 杏仁核不参与面部表情的产生 (但参与表情识别, 愤怒与攻击, 恐惧)
- 顶叶不参与典型攻击行为 (杏仁核, 脑干, 下丘脑参与)
- 关于情绪性面瘫的描述:
- 面部肌肉能随意运动
- 感到开心时,面肌的运动异常
- 主要由前额叶的脑岛、额叶白质或部分丘脑受损导致
- 错误:
由初级运动皮层的面孔区或该区的皮层下连接受损所致
- 小王开车行驶在马路上, 突然从路边窜出一条狗, 此时他顾不上多想, 迅速转动方向盘并急刹车; 停车之后他才感到自己的心砰砰乱跳, 呼吸急促, 觉得害怕. 上面的现象能被詹姆斯-兰格的理论解释
第十二章 学习与记忆
本章整理者: 🐏
突触可塑性和 NMDA 受体
LTP 早期和晚期的机制(发生了什么)
- LTP是指对突触前神经元的反复高频刺激会长时期地增强突触后神经元的可兴奋性
- E-LTP的机制:
- 高频刺激下,突触前神经元释放更多的谷氨酸
- 谷氨酸激活突触后膜上的AMPA受体和NMDA受体
- NMDA受体被激活,允许钙离子进入突触后神经元
- 钙离子激活钙/钙调蛋白依赖性蛋白激酶II(CaMKII)和其他钙激活酶
- 激活的CaMKII磷酸化AMPA受体,增加了AMPA受体对钠离子的通透性,增强了突触后膜的去极化能力
- Pin1通常抑制PKM-ζ的表达,CaMKII和其他钙激活酶抑制Pin1的作用,促进PKM-ζ合成
- PKM-ζ促进AMPA受体的合成和插入突触后膜,这一过程增加了突触后膜上AMPA受体的数量,进一步增强突触传递
- L-LTP的机制:
- PKM-ζ在L-LTP中持续发挥作用,通过调节蛋白质合成和细胞骨架结构,确保AMPA受体在突触后膜上的持续存在和功能,进一步增强了突触传递效率
- 新突触的形成和沉默突触的激活
- 沉默突触(即之前没有功能的突触)通过插入AMPA受体被激活,成为功能性突触,增加了突触连接的数量和强度
CaMKII 的作用
- 磷酸化AMPA受体:激活的CaMKII可以磷酸化AMPA受体,这增加了AMPA受体对钠离子的通透性,从而增强突触后膜的反应性
- AMPA受体的插入:CaMKII还促进AMPA受体的插入到突触后膜,增加突触后膜上的AMPA受体数量,从而加强突触传递
- 维持LTP:通过上述机制,CaMKII在维持早期LTP(E-LTP)中发挥关键作用
PKM-ζ 的作用
- PKM-ζ在LTP的维持和长期记忆的形成中起着重要作用
- PKM-ζ只有催化亚基,没有调节亚基,因此不需要持续的钙来维持其活性
- 一旦被激活,PKM-ζ不能自行失活,这意味着它可以持续地激活下游蛋白质
- PKM-ζ通过激活NSF酶,使AMPA受体向树突棘移动,促进AMPA受体的合成和插入到突触后膜,增加突触后膜上AMPA受体的数量从而维持LTP
- PKM-ζ也会抑制Pin1,使得PKM-ζ持续产生
海马与记忆
海马空间记忆维持哪四种不同细胞类型
- 网格细胞:位于内嗅皮层,网格细胞在动物移动时会在环境中形成一个六边形网格状的激活图案。这些细胞帮助动物在空间中定位自己
- 边界细胞:位于内嗅皮层和海马,当遇到环境边界的时候会激活
- 位置细胞:常见于海马中,当动物处于某一空间位置时脑中被激活的相应神经元
- 头朝向细胞:顾名思义,就是对头的朝向敏感
第十三章 语言与人类的交流
本章整理者: (匿名)
各类失语症的损伤脑区及其外在特征
失语症:由脑损伤引起的基本言语理解或产生方面的障碍,非耳聋或简单运动损伤

| 失语症 | 损伤脑区 | 外在特征 |
|---|---|---|
| 布洛卡失语症 运动型失语症 |
布洛卡区 (左侧额下回、初级运动皮层前部) 参与语法规则的学习; 与初级运动皮层相连 (包含发音所需有关肌肉运动顺序的记忆) 损伤扩展至额叶周围脑区,深入皮层下白质 尾状核头部损伤,基底神经节损伤 |
产生内容不合语法: 难说出带语法意义的功能词,易说内容词;稍影响理解,如语序规则 命名不能: 找词难;漏词或使用不当;词语流畅性低 言语发音非常困难 |
| 威尔尼克失语症 纯词聋 经皮层感觉性失语症 |
威尔尼克区 (左半球颞上回) 和后部语言区 纯词聋:识别障碍,威尔尼克区听觉输入破坏 经皮层感觉性失语症:理解障碍,后部语言区 |
言语理解差 听觉词汇识别: 可以听说读写,不理解听觉词语的意义 词义理解: 不能理解和产生有意义言语,能复述 把思维转换成语词 表达流利但无意义 |
| 传导性失语症 | 弓状束 (外侧裂上部的顶叶下面的白质) 连接威尔尼克区和布洛克区的轴突 |
不能复述: 只能复述意义 (同义词) 正常说话、理解 |
| 命名不能性失语 | 左侧颞叶或顶叶 威尔尼克区完好 动词命名不能: 布洛卡区及周围脑区额叶损伤 |
言语流利、合语法、理解好 找词困难,说话曲折 |
症状对比
| 障碍 | 言语流利 | 理解 | 复述 | 命名 |
|---|---|---|---|---|
| 布洛卡失语症 | 差 | 好 (语法理解稍差) | 差 | 差 |
| 威尔尼克失语症 | 好 (无意义言语) | 差 | 差 | 差 |
| 纯词聋 | 好 | 差 | 差 | 好 |
| 经皮层感觉性失语 | 好 | 差 | 好 | 差 |
| 传导性失语 | 好 | 好 | 差 | 好 |
| 命名不能性失语 | 好 | 好 | 好 | 差 |
负责语音阅读和整词阅读的关键脑区
![]() |
![]() |
|---|
- 整词阅读:视觉词形区(左侧梭状回)
- 语音阅读:颞顶皮层、包括布洛卡区的额下回
小测题目
- 一个病人听觉器官正常, 但不能理解口语; 该患者受损的脑区是威尔尼克区
- 患者在理解和产生自发的有意义言语方面有困难, 但能复述言语, 这被称为经皮层感觉性失语
- 患者不能复述听到的词, 但能正常地说话和理解别人的言语, 这被称为传导性失语症
- 一般认为, 口吃属于语言产生障碍
- 视觉词形区是整词阅读的关键脑区
第十四章 神经系统失调
所有疾病的概念和发病生理机制等
全 PPT 都要看, 重点看 癫痫、发育失调、退行性疾病 这三个部分
第十五章 精神分裂症等
本章整理者: 小叶子
精神分裂症的多巴胺假说
| 阳性症状 | 阴性症状和认知症状 |
|---|---|
![]() |
![]() |
| 中脑边缘通路 | 中脑皮质通路 |
腹侧被盖区 VTA 与伏隔核 NA 之间的多巴胺神经元突触过度活动,产生幻觉、错觉、妄想(被害、控制)等症状 |
该通路的 DA 活动缺陷可导致或恶化精神分裂症的认知及情感症状,如情绪反应淡漠、快感缺失、社交能力差、言语缺乏等 |
DA: 多巴胺Dopamine- 减轻阳性症状的药物是
DA抑制剂,可以减少DA的活动 (第一代药物) - 阿立哌唑等第三代抗精神病药物是部分激动剂 (在正常配体浓度低的脑区起激动剂作用,在浓度高的脑区起拮抗剂的作用), 可以缓解三类症状
情感障碍的单胺假说及脑损伤
单胺假说认为,抑郁症的潜在病理生理基础是中枢神经系统中5-羟色胺、去甲肾上腺素和/或多巴胺水平的降低

脑损伤
- 杏仁核:情绪的识别
- 前扣带回:注意
- 海马:创伤性记忆
- 前额叶:情绪控制
- 纹状体:习惯化和付诸行动
焦虑障碍与 HPA 轴假说
- 惊恐障碍
panic disorder:简称惊恐症是以反复出现显著的心悸、出汗、震颤等自主神经症状,伴以强烈的濒死感或失控感,害怕产生不幸后果的惊恐发作panic attacks为特征的一种急性焦虑障碍; 发病率3~5%,女性发病是男性的2.5倍 - 广泛性焦虑障碍
generalized anxiety disorder:过度焦虑与烦恼,且症状难以自我控制,表现出明显悲痛的临床症状,正常生活受到影响; 发病率3%,女性发病是男性2倍 - 社交焦虑障碍
social anxiety disorder:社交恐惧,患者常处于持续的过度害怕的状态; 发病率5%,无性别差异 - 下丘脑-垂体-肾上腺皮质轴
HPA: 当一个人遇到压力时,下丘脑会释放促肾上腺皮质激素释放激素CRH;CRH然后会刺激垂体释放促肾上腺皮质激素ACTH;ACTH使肾上腺产生皮质醇; 皮质醇是一种压力激素,可帮助身体为Fight or Flight反应做好准备; 在焦虑障碍患者中,HPA轴通常处于过度活跃状态, 这意味着即使在没有压力的情况下,他们的身体也会产生过多的皮质醇, 从而导致焦虑症状
⭐保护网络安全
互联网的出现标志着人类信息传播进入了新时代. 通过互联网, 贫穷者和富有者, 无知者和智者, 彼国和此国的人都有了获取知识、分享生活、交流思想、监督权力的资格
然而, 如今的一些个体, 组织, 甚至是国家, 为了满足自己的某些目的, 通过网络攻击和监控等手段, 肆意地侵犯他人的隐私和权益
本文将介绍一些保护你的网络安全的基本方法, 帮助你更好, 更安全地使用互联网
为什么我连不上xxx网站
包括中国和朝鲜在内, 世界上所有的国家在技术上都身处于世界互联网系统中, 因此理论上, 我们能够访问全球范围内的任何网站
然而, 由于来自一些组织的网络攻击和监控, 我们常常会发现特定网站在我们的网络环境下无法访问
为了防止网络受到攻击, 我们可以与在一个安全环境的第三方进行通信, 让它帮我们访问我们想要的网站 (而它不会受到攻击), 再将网站的内容传递给我们 (我们和它之间的通信是加密的, 所以一般也不会被攻击)
这就是所谓的”代理”技术. 本文将介绍常用的一些安全的工具和服务, 帮助你更好地使用互联网
对那种网络攻击感兴趣的话, 可以阅读这篇论文: Wu, M., Sippe, J., Sivakumar, D., Burg, J., Anderson, P., Wang, X., … & Wustrow, E. (2023). How the Great Firewall of China detects and blocks fully encrypted traffic. In 32nd USENIX Security Symposium (USENIX Security 23) (pp. 2653-2670).
Cloudflare Warp
Cloudflare 是世界上最大的网络服务提供商之一, 为数以百万计的网站提供了安全和高效的服务. 它面向公众推出了一个免费的网络保护服务: Cloudflare Warp
下载对应的客户端并打开后, 你的网络流量将会通过 Cloudflare 的服务器进行加密传输, 从而保护你的网络安全
注意: 由于其所使用技术的特点, 你的 IP 的地理位置不会改变 (如中国用户仍然会被认为是在中国), 但由于不再受到网络攻击, 你可以访问到更多的网站
Proton VPN
Proton 是一家瑞士的网络安全公司, 专注于网络安全和隐私保护, 旗下有云盘, 邮箱, 密码管理等产品. 由于瑞士的中立国地位, Proton 的服务在全球范围内都受到了广泛的认可
Proton VPN 是 Proton 的一款代理产品, 也可以免费使用. 直接下载并安装客户端即可
注意: Proton VPN 需要使用 Proton Mail 的账号登录, 需要先免费注册一个 (并且很推荐日常使用 Proton Mail, 它内置了许多安全和隐私保护的功能)
Tor
Tor 是一个开源 (即产品的源代码是公开的, 任何人都可以检查) 的网络匿名工具, 其不是一个简单的代理工具, 可以和上面提到的 Cloudflare Warp 和 Proton VPN 一起使用
其实 Tor 项目就是所谓的”暗网”, 它并没有那么神秘. 正是由于它高度的匿名性和安全性, 才成为了一些非法交易的场所 (进而导致整个 Tor 被误解和污名化)
Tor 的客户端可以直接下载并安装. 成功连接后, 你的网络流量将会通过由无数志愿者组成的 Tor 的网络进行多层加密传输, 从而保护你的网络安全
注意: Tor 本身也可能会被一些组织监控或封锁, 可以先使用 Cloudflare Warp 或 Proton VPN 进行网络保护, 再使用 Tor 进行进一步的匿名保护
自建代理
如果你有一台”处于安全地区”的服务器, 你也可以简单地自建一个代理服务器, 从而保护你的网络安全
1 | # 开源一键脚本 |
在服务端安装后, 我们需要在客户端 (如手机, 电脑) 上安装对应的客户端, 并使用服务端提供的配置信息进行连接
Windows: 推荐v2rayNAndroid: 推荐V2RayNGiOS: 推荐Shadowrocket(需付费) 或SingBox(免费); 都需要在非中国区的App Store下载
Cloudflare Warp
服务器端同样可以使用 Cloudflare Warp 服务 (常常是由于服务器的 IP 曾被用于非法活动, 因此被一些网站封锁时, 改变网站的 IP 地址)
1 | # 一键配置 WARP WireGuard 网络接口 |
Vim
Vim 是 Linux 系统下的一个文本编辑器
1 | 打开文件(进入普通模式): vim /etc/ssh/sshd_config |
SSH
修改服务器默认 SSH 端口 (默认端口是 22, 容易被扫描尝试暴力破解)
1 | # 打开设置文件 |
使用其他免费代理
不推荐这样!!!!! 许多免费的代理服务都是不安全的, 甚至可能会窃取你的个人信息, 请谨慎使用; 如果非要使用:
总结
虽然在立法层面上, 只有你直接去太平洋拉条光缆才算是违法; 但实际执法大家懂的都懂, 总会有人被杀鸡儆猴
国内无数的高校师生有保护网络安全的需求, 实际上也在通过各种手段保护自己的网络安全. 本文介绍的方法希望给大家提供一些免费且安全的选择
最后, 请访问谷歌学术, 如果你成功打开了这个网站, 说明你成功了!
⭐Rust
Rust 程序设计语言的本质实际在于赋能 Empowerment: 无论你现在编写的是何种代码, Rust 能让你在更为广泛的编程领域走得更远, 写出自信
举例来说, 那些系统层面的工作涉及内存管理、数据表示和并发等底层细节。从传统角度来看, 这是一个神秘的编程领域, 只为浸润多年的极少数人所触及, 也只有他们能避开那些臭名昭著的陷阱。即使谨慎的实践者, 亦唯恐代码出现漏洞、崩溃或损坏
Rust 破除了这些障碍: 它消除了旧的陷阱, 并提供了伴你一路同行的友好、精良的工具。想要深入底层控制的程序员可以使用 Rust, 无需时刻担心出现崩溃或安全漏洞, 也无需因为工具链不靠谱而被迫去了解其中的细节。更妙的是, 语言设计本身会自然而然地引导你编写出可靠的代码, 并且运行速度和内存使用上都十分高效
Rust不止可以用于系统编程, 还可以用于制作WebAssembly、命令行程序、Web前后端等;Rust也是如今性能最好的编程语言之一, 远比JavaScript高效, 但又可以通过WebAssembly与JavaScript无缝交互
配置开发环境
对于 Windows 系统:
- 下载
Visual Studio, 安装C++工作负载(至少包括MSVC和Windows 11 SDK) - 将
xxx\VisualStudio\VC\Tools\MSVC\14.39.33519\bin\Hostx64\x64添加到PATH环境变量 - 在官网下载
RUSTUP-INIT安装包 - 打开安装包, 根据提示安装
Rust - 在命令行输入
rustup --version和cargo --version, 检查是否安装成功
- 推荐使用
VSCode(安装rust-analyzer插件) 或RustRover进行Rust项目开发 - 要升级
Rust, 可以使用rustup update - 要卸载
Rust, 可以使用rustup self uninstall - 要查看本地文档, 可以使用
rustup doc
Cargo
Cargo 是 Rust 的构建系统和包管理器, 类似于 npm、pip、yarn 等
| 命令 | 作用 |
|---|---|
cargo new xxx |
在 ./xxx 目录下创建一个新的 Rust 项目 |
cargo build |
编译项目(开发模式), 输出到 ./target/debug |
cargo build --release |
编译项目(生产模式), 输出到 ./target/release |
cargo run |
相当于 cargo build + ./target/debug/xxx |
cargo check |
检查项目是否能编译通过 |
cargo update |
更新项目的依赖 |
cargo doc --open |
生成项目依赖的文档并在浏览器打开 |
cargo publish |
发布项目到 crates.io |
--release选项会启用所有优化, 这样编译出来的程序会更快, 但编译时间会更长- 如果在
Cargo.toml中添加了依赖, 会在编译前自动下载新添加的依赖
Cargo.toml
Cargo.toml、Cargo.lock 是 Rust 项目的配置文件, 类似于 package.json、package-lock.json; 在 Rust 中, 包通常被称为 crate
1 | [package] |
0.1.0默认被认为是^0.1.0
Hello World
1 | # 创建项目 |
1 | fn main() { |
猜大小游戏
1 | use std::io; // 导入标准库 |
点击下载上面的程序(Windows), 仅
171KB, 梦回大一C语言课
Rust类似于C, 程序的入口是main函数Rust中的缩进风格是4个空格Rust代码必须添加;结尾!表示宏调用,println!是一个宏, 不是函数Rust中的注释同JavaScript
变量
| 关键字 | 作用 |
|---|---|
let xxx = xxx; |
创建一个不可变变量 |
let mut xxx = xxx; |
创建一个可变变量 |
const xxx: xxx = xxx; |
创建一个常量, 必须指定类型 |
- 可以重复声明(必须加
let关键字, 否则视为赋值)同名变量, 但是会在作用域内覆盖之前的变量 - 变量的命名规范是蛇形命名法, 如
snake_case - 常量的命名规范是全大写, 如
MAX_POINTS - 常量的字面量必须是一个常量表达式, 不能是函数调用的结果
1 | let var1 = 5; // 创建一个不可变变量 |
隐藏机制的作用
隐藏机制可以减少变量名的冲突, 但是也会增加代码的复杂性
1 | // 请求用户输入空格字符来说明希望在文本之间显示多少个空格 |
标量类型
Rust 是一种静态类型语言, 有两大类数据类型:
- 标量类型 (类似于
JavaScript的基本数据类型)
整型、浮点型、布尔型、字符型 - 复合类型 (类似于
JavaScript的引用类型)
元组、数组、字符串、切片、引用、结构体、枚举、联合体、函数、元组结构体、Never 类型
Rust 也存在类型推断, 可以省略类型声明, 如果需要显式声明类型, 语法类似于 TypeScript
整型 / Integer
| 长度 | 有符号 | 无符号 | 取值范围 |
|---|---|---|---|
8-bit |
i8 |
u8 |
0-255 / -128-127 |
16-bit |
i16 |
u16 |
0-65535 / -32768-32767 |
32-bit |
i32 |
u32 |
0-4.29e9 / -2.14e9-2.14e9 |
64-bit |
i64 |
u64 |
0-1.84e19 / -9.22e18-9.22e18 |
128-bit |
i128 |
u128 |
0-3.40e38 / -1.70e38-1.70e38 |
arch |
isize |
usize |
计算机是 32 位则是 i32 / u32计算机是 64 位则是 i64 / u64 |
- 有无符号表示是否允许负数
- 默认的整型类型是
i32 n-bit的无符号整数的10进制范围是0到2^n - 1n-bit的有符号整数的10进制范围是-2^(n-1)到2^(n-1) - 1- 字面量:
98_222(10进制,_用于增加可读性)0xff(16进制)0o77(8进制)0b1111_0000(2进制) - 如果数字过大, 发生
整形溢出, 会在debug模式下报错, 在release模式下会进行二进制补码操作
浮点型 / Float
Rust 有两种浮点类型: f32 和 f64, 默认的浮点类型是 f64
1 | let x = 2.0; // f64 |
整数除法的结果会被截断为整数
布尔型 / Boolean
Rust 的布尔类型 bool 只有两个值: true 和 false
1 | let t = true; |
字符型 / Character
Rust 的字符类型 char 是 4 字节的 Unicode 标量值, 用单引号表示 (而双引号表示字符串)
1 | let c = 'z'; |
任何四字节的
Unicode标量值都是一个有效的char类型值, 而不仅限于一般意义的字符
复合类型
元组 / Tuple
Rust 中的元组是一个将多个类型的值组合在一起的复合类型, 长度固定
Rust中的元组是栈分配的, 长度固定, 不能动态增长Rust中通过索引访问元组的值时是通过.(与数组不同)- 不带任何值的元组
()称为单元元组unit, 相当于null
1 | // 声明一个元组 |
数组 / Array
Rust 中的数组是一个将相同类型的值组合在一起的复合类型, 长度固定
Rust中的数组是栈分配的, 长度固定, 不能动态增长Rust中的数组是连续的, 不能有空缺的元素- 虽然数组的长度固定, 但可以修改数组中的元素值
1 | // 声明一个数组 |
字符串 / String
- 用字面量
"xxx"可以声明一个字符串, 此时该字符串是不可变的, 直接存储在二进制文件中 - 用
String类型可以声明一个可变的字符串, 存储在堆上 - 要使用
String类型, 首先通过String::from向内存申请空间, 然后通过所有权机制来自动地释放空间 (在其他语言中是依赖垃圾回收机制, 或手动释放空间)
1 | let s = "hello"; // 不可变字符串 |
函数
Rust 中的函数使用 fn 关键字声明, 并使用蛇形命名法命名
main函数是程序的入口函数- 函数声明的位置不限 (类似于
JavaScript的函数提升) - 函数的参数和返回值都必须显式声明类型
- 函数的返回值是最后一个表达式的值, 或者使用
return关键字返回值 - 语句: 一段执行一些操作但不返回值的代码, 如
let x = 5;,无返回值的函数定义 - 表达式: 计算并返回一个值的代码, 如
5 + 6,println!("xxx")(返回()) Rust是一门基于表达式的语言, 几乎所有的东西都是表达式, 甚至是if语句和循环
1 | fn main() { |
函数, 包括后面的结构体, 在
main函数的前, 后, 外, 内都可以声明; 但不可以嵌套声明
常见问题
1 | fn plus_one(x: i32) -> i32 { |
Rust中的;是语句的结束符, 如果在表达式后面加上;会变成语句, 从而导致返回值类型不匹配; 例如在猜大小游戏中, 我们不断通过.获取上一个表达式的返回值, 最后用;结束这一段代码 (此时不需要返回值)
控制流
if 表达式
Rust 中的 if 语句的条件必须是一个 bool 类型的值, 且不会进行隐式转换, 如 if number { ... } 会报错, 应改为 if number != 0 { ... }
1 | let number = 3; |
用作三元运算符
1 | let condition = true; |
注意:
if语句的每个分支的返回值必须是相同的类型
loop 循环
Rust 中的 loop 语句是一个无限循环
- 可以通过
break关键字退出循环 - 也可以通过
continue关键字跳过本次循环
1 | let mut counter = 0; |
此时
loop中的break相当于fn中的return
循环嵌套
嵌套的循环中, break 和 continue 默认只作用于最内层的循环, 如果想要作用于外层的循环, 可以使用循环标签 'label: loop { ... }
1 | 'outer: loop { |
while 循环
语法类似 if 语句, 可以使用 break 和 continue
1 | let mut number = 3; |
for 循环
Rust 中的 for in 循环是一个迭代器的语法糖, 可以使用 break 和 continue
1 | let a = [10, 20, 30, 40, 50]; |
Range & Rev
Rust 中的 .. 和 ..= 是范围运算符, 用于生成一个迭代器
1 | for number in (1..4).rev() { |
从
0开始时可以省略0, 如..4等价于0..4
所有权
Rust 的核心功能之一是所有权, 它使 Rust 不需要垃圾回收, 也不需要手动释放内存, 从而避免了内存泄漏和二次释放的问题
栈内存和堆内存
在很多语言中,你并不需要经常考虑到栈与堆。不过在像 Rust 这样的系统编程语言中,值是位于栈上还是堆上在更大程度上影响了语言的行为以及为何必须做出这样的抉择
栈和堆都是代码在运行时可供使用的内存,但是它们的结构不同
栈以放入值的顺序存储值并以相反顺序取出值。这也被称作后进先出 Last in, first out。想象一下一叠盘子:当增加更多盘子时,把它们放在盘子堆的顶部,当需要盘子时,也从顶部拿走。不能从中间也不能从底部增加或拿走盘子!增加数据叫做进栈 Pushing onto the stack,而移出数据叫做出栈 Popping off the stack。栈中的所有数据都必须占用已知且固定的大小
在编译时大小未知或大小可能变化的数据,要改为存储在堆上。堆是缺乏组织的:当向堆放入数据时,你要请求一定大小的空间。内存分配器 Memory allocator 在堆的某处找到一块足够大的空位,把它标记为已使用,并返回一个表示该位置地址的 指针 Pointer。这个过程称作在堆上分配内存 Allocating on the heap,有时简称为分配 Allocating(将数据推入栈中并不被认为是分配)。因为指向放入堆中数据的指针是已知的并且大小是固定的,你可以将该指针存储在栈上,不过当需要实际数据时,必须访问指针。想象一下去餐馆就座吃饭。当进入时,你说明有几个人,餐馆员工会找到一个够大的空桌子并领你们过去。如果有人来迟了,他们也可以通过询问来找到你们坐在哪
入栈比在堆上分配内存要快,因为(入栈时)分配器无需为存储新数据去搜索内存空间;其位置总是在栈顶。相比之下,在堆上分配内存则需要更多的工作,这是因为分配器必须首先找到一块足够存放数据的内存空间,并接着做一些记录为下一次分配做准备
访问堆上的数据比访问栈上的数据慢,因为必须通过指针来访问。现代处理器在内存中跳转越少就越快(缓存)。继续类比,假设有一个服务员在餐厅里处理多个桌子的点菜。在一个桌子报完所有菜后再移动到下一个桌子是最有效率的。从桌子 A 听一个菜,接着桌子 B 听一个菜,然后再桌子 A,然后再桌子 B 这样的流程会更加缓慢。出于同样原因,处理器在处理的数据彼此较近的时候(比如在栈上)比较远的时候(比如可能在堆上)能更好的工作
当你的代码调用一个函数时,传递给函数的值(包括可能指向堆上数据的指针)和函数的局部变量被压入栈中。当函数结束时,这些值被移出栈
跟踪哪部分代码正在使用堆上的哪些数据,最大限度的减少堆上的重复数据的数量,以及清理堆上不再使用的数据确保不会耗尽空间,这些问题正是所有权系统要处理的。一旦理解了所有权,你就不需要经常考虑栈和堆了,不过明白了所有权的主要目的就是管理堆数据,能够帮助解释为什么所有权要以这种方式工作
Rust中的每一个值都有一个被称为所有者Owner的变量- 值在任一时刻只能有一个所有者
- 当所有者离开作用域
Out of scope时, 值将被丢弃Drop
作用域
Scope是一个项Item在程序中的有效范围, 其中声明的变量在这个范围结束前都是有效的; 通常{}内的代码块就是一个作用域
移动
当一个复合类型数据的变量被赋值给另一个变量时, 原来的变量将失效, 这被称为移动 Move (而不是像 JavaScript 中, 两个变量都指向同一个地址)
复合类型数据的变量只会将指针, 长度, 容量这些元数据存储在栈上, 而数据存储在堆上; 移动是针对元数据而非数据本身 (数据本身没有变化)
1 | let str1 = String::from("hello"); |
Rust之所以会在变量离开作用域时自动调用drop方法, 释放内存, 是因为如果两个变量同时指向同一个地址, 会导致二次释放 (一个内存安全性Bug)
克隆
移动操作既不是浅拷贝也不是深拷贝, 实际上 Rust 永远不会隐式地创建数据的深拷贝
但如果确实需要复制推内存上的数据, 可以使用 clone 方法
1 | let str1 = String::from("hello"); |
标量类型的变量是存储在栈上的, 所以赋值时其实就是复制 (因为栈内存的复制是快速的); 除此之外, 如果一个元组中的所有元素都是标量类型, 那将该元组赋值给另一个变量时, 也是复制
函数传参
Rust 中的函数, 如果传递复合类型的实参, 会发生移动操作, 除非使用引用 & (后面会讲到) 或克隆 clone 方法
1 | fn take_ownership(s: String) { |
请再次注意, 移动是针对复合类型数据; 标量类型数据会隐式发生复制
引用
Rust 中复合类型的引用 Reference (指向某个数据的指针) 允许你借用一个值, 但不获得其所有权 (借用: 创建一个引用的行为)
用 &xxx 来创建一个指向 xxx 的引用, 该引用不是数据的所有者, 所以引用被丢弃时, 数据不会被丢弃
1 | // 注意定义函数时的参数类型 |
可变引用
正如变量默认是不可变的, 引用也是默认不可变的, 如果想要引用的数据是可变的, 需要使用可变引用 &mut
注意: 在特定作用域中, 只能有一个可变引用, 这是为了避免数据竞争 Data Race; 同时, 可变引用也不能和不可变引用同时存在 (可以有多个不可变引用)
1 | fn change(s: &String) { |
1 | fn change(s: &mut String) { |
1 | let mut str = String::from("hello"); |
悬垂引用 / Dangling Reference
在具有指针的语言中,很容易通过释放内存时保留指向它的指针而错误地生成一个悬垂指针 Dangling Pointer,所谓悬垂指针是其指向的内存可能已经被分配给其它持有者
相比之下,在 Rust 中编译器确保引用永远也不会变成悬垂状态:当你拥有一些数据的引用,编译器确保数据不会比它的引用先离开作用域
1 | fn dangle() -> &String { |
Slice
Rust 中的切片 Slice 允许你引用 (意味着没有所有权) 一个集合中的一部分数据, 而不用引用整个集合
1 | let stri = String::from("hello, world"); |
注意:字符串
Slice Range的索引必须位于有效的UTF-8字符边界内,如果尝试从一个多字节字符的中间位置创建字符串Slice,则程序将会因错误而退出; 出于介绍字符串Slice的目的,本部分假设只使用ASCII字符集
相关说明
调用字符串的 clear() 方法会清空字符串; clear() 方法会尝试创建一个字符串的可变引用, 所以如果之前已经创建了一个不可变引用, 则会报错
1 | let mut s = String::from("hello"); |
之前提到过, 字符串字面量是存储在二进制文件中的, 所以用字符串字面量创建的变量实际上是指向二进制特定位置不可变引用
1 | // 获取第一个单词 |
参数类型为
&str比&String更通用, 因为&String可以隐式转换为&str, 但反之不行
结构体
Rust 中的结构体 Struct 是一种自定义数据类型, 可以将不同类型的数据组合在一起 (类似于 JavaScript 的对象和类)
1 | // 定义结构体 |
结构体数据的所有权
在上面的 Person 结构体的定义中,我们使用了自身拥有所有权的 String 类型而不是 &str 字符串 slice 类型。这是一个有意而为之的选择,因为我们想要这个结构体拥有它所有的数据,为此只要整个结构体是有效的话其数据也是有效的
也可以使结构体存储被其他对象拥有的数据的引用,不过这么做的话需要用上生命周期 Lifetimes,这是一个后面会讨论的 Rust 功能。生命周期确保结构体引用的数据有效性跟结构体本身保持一致。如果你尝试在结构体中存储一个引用而不指定生命周期将是无效的,比如这样:
1 | // 这段代码无法通过编译! |
之后会讲到如何修复这个问题以便在结构体中存储引用,不过现在,我们会使用像 String 这类拥有所有权的类型来替代 &str 这样的引用以修正这个错误
一如其他变量, 结构体的字段默认是不可变的; 而且结构体不能只有一部分字段是可变的, 要么全部可变, 要么全部不可变
结构体更新语法
Rust 提供了结构体更新语法 Struct Update Syntax, 可以使用现有实例的字段值来初始化一个新实例
1 | let me = Person { |
结构体更新语法等同于赋值, 也会发生移动操作, 被移动的复合类型数据的所有权会被转移
元组结构体
Rust 中的元组结构体 Tuple Struct 是一种特殊的结构体, 可以用元组的形式来定义结构体
1 | // 定义元组结构体 |
注意: 元组结构体和元组是不同的类型, 即使它们的字段类型和数量相同; 上面的例子中,
Color和Point也是不同的类型 (即使它们的字段类型和数量相同)
类单元结构体
Rust 中的类单元结构体 Unit-Like Struct 是一种特殊的结构体, 用于创建一个没有字段的结构体
1 | // 定义类单元结构体 |
类单元结构体通常用于实现
trait和作为泛型类型的占位符 (后面会讲到)
打印和 dbg!
Rust 中的结构体默认是不支持打印的 (因为不知道如何打印), 如果想要打印结构体, 需要显示指定打印格式
1 | // 第一步: 加入外部属性 #[derive(Debug)] |
dbg! 宏
Rust 中的 dbg! 宏可以用于打印调试信息, 与 println! 不同的是:
dbg!接收一个表达式的所有权 (除非显式传入引用; 而println!接收引用), 并返回该表达式的值和所有权dbg!的输出目标是stderr(而println!的输出目标是stdout, 后面会讲到)dbg!的输出格式是"{:?}"或"{:#?}", 并且会定位到调用dbg!的代码行
1 | let me = Person { |
1 | [src/main.rs:2] String::from("小叶子") = "小叶子" |
方法
Rust 中的方法 Method 是关联函数 Associated Function 的一种, 用于定义在结构体上的函数; 其第一个参数是 self / &self / &mut self (实际上是 self: self/&self/&mut self 的缩写)
1 | struct Person { |
方法和属性可以同名, 调用时不加括号就是属性, 加括号就是方法; 通常用于实现
getter和setter(后面会讲到)
关联函数
Rust 中 impl 块中定义的函数叫做关联函数 Associated Function, 而其中没有 self 参数的函数需要使用 :: 语法调用 (而不是 .), 例如 String::from
:: 的实质是将函数与模块创建的命名空间 Namespace 进行关联, 从而实现模块化 Modularity (后面会讲到)
1 | impl Person { |
这种函数通常用于实现构造函数
Constructor, 并一般以new命名 (但new不是关键字);impl块可以有多个, 用意后面会讲到
枚举
Rust 中的枚举 Enum 是一种自定义数据类型, 用于定义一个类型可以是多个值中的一个的数据结构
1 | // 定义枚举 |
定义
enum时, 可以不用指定(xxx), 即这个枚举成员不带参数, 例如Option枚举的None
Option
Rust 标准库中的 Option 枚举是一个通用的枚举, 用于表示一个值可能存在也可能不存在的情况
相比于其他语言中的 null 或 undefined, Option 是一个类型安全的解决方案, 通过 Some 和 None 两个枚举成员来表示有值和无值
Option<T> 枚举是如此有用以至于它甚至被包含在了 prelude 之中,你不需要将其显式引入作用域; 另外,它的成员也是如此,可以不需要 Option:: 前缀来直接使用 Some 和 None; 即便如此, Option<T> 也仍是常规的枚举,Some(T) 和 None 仍是 Option<T> 的成员
1 | // Option 的定义 |
<T>是一个泛型参数, 用于表示Option枚举的值的类型, 后面会讲到
取出 Option 的值
在 Rust 的设计中, 除了 Option<T> 之外的所有类型都是肯定有值的, 也就是说, 所有可能为空的值都会被包装在 Option<T> 中
在使用时, Option<i32> 不能直接与 i32 进行运算, 需要先取出 Option 的值, 通常使用 match 或者 unwrap 方法
1 | let some_number = Some(5); |
unwrap方法会直接取出Option的值, 如果是None则会导致程序崩溃
match 控制流
Rust 中的模式匹配 Pattern Matching 是一种强大的运算符, 可以根据模式 Pattern (可由字面值, 变量, 通配符等等内容构成) 匹配不同的值
match 的语法类似于其他语言中的 switch 语句, 但更加强大, 可以匹配更多的模式
1 | enum Coin { |
通配模式和 _ 占位符
match 语句必须覆盖所有可能的情况, 否则会报错; 但有时候我们并不关心某些情况, 这时可以使用通配模式 Wildcard Pattern 或占位符 _
1 | // 以上面吃饺子的例子为例 |
注意:
other和_必须放在最后, 它们的区别在于:other是一个变量, 可以在后面使用, 会导致所有权转移; 而_是一个占位符, 不能在后面使用, 不会导致所有权转移
if let 语法糖
Rust 中的 if let 语法糖可以简化 match 语句, 用于匹配单个模式的情况
1 | // 不用 if let |
if let后面也可以像一般的if语句一样加上else语句
模块化
Rust 有许多功能可以让你管理代码的组织,包括哪些内容可以被公开,哪些内容作为私有部分,以及程序每个作用域中的名字; 这些功能,有时被统称为模块系统 The Module System,包括:
- 包
Packages:Cargo的一个功能,它允许你构建、测试和分享crate Crates:一个模块的树形结构,它形成了库或二进制项目- 模块
Modules和use:允许你控制作用域和路径的私有性 - 路径
Path:一个命名例如结构体、函数或模块等项的方式
package & crate
Rust 中的包 Package 是一个或多个二进制项 Binary Crate 或库 Library Crate 的集合, 它包含一个 Cargo.toml 文件, 用于描述如何构建这些 crate
库没有 main 函数, 也不会被编译成可执行文件, 而是被其他程序引用; 二进制项有 main 函数, 会被编译成可执行文件, 我们上面的所有例子都是二进制项
Cargo 其实就是一个包含用于构建代码的二进制项和其所依赖的库的包; 一个包中可以包含多个二进制项, 但只能有一个库, 且至少含有一个 crate (可以是库也可以是二进制项)
1 | # 创建一个新的项目 (包) |
总述
这里我们提供一个简单的参考,用来解释模块、路径、use 关键词和 pub 关键词如何在编译器中工作,以及大部分开发者如何组织他们的代码
- 从
crate根节点开始: 当编译一个crate, 编译器首先在crate根文件(通常,对于一个库而言是src/lib.rs,对于一个二进制项而言是src/main.rs)中寻找需要被编译的代码 - 声明模块: 在
crate根文件中,你可以声明一个新模块;比如,你用mod garden;声明了一个叫做garden的模块; 编译器会在下列路径中寻找模块代码:- 内联,在大括号中,当
mod garden后方不是一个分号而是一个大括号 - 在文件
src/garden.rs - 在文件
src/garden/mod.rs
- 内联,在大括号中,当
- 声明子模块: 在除了
crate根节点以外的其他文件中,你可以定义子模块; 比如,你可能在src/garden.rs中定义了mod vegetables;; 编译器会在以父模块命名的目录中寻找子模块代码:- 内联,在大括号中,当
mod vegetables后方不是一个分号而是一个大括号 - 在文件
src/garden/vegetables.rs - 在文件
src/garden/vegetables/mod.rs
- 内联,在大括号中,当
- 模块中的代码路径: 一旦一个模块是你
crate的一部分,你可以在隐私规则允许的前提下,从同一个crate内的任意地方,通过代码路径引用该模块的代码; 举例而言,一个garden vegetables模块下的Asparagus类型可以在crate::garden::vegetables::Asparagus被找到
也可以使用相对路径, 如与vegetables同级的fruits, 在vegetables中可以使用super::fruits::Apple; 在garden中可以使用self::fruits::Apple; 其中self可以省略 - 私有与公有: 一个模块里的代码默认对其父模块私有; 为了使一个模块公用,应当在声明时使用
pub mod替代mod; 为了使一个公用模块内部的成员公用,应当在声明前使用pub(除enum外,struct等成员的成员默认也是私有的, 需要显式声明为pub) use关键字: 在一个作用域内,use关键字创建了一个成员的快捷方式,用来减少长路径的重复。在任何可以引用crate::garden::vegetables::Asparagus的作用域,你可以通过use crate::garden::vegetables::Asparagus;创建一个快捷方式,然后你就可以在作用域中只写Asparagus来使用该类型
通常只创建到要引用函数的父模块的快捷方式,如use crate::garden::vegetables;,然后在作用域中使用vegetables::Asparagus, 这样可以明显地区分项目的父项, 避免命名冲突; 还可以用use xxx as xxx来重命名, 用use xxx::*来导入所有公有项 (不推荐)
1 | // my_project |
1 | // src/garden/mod.rs |
二进制和库的最佳实践
包可以同时包含一个 src/main.rs 二进制 crate 根和一个 src/lib.rs 库 crate 根,并且这两个 crate 默认以包名来命名; 通常,这种包在二进制 crate 中只有足够的代码来启动一个可执行文件,可执行文件调用库 crate 的代码; 因为库 crate 可以共享,这使得其它项目从包提供的大部分功能中受益
模块树应该定义在 src/lib.rs 中; 这样通过以包名开头的路径,公有项就可以在二进制 crate 中使用; 二进制 crate 就完全变成了同其它外部 crate 一样的库 crate 的用户:它只能使用公有 API; 这有助于你设计一个好的 API;你不仅仅是作者,也是用户!
私有成员和公有成员示例
1 | mod back_of_house { |
注意: 由于公有结构体
Breakfast具有私有字段seasonal_fruit,因此不能直接back_of_house::Breakfast { xxx }创建实例,必须提供一个公有的构造函数summer来创建实例
重导出 / Re-exporting
使用 use 关键字,将某个名称导入当前作用域后,这个名称在此作用域中就可以使用了,但它对此作用域之外还是私有的; 如果想让其他人调用我们的代码时,也能够正常使用这个名称,就好像它本来就在当前作用域一样,那我们可以将 pub 和 use 合起来使用。这种技术被称为重导出 re-exporting:我们不仅将一个名称导入了当前作用域,还允许别人把它导入他们自己的作用域
使用外部包
Rust 的包管理工具 Cargo 允许你在你的项目中引入外部包, 通过 Cargo.toml 文件中的 [dependencies] 部分来指定; 在编译前, Cargo 会自动从crates.io 下载这些包及其依赖
另外, 标准库 std 其实也是一个外部包, 只不过我们不需要在 Cargo.toml 中引入, 但使用时仍需要 use std::xxx 来导入
1 | [dependencies] |
1 | use rand::Rng; |
嵌套路径
如果需要从一个模块中引入多个项, 有时会写很多行 use 语句, 这时可以使用嵌套路径 Nested Path 来简化
1 | // 不用嵌套路径 |
1 | // 不用嵌套路径 |
常见集合
Rust 标准库提供了许多常见的集合 Collection 类型, 用于存储多个值, 并且长度可变 (存储在堆上)
Vector
Rust 中的向量 Vector 是一个动态数组 Dynamic Array, 可以存储多个相同类型的值, 并且长度可变
1 | // 创建一个新的空向量 |
借用机制
在 vector 的结尾增加新元素时,在没有足够空间将所有元素依次相邻存放的情况下,可能会要求分配新内存并将老的元素拷贝到新的空间中; 这时,下面的代码中第一个元素的引用就指向了被释放的内存; 借用规则阻止程序陷入这种状况
1 | // 以下代码不能通过编译 |
使用枚举来存储多种类型
1 | enum SpreadsheetCell { |
String
Rust 的核心语言中只有一种字符串类型 str, 它是不可变的, 并且是固定长度的, 通常使用 &str 类型来引用字符串字面量
Rust 标准库中的字符串 String 类型是一个可变的, 可增长的, 堆分配的字符串类型, 它是 str 的所有权类型
&str 和 String 都是 UTF-8 编码的, 因此可以包含任何 Unicode 字符
1 | // 创建一个新的空字符串 |
字符串索引和遍历
String 类型不支持使用 [index] 语法来获取单个字符, 因为 String 类型是一个 Vec<u8> 的封装, 一个字符并不总是占用一个字节
如果需要遍历字符串中的字符, 需要显式指定如何遍历, 通常使用 chars 方法来获取字符, bytes 方法来获取字节
1 | let s = String::from("你好"); |
HashMap
Rust 中的哈希映射 HashMap 是一个键值对 Key-Value 的集合 (相当于 JavaScirpt 中的对象或 Map); HashMap 的所有键和所有值必须分别是相同类型
1 | // 注意: HashMap 不会被自动引入作用域 |
HashMap的键和值都是所有权类型, 如果将某个引用插入HashMap, 那么引用指向的数据必须在HashMap有效时也是有效的
更新哈希映射
HashMap 的 insert 方法会覆盖已有的值, 如果想要在键没有值时才插入, 可以使用 entry 方法
entry 方法返回一个 Entry 枚举, 它代表了可能存在或不存在的值, 并提供了一个 or_insert 方法, 在键没有值时插入, 在键有值时返回这个值的可变引用
1 | use std::collections::HashMap; |
错误处理
Rust 将错误分为两大类:可恢复的 Recoverable 和不可恢复的 Unrecoverable 错误; 对于一个可恢复的错误,比如文件未找到的错误,我们很可能只想向用户报告问题并重试操作; 不可恢复的错误总是 bug 出现的征兆,比如试图访问一个超过数组末端的位置,因此我们要立即停止程序
大多数语言并不区分这两种错误,并采用类似异常这样方式统一处理它们; Rust 没有异常; 相反,它有 Result<T, E> 类型,用于处理可恢复的错误,还有 panic! 宏,在程序遇到不可恢复的错误时停止执行
panic!
panic! 宏表示程序遇到了一个无法处理的错误,它会导致程序立即停止执行,并打印错误信息
panic! 会在程序错误时自动触发, 但也可以手动调用
1 | fn main() { |
1 | $ cargo run |
使用自定义类型进行有效性检查
如在开头的猜大小游戏中, 如果用户输入的数字不在 1-100 之间, 我们可以使用 panic! 来终止程序 (但更好的方式是使用 Result 类型)
1 | pub struct Guess { |
Result
Result<T, E> 是一个通用的枚举, 有两个成员:Ok 和 Err, 分别表示操作成功和操作失败
1 | // T, E 是泛型参数, 后面会讲到 |
1 | use std::fs::File; |
unwrap & expect
Result 类型有一个 unwrap 方法, 如果 Result 是 Ok 则返回 Ok 中的值, 如果是 Err 则调用 panic!
expect 方法与 unwrap 类似, 但可以指定 panic! 的错误信息
1 | let file = File::open("hello.txt").unwrap(); |
传播错误
Result 类型有一个 ? 运算符, 如果 Result 是 Ok 则返回 Ok 中的值, 如果是 Err 则将 Err 的值传播给函数的调用者
使用 ? 时, 可能的返回值必须是 Result (或 Option), 且函数的返回值也必须是 Result (或 Option), 且两者必须相同
1 | use std::fs::File; |
std::fs::read_to_string函数可以简化读取文件的操作, 它会打开文件、新建一个String、读取文件的内容,并将内容放入String,接着返回它
泛型
Rust 中的泛型 Generics 是一种在编译时将类型参数化的功能, 使得我们可以不必为了不同的类型编写不同的代码, 而是可以编写一次代码, 并在需要时使用不同的类型
编译器会根据泛型参数的具体类型生成不同的代码 (单态化 Monomorphization), 使得泛型代码的性能和特化代码一样高效
1 | use std::cmp::PartialOrd; |
结构体定义中的泛型
Rust 中的结构体 Struct 和枚举 Enum 也可以使用泛型 (如 Option<T> 和 Result<T, E>)
1 | struct Point<T> { |
方法定义中的泛型
Rust 中的方法 Method 也可以使用泛型, 但需要在 impl 块中声明泛型参数
1 | impl<X> Point<X> { |
Trait
本段内容
Rust 中的特性 Trait 类似于其他语言中的接口 Interface, 它定义了一些行为, 并允许类型实现这些行为; 可以使用 trait bounds 来指定泛型参数必须实现的特性
要让一个类型实现一个特性, 需要先定义 trait, 然后在 impl Trait for Type 块中实现这个 trait
1 | // src/lib.rs |
1 | // src/main.rs |
默认实现
Rust 中的 trait 可以有默认实现 Default Implementation, 这样实现 trait 的类型就不需要实现这个方法, 但可以选择重写
1 | pub trait Summary { |
trait bounds
Rust 中的 trait bounds 是一种约束泛型参数的方法, 用于指定泛型参数必须实现的 trait
指定函数参数
1 | // T 必须实现 Summary trait |
指定返回类型
1 | // 返回实现了 Summary 的类型 |
有条件地实现方法
1 | use std::fmt::Display; |
生命周期
Rust 中的生命周期 Lifetime 是一种约束引用的有效时间, 用于避免悬垂引用 Dangling Reference 和内存泄漏
类似于当因为有多种可能类型的时候必须注明类型,也会出现引用的生命周期以一些不同方式相关联的情况,所以 Rust 需要我们使用泛型生命周期参数来注明它们的关系,这样就能确保运行时实际使用的引用绝对是有效的
1 | &i32 // 引用 |
1 | // 函数签名中的生命周期注解 |
详细解释
现在函数签名表明对于某些生命周期 'a,函数会获取两个参数,它们都是与生命周期 'a 存在的一样长的字符串 slice; 函数会返回一个同样也与生命周期 'a 存在的一样长的字符串 slice; 它的实际含义是 longest 函数返回的引用的生命周期与函数参数所引用的值的生命周期的较小者一致; 这些关系就是我们希望 Rust 分析代码时所使用的
记住通过在函数签名中指定生命周期参数时,我们并没有改变任何传入值或返回值的生命周期,而是指出任何不满足这个约束条件的值都将被借用检查器拒绝; 注意 longest 函数并不需要知道 x 和 y 具体会存在多久,而只需要知道有某个可以被 'a 替代的作用域将会满足这个签名
当在函数中使用生命周期注解时,这些注解出现在函数签名中,而不存在于函数体中的任何代码中; 生命周期注解成为了函数约定的一部分,非常像签名中的类型; 让函数签名包含生命周期约定意味着 Rust 编译器的工作变得更简单了; 如果函数注解有误或者调用方法不对,编译器错误可以更准确地指出代码和限制的部分; 如果不这么做的话,Rust 编译会对我们期望的生命周期关系做更多的推断,这样编译器可能只能指出离出问题地方很多步之外的代码
当具体的引用被传递给 longest 时,被 'a 所替代的具体生命周期是 x 的作用域与 y 的作用域相重叠的那一部分; 换一种说法就是泛型生命周期 'a 的具体生命周期等同于 x 和 y 的生命周期中较小的那一个; 因为我们用相同的生命周期参数 'a 标注了返回的引用值,所以返回的引用值就能保证在 x 和 y 中较短的那个生命周期结束之前保持有效
详见原文
结构体定义中的生命周期注解
目前为止,我们定义的结构体全都包含拥有所有权的类型。也可以定义包含引用的结构体,不过这需要为结构体定义中的每一个引用添加生命周期注解
1 | struct ImportantExcerpt<'a> { |
生命周期省略
Rust 有一套生命周期省略规则 Lifetime Elision Rules, 它允许我们在某些情况下省略生命周期注解 (早期版本的 Rust 没有这个功能, 需要为每个引用添加生命周期注解)
- 输入生命周期
Input Lifetimes: 函数或方法参数的生命周期 - 输出生命周期
Output Lifetimes: 返回值的生命周期 - 规则一: 每个是引用的参数都有它自己的生命周期参数
- 规则二: 如果只有一个输入生命周期参数, 那么它被赋予所有输出生命周期参数
- 规则三: 如果方法有多个输入生命周期参数, 但其中一个是
&self或&mut self, 那么self的生命周期被赋予所有输出生命周期参数 - 编译器会依此检查这些规则, 如果代码符合规则, 则不需要显式指定生命周期
方法定义中的生命周期注解
1 | impl<'a> ImportantExcerpt<'a> { |
静态生命周期
'static 是一个特殊的生命周期, 它代表整个程序的运行时间内都有效, 所有的字符串字面量都拥有 'static 生命周期
1 | let s: &'static str = "I have a static lifetime."; |
综合示例
1 | use std::fmt::Display; |
🚧测试
Rust 有一个内建的测试框架, 可以编写单元测试、集成测试和文档测试
🚧闭包
🚧迭代器
🚧智能指针
🚧并发
🚧面向对象
🚧模式匹配
🚧高级特性
🚧Std Lib
- 标题: 小纸箱
- 作者: 小叶子
- 创建于 : 2023-10-26 11:57:42
- 更新于 : 2025-10-13 09:30:54
- 链接: https://blog.leafyee.xyz/2023/10/26/Box/
- 版权声明: 版权所有 © 小叶子,禁止转载。
















