Docker容器端口访问问题排查与解决文档

Docker容器端口访问问题排查与解决文档

AI生成声明

本文档由Claude Sonnet 4 in GitHub Copilot生成

问题描述

环境信息:

  • 服务器A:10.0.0.1(客户端)
  • 服务器B:10.0.0.3(服务端,运行GitLab容器)
  • 操作系统:Linux
  • 服务:GitLab CE容器,端口映射 8929:8929

问题现象:

  • 服务器A可以通过SSH(22端口)正常连接到服务器B
  • 服务器A无法访问服务器B上8929端口的GitLab服务
  • 从服务器A使用telnet连接10.0.0.3:8929出现TIMEOUT

排查过程

1. 基础网络连通性检查 ✅

1
2
# SSH连接正常,说明网络层面通畅
ssh user@10.0.0.3 # 成功

2. 服务端口绑定检查 ✅

1
2
3
# 在服务器B检查端口监听状态
sudo netstat -tulpn | grep 8929
# 结果:tcp 0 0 0.0.0.0:8929 0.0.0.0:* LISTEN 593923/docker-proxy

结论: 服务正确绑定在0.0.0.0:8929,不是绑定地址问题

3. 防火墙状态检查 ✅

1
2
3
4
# 检查各种防火墙服务
sudo systemctl status firewalld # 未找到服务
sudo systemctl status ufw # 状态:inactive
sudo iptables -L -n -v # 显示ACCEPT规则存在

结论: 防火墙不是问题,且已有允许8929端口的规则

4. Docker容器服务确认 ✅

1
2
3
# 确认是Docker容器服务
sudo docker ps | grep 8929
# 结果:gitlab容器正常运行,端口映射:0.0.0.0:8929->8929/tcp

5. Docker网络配置深入检查 ❌

1
2
3
4
5
6
7
8
9
# 检查iptables NAT规则
sudo iptables -t nat -L -n -v
# 结果:DNAT规则正常 - tcp dpt:8929 to:172.17.0.2:8929

# 检查FORWARD链规则
sudo iptables -L -n -v --line-numbers
# 发现问题:
# - Chain DOCKER (0 references) ← 关键问题
# - Chain FORWARD (policy DROP) ← 默认拒绝转发

根本原因分析

核心问题: Docker的iptables规则不完整

具体表现:

  1. FORWARD链缺少Docker规则引用:虽然NAT规则正确配置了端口转发,但FORWARD链没有引用DOCKER链
  2. FORWARD链默认策略为DROP:所有转发流量被默认拒绝
  3. Docker服务的iptables管理异常:可能是Docker服务重启时iptables规则没有正确重建

技术原理:

  • Docker容器网络流量需要经过:外部请求 → NAT转换 → FORWARD转发 → 容器
  • NAT规则负责地址转换:10.0.0.3:8929 → 172.17.0.2:8929
  • FORWARD规则负责允许转发:缺失时流量被DROP策略拒绝

解决方案

采用方案:重启Docker服务

1
sudo systemctl restart docker

验证修复效果

1
2
3
4
5
6
7
# 在服务器A测试连接
telnet 10.0.0.3 8929
# 结果:连接成功

# 检查修复后的iptables规则
sudo iptables -L FORWARD -n -v
# 预期结果:DOCKER相关链被正确引用

修复前后对比

修复前的问题规则

1
2
3
4
5
Chain FORWARD (policy DROP 63 packets, 3780 bytes)
# 空规则,所有转发被DROP

Chain DOCKER (0 references) # ← 没有被引用
Chain DOCKER-USER (0 references) # ← 没有被引用

修复后的正确规则

1
2
3
4
5
6
7
Chain FORWARD (policy DROP)
target prot opt source destination
DOCKER-USER all -- 0.0.0.0/0 0.0.0.0/0
DOCKER-ISOLATION-STAGE-1 all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED
DOCKER all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0

经验总结

排查思路

  1. 自下而上排查:网络连通性 → 端口绑定 → 防火墙 → 应用层
  2. Docker网络问题特征识别
    • 服务在本地正常,远程不可访问
    • NAT规则存在但FORWARD规则缺失
    • docker-proxy进程监听端口

关键诊断命令

1
2
3
4
5
6
7
8
# 检查Docker容器端口映射
docker ps | grep [端口]
docker port [容器ID]

# 检查iptables规则完整性
iptables -t nat -L -n -v # NAT规则
iptables -L FORWARD -n -v # 转发规则
iptables -L DOCKER -n -v # Docker专用规则

预防措施

  1. Docker服务配置检查:确保iptables管理未被禁用
  2. 定期检查iptables规则:验证Docker相关链的引用状态
  3. 监控Docker服务状态:异常重启后及时检查网络规则

备用解决方案

如果重启Docker服务不可行,可手动修复iptables规则:

1
2
3
sudo iptables -I FORWARD -j DOCKER
sudo iptables -I FORWARD -j DOCKER-ISOLATION-STAGE-1
sudo iptables -I FORWARD -i docker0 -o docker0 -j ACCEPT

结论

此问题是典型的Docker网络配置问题,根本原因是iptables的FORWARD链缺少Docker相关规则引用。通过重启Docker服务重建完整的iptables规则,成功解决了容器端口外部访问问题。

这类问题的关键在于理解Docker网络的工作原理:NAT + FORWARD 的双重机制,两者缺一不可。

Ubuntu重启后NVIDIA驱动故障解决

问题描述

服务器重启后,图形界面频繁黑屏/闪退,同时命令行输入nvidia-smi报错无法连接到驱动。

由于网络配置问题,重启后默认采用已失效的旧配置,导致联网失败。

解决过程

  1. 解决图形化界面和联网问题

由于显卡驱动故障,电脑可能只能调用CPU加载图形界面,黑屏可能是操作过快导致的。因此,在开机/重启后一段时间内不要进行任何操作,以降低CPU负担。一段时间后再操作电脑,点击Ctrl+Alt+F1Ctrl+Alt+F2切换图形界面/命令行终端,就有机会可以顺利进入图形界面操作。

进入图形界面后需要修改网络设置,将已失效的旧配置文件删除,默认启用新配置文件(在图形界面的设置(Settings)中)。

  1. NVIDIA驱动修复

DeepSeek指出通常是系统内核与驱动版本不匹配导致的,给出了如下建议:

在Linux Ubuntu系统中,重启后出现nvidia-smi提示无法连接到NVIDIA驱动的问题,通常是由于系统内核更新导致驱动与内核版本不匹配引起的。以下是综合多篇搜索结果整理的具体解决方案:


方法一:通过DKMS重新生成驱动模块

  1. 安装DKMS工具
    DKMS(Dynamic Kernel Module Support)能够自动为内核外的驱动生成适配模块,避免因内核更新导致驱动失效。

    1
    sudo apt install dkms
  2. 查看当前NVIDIA驱动版本

    1
    ls /usr/src | grep nvidia  # 例如输出可能为nvidia-470.74
  3. 通过DKMS重新安装驱动模块
    使用查到的驱动版本号(如470.74)执行以下命令:

    1
    2
    sudo dkms install -m nvidia -v 470.74
    sudo reboot
    • 完成后通过dkms status确认模块状态。

方法二:切换回旧内核版本

如果内核自动更新后驱动失效,可手动切换回旧内核:

  1. 查看可用内核版本

    1
    2
    grep menuentry /boot/grub/grub.cfg  # 列出所有内核选项
    uname -r # 查看当前内核版本
  2. 修改GRUB默认启动项

    • 编辑GRUB配置文件:
      1
      sudo vim /etc/default/grub
    • 修改GRUB_DEFAULT的值,例如设置为旧内核的路径(如"1>3"表示选择第2个主菜单项下的第4个子项):
      1
      GRUB_DEFAULT="1>3"
    • 更新GRUB并重启:
      1
      2
      sudo update-grub
      sudo reboot

方法三:禁止内核自动更新

为避免后续内核更新导致驱动失效,可锁定内核版本:

  1. 禁用自动更新

    • 修改配置文件/etc/apt/apt.conf.d/10periodic/etc/apt/apt.conf.d/20auto-upgrades,将所有数值设为0以关闭自动更新。
    • 在“Software & Updates”中关闭自动更新选项。
  2. 锁定当前内核

    1
    sudo apt-mark hold linux-image-<当前内核版本>  # 例如linux-image-5.4.0-60-generic

方法四:重新安装NVIDIA驱动

若上述方法无效,可尝试彻底重装驱动:

  1. 卸载旧驱动

    1
    2
    sudo apt purge nvidia*
    sudo apt autoremove
  2. 安装匹配的驱动版本

    • 推荐使用官方驱动或ubuntu-drivers自动安装适配版本:
      1
      sudo ubuntu-drivers autoinstall  # 自动安装兼容驱动
    • 或手动下载驱动安装包,指定内核源码路径(需安装linux-headers-$(uname -r)):
      1
      sudo ./NVIDIA-Linux-x86_64-<驱动版本>.run --kernel-source-path=/usr/src/linux-headers-$(uname -r)

附加建议

  • 检查依赖环境
    若DKMS报错(如gcc版本不兼容),需切换GCC版本:
    1
    sudo update-alternatives --config gcc  # 选择兼容版本
  • 启用持久化模式
    解决nvidia-smi响应慢的问题:
    1
    sudo nvidia-persistenced --persistence-mode

总结

  • 优先使用DKMS:适合驱动版本与内核兼容但未正确加载的情况。
  • 切换内核或锁定版本:适合长期维护稳定性的场景。
  • 重装驱动:作为兜底方案,但需注意CUDA等依赖的兼容性。

如果问题反复出现,建议结合禁用内核更新和DKMS工具,以彻底解决问题。

运行dkms修复失败,因此选择了重新安装驱动的方法:

1
2
3
4
5
6
7
8
9
10
11
12
# 添加官方显卡驱动PPA
sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt update

# 查看推荐驱动版本
ubuntu-drivers devices

# 安装推荐版本(例如535版本)
sudo apt install nvidia-driver-535

# 重启生效
sudo reboot

matlab无GUI安装

问题描述

由于需要在服务器中安装matlab,但无法启动服务器的图形界面,尝试RDP连接等方式无果后,决定采用命令行安装。

安装过程

从网站上获取Matlab R2023b Linux安装包(R2023b_Linux.iso)

挂载到系统中:

1
2
3
sudo mount -r ./R2023b_Linux.iso ./installer 
cd ./installer
ls

挂载目录中即出现安装文件。其中install为安装脚本,installer_input.txt为安装配置文件。

设置访问权限:

1
sudo chmod 777 ./installer_input.txt

用vim打开安装配置文件

1
vim ./installer_input.txt

结合配置文件中的提示,修改配置参数,主要包括安装位置、安装文件密钥、需要安装的软件包内容等。

配置完成后运行安装脚本:

1
sudo ./install -inputFile ./installer_input.txt

如没有在安装配置文件中另外设置,Linux系统默认的安装日志文件应位于/tmp/mathworks_root.log路径。可打开文件查看安装结果。

1
vim /tmp/mathworks_root.log

完成安装后,环境变量可能没有被自动添加,可运行echo $PATH查看,或直接运行matlab命令查看。

手动添加环境变量:

  • 临时添加:

    1
    export PATH=$PATH:/usr/local/MATLAB/R2023b/bin
  • 为当前用户永久添加:

    1
    2
    vim ~/.bashrc # 在文件最后一行加入export PATH=$PATH:/usr/local/MATLAB/R2023b/bin
    source ~/.bashrc

注意事项

  1. 安装文件有.iso文件和.zip文件,前者体积较大(约10GB),后者较小(约200MB)。先前使用.zip文件解压后安装失败,经mathworks官网论坛问答结果提示,改用.iso文件进行安装。

  2. 如未使用sudo安装,日志文件的文件名应为/tmp/mathworks_{username}.log

  3. 以上安装步骤未包含激活

参考链接

https://blog.csdn.net/Alex497259/article/details/129865457
https://blog.csdn.net/weixin_44987694/article/details/129341420

样品倾转的计算:使用NiceGUI框架

起源

设想是做一个自动计算倾转α和β的程序,用来解决在倾转样品时计算倾转角的问题。

算法

之后再写

前端

计划使用NiceGUI框架。但是NiceGUI似乎不支持导出静态页面,不能发布到GitHub Pages上。

后续计划

  • 目前只实现了起点为001带轴的情形,且尚未经过大范围测试。
  • 之后会尝试添加非001带轴起始情形的支持,需要实现衍射花样的自动生成。
  • 提供静态页面生成的支持,包括以下可选的技术路线:
    • 基于NiceGUI生成的结果,手动制作网页模版
    • 调整前端技术路线,转向使用flask或nextjs(改用nextjs可能导致逻辑改写成js代码,增大工作量,除非采用前后端完全分离的策略)

Github pages deploy问题

描述

利用GitHub Action部署源码在master分支上的hexo框架页面时发现deploy步骤运行失败并报错:

1
2
error: Branch "master" is not allowed to deploy to github-pages due to environment protection rules.
error: The deployment was rejected or didn't satisfy other protection rules.

原因

由于从Deploy from branch切换到Github Action,生成页面的branch从gh-pages变为master,而原本的部署自动生成了名为github-pages的环境,并自动应用了对gh-pages分支的保护。当将source branch切换为master后,原保护规则并未自动修改,导致deploy因master分支无保护而失败。

解决

Settings > Environment > 删除github-pages环境

参考

https://github.com/orgs/community/discussions/39054

typescript安装问题

描述

使用yarn安装typescript时成功,但运行报错:

1
2
> tsc -v
tsc: command not found

原因

yarn路径未添加至环境变量,未找到yarn下载的typescript二进制文件

解决

  • 运行yarn global bin获取yarn二进制下载路径
  • 将路径添加至环境变量
    1
    export PATH=$PATH:/path/to/yarn/bin
    问题即解决。

学生节抽奖界面:后日谈

偶然接锅,开始干活

阿伟来寝室找我的时候,我还在写计组lab5。我看到ddl附近还有计组lab4lab5的ddl、媒体计算滤波小作业的ddl、量子力学第三章作业ddl、材科实验答辩ddl、量子力学期中,感到有点害怕。但由于好奇心,以及想要检验一下暑假自学前端三件套的成果,我打算先看看旧模板代码的情况再作决定。

我看到往年代码的结构还算清晰,而且代码量不是很大,除了css样式表行数达到800+以外。阿伟说wj忙ddl没空,估计去外面找人也麻烦,我就把这个锅接下来了。

理解代码结构

接完锅,我先用两天把lab5写完,然后就开始看代码结构。网页的js脚本用了jQuery框架,是我之前没学过的(之前只看了一些js的基础语法),所以面向搜索引擎先学了一手。但是css这里就比较费劲了,css3的3D效果我之前没有接触过(不得不说还真挺强大的),而且800多行的样式表层叠嵌套,还有很多冗余的代码(原框架预留,但往年版本的抽奖页面没有应用的)。

开始写

随机数生成

由于这次的抽奖要求变了,抽奖券上的信息是数字0~9和8种卡牌颜色以及8种键合方式,所以我打算生成0~779且十位不超过7的三位数,再用这个数经过处理来生成抽奖结果。

3d效果

模仿了原本的旋转效果写了竖转,还通过rotateZ(45deg)的暴力手段做出了甲方要求的斜转xs。场景的切换就通过容器的上下移动translateY,再靠transition形成的动画,把不要的容器上下移个2500px就完事。

爆写阶段

写到后面感觉在乱写,时间有点紧,也不管什么函数封装复用的了,只要不出bug就行,出了bug打个补丁,看着没事就行。写的速度飞快,就是不知道会不会在什么时候来一个bug。

代码乱七八糟的像*山,不过也不指望会有人再来维护它了,只要能跑就行(代码和人总得有一个能跑.jpg)人反正是跑不掉了。

收官debug

周日半夜2点,我把调完的代码打包发给cx,希望不会出什么问题。cx两点半回复说没啥问题(真的肝)。不过bug这种东西,不出意外肯定是要出意外的。

结果bug就在周日下午准时找上门来。我接到aw的消息说键合闪动动画出了点问题,只有一团黑白影子。兼容性这个东西就很难办,也不知道为啥大礼堂只能用mac,safari和chrome(edge)还是不一样的,就算我本地拿edge和firefox都测过也不知道safari会出什么问题。

我看完这个黑白影,估计是背景图片大小没设置好。研究了半天才打开safari的元素审查(感谢百度),一看发现在动画里已经把background-size设置成contain了。一直不知道是哪里出了问题,我就看着代码开始怀疑人生。怀疑半天也没用,干脆就在元素审查里面瞎改。改了一下还真改出来了:在动画外面加了一个contain莫名其妙就可以了。估计是safari的可动画化属性和edge/firefox不一样。

(顺带一提,我在我pad上的safari也没试出过这种问题)

来点感想

大一学生节是观众,大二学生节是演员,大三学生节是班剧里的酱油。大二大三都只是忙完自己的锅就溜了,毕竟第二天还有考试。大四这次把名字写在了工作人员列表里,完整看完了自己作为工作人员(虽然只负责了一个小小的抽奖,比忙里忙外的其它人水多了)的一届学生节。

听说这是最后一届了,随着招生计划的调整,这一届没有新生了。没有新生,没有招新,学生会或许就要解散了吧。大四了,明年就要毕业,九字班也要从材院离开了。能在本科的最后一年,能在最后一届学生节上献上这一份凝结着一周心力的代码作为last dance,这一周的努力绝对值得。

代码仓库及彩蛋

代码仓库github.com/Weslie0803/hack-lajidog/
网页预览weslie0803.github.io/hack-lajidog/

彩蛋:css中的.cubeShow_114514和html里的德语数字,都是在写得精神时常时候的发病产物罢了。

LeetCode日记

关于LeetCode评测的机制

2022年9月2日,天气忘记怎么样了,反正我在图书馆摸鱼的时候一时兴起想到了LeetCode第三题”无重复字符的最长子串”的算法,就随手写了。

不得不说很多时候还是要面向对象比较好写,所以定义了一个CharSet类,顺便就创建了一个charset对象。

蜜汁失败

我觉得我算法没问题了,所以拿默认测例跑了一下,顺便处理好边界情况。看着这边测试也没问题,我就点了提交。
结果在”bbbbb”这个测例莫名其妙给我报错,预计结果为1,但我的代码跑出来是0。因为对自定义测例的掌握还不太熟练,我脑子里跑了一下,觉得没问题。
为了排除评测机抽风的极小概率事件,我原样重新提交了一遍,结果还是没过。

等我折腾了几遍终于学会了手动设置测例,接着提交,发现”bbbbb”这个手动设置的测例正常输出了1的结果。我再次怀疑起是否存在在编译时宇宙粒子改变了评测机中的某几个bit的可能性,又交了一遍,结果证明:当前地球的辐射水平应该还是比较正常的。

原因分析(虚假的原因)

考虑到输出的结果0与我初始化变量的值一致,我怀疑是否是代码没有顺利进入循环。为此,我偷偷把初始化值改成了-1,
果然这个测例给我跑出了-1的结果。但我死活想不到为什么它不进循环。

解决的过程(应该是真实的原因)

在我不断检查代码的时候,我开始思考是否是因为定义对象的问题,毕竟这次是第一次在LeetCode里用面向对象写。

我意识到定义完类之后顺便创建的对象是在LeetCode的函数外面的,转而意识到这个对象是全局变量。我试着把对象的声明放进函数内部,然后就过了。

进一步分析

引出一个猜想,LeetCode的评测应当是在一次运行中多次调用其设置的函数接口来实现的。意即,两次调用间,全局变量不会被析构,这在我的算法中
就会影响最终的结果:每次计算前,我的对象是需要初始化的,这个初始化过程被我封装在构造函数中,只在对象创建时被调用。
“ddddd”可能是所有测例中的第二个,在正常运行完第一个测例后由于没有重置charset对象,影响了第二个测例的结果。

因此,在写题的时候还要考虑对象的生命周期问题,对这种情形,应当将对象的声明放在函数内部,使其在函数被调用时被构造,返回时被析构,从而执行构造函数中的初始化。

或者,其实也可以不把初始化放在构造函数中,而是另外定义一个初始化函数,在使用前调用初始化。

代码附上

  • 问题代码
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    class CharSet {
    int situ[128];
    public:
    CharSet(){
    for(int i = 0; i < 128; i++){
    situ[i] = -1;
    }
    }
    int AddInfo(char c, int si){
    int index = (int)c;
    int ret = situ[index];
    situ[index] = si;
    return ret;
    }
    } charset;


    class Solution {
    public:
    int lengthOfLongestSubstring(string s) {
    int slen = s.length();
    int Max_Length = -1;
    int Current_Length = 0;
    int le = 0, ri = 0;
    int sig;
    //线性读取
    for(ri = 0; ri < slen; ri ++){
    sig = charset.AddInfo(s[ri], ri);
    if(sig >= le){
    le = sig + 1;
    }
    Current_Length = ri - le + 1;
    if(Current_Length >= Max_Length){
    Max_Length = Current_Length;
    }
    }
    return Max_Length;
    }
    };
  • 通过代码
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    class CharSet {
    int situ[128];
    public:
    CharSet(){
    for(int i = 0; i < 128; i++){
    situ[i] = -1;
    }
    }
    int AddInfo(char c, int si){
    int index = (int)c;
    int ret = situ[index];
    situ[index] = si;
    return ret;
    }
    };


    class Solution {
    public:
    int lengthOfLongestSubstring(string s) {
    int slen = s.length();
    int Max_Length = -1;
    int Current_Length = 0;
    int le = 0, ri = 0;
    int sig;
    //线性读取
    for(ri = 0; ri < slen; ri ++){
    CharSet charset;
    sig = charset.AddInfo(s[ri], ri);
    if(sig >= le){
    le = sig + 1;
    }
    Current_Length = ri - le + 1;
    if(Current_Length >= Max_Length){
    Max_Length = Current_Length;
    }
    }
    return Max_Length;
    }
    };

铁电器件第一章:铁电材料概论

1.1 晶体结构和铁电性

电极化

三种来源:

  • 电子极化:响应THz~PHz,高于可见光频段
  • 离子极化:响应GHz~THz,微波频段
  • 偶极子转向极化:最多只能响应MHz~GHz频段的电场

因此

  • 折射率与介电常数关系式

    只在THz以上成立

  • 拥有永久性偶极子的铁电材料不能用作微波介电材料:低频率(kHz)下铁电材料的介电常数都非常高,但随外加电场频率增加而显著下降

电位移:

铁电体

电介质的自发极化能被外加电场翻转的材料

自发极化性能:某些晶体的正、负电荷中心,即使在没有外电场的情况下也不一定重合,这种晶体被称为具有自发极化性能。

32种点群,21种无对称中心,20种(除432外)具有压电性

压电:施加压力后,晶体表面产生正负电荷

热释电:温度变化时,晶体的自发极化发生变化,在晶体表面感应出相应的电荷

1.2 自发极化起源

  • 假定电偶极矩是离子A相对于晶格的位移引起
  • 离子位移是由一定温度下晶格的振动产生的
  • 某种特殊的晶格振动可以降低晶体的能量
    • 声学模式振动(仅氧八面体变形,不产生电偶极矩)
    • 光学模式振动(可以产生电偶极矩)
  • 随温度降低,振动模式的频率也会降低,到相变温度下振动频率降为0

理论推导

局部电场

  • $E^{loc}$:局部电场
  • $E_0$:外加电场
  • $\vec p_i$:偶极矩
  • $\gamma$ :洛伦兹因子,对各向同性的立方体系$\gamma = 1$
  • $\bf P$:极化强度

局部电场是离子移动的驱动力

若A离子的离子极化率为$\alpha$,晶胞中偶极矩

偶极矩能量

单位体积的偶极子数目为N,总能量

离子位移的弹性能

$k’>0$为高阶力常数。利用$P=Nqu$改写:

开口向上的二次函数。基于能量最低原理,分类讨论

  • 若二次函数对称轴在负半轴($\frac{k}{2Nq^2}-\frac{N\alpha\gamma^2}{9\varepsilon_0^2}\ge0$),最小值在$P=0$处取得。物理意义上,此时弹性能占据主要支配地位。
  • 反之,最小值在对称轴处($P^2=\left(\frac{2N\alpha\gamma^2}{9\varepsilon_0^2}-\frac{k}{Nq^2}\right)/\left(\frac{k’}{N^3q^4}\right)$)取得

一些结论

  • 钙钛矿型晶体具有更高的洛伦兹因子(=10),自发极化更容易在钙钛矿型晶体中发生

  • 晶体极化率$\alpha$对温度敏感(随温度升高而降低),因而导致相变。考虑一级近似,$\alpha$​与温度线性关系,得到居里-外斯定律(Curie-Weiss law)

例题1.1 计算BTO的自发极化值

buxiangxiele

1.3 场致应变的起源

  • 电致伸缩与逆压电效应的联系与区别
    • 电致伸缩用于一般性描述场致应变,也常用于指代逆压电效应
    • 在固体理论中,逆压电效应被定义为一级机电耦合效应

      应变与外加电场成正比

    • 电致伸缩是二级耦合效应

      应变与电场强度的平方成正比

    • 铁电体的压电性来自于电致伸缩的相互作用,因此以上两种效应具有一定的关联性。且当目标材料为单畴单晶且外加电场时其结构相不发生改变,以上假设才成立。(实际铁电陶瓷中随铁电畴重新取向而产生应变)

220619Weslie都干了些啥

摸鱼的一天

后GPA时代第一天,摸鱼

这一天,Weslie打开了要看的paper,寄出了招生用的物资,在干活与摸鱼划水间游走,感觉不太对劲。

招生物资

昨天(6月18日)Weslie从能科楼A座领到了物资,在大雨降下之前运回了宿舍。今年东西很多,有9件衣服,15本手册,6本台历,感觉比去年翻了一倍。

今天去快递点把东西寄到云鹏家,排了一小会儿队。物资有点重(其实昨天运回来的时候就感受到了),称完发现有10.4kg。在lzc同学建议下求稳寄了快件,花费¥110+,害怕。

看paper

为了准备组会,必须要打开paper了。这次还是继承发扬了一看paper就摸鱼的传统,看了几段就莫名其妙走上的摸鱼的路线,直到突然发现自己摸鱼的悲惨事实(指莫名其妙打开了Poly Bridge,然后因为造桥略烧脑而突然醒悟)。

把一些笔记记在了typora里,结果傍晚蜜汁重启,全部木大(虽然文档里本来就没有什么东西,很快就恢复了

paper的阅读进度在摸鱼中螺旋前进,争取在睡觉之前推到第5页吧(悲)

联系实验

早上给师姐发了微信,师姐没有回(

下午寄完快递后追加了一条,终于收到了回应,辛苦师姐了[捂脸]

明天重新回实验室干活,和师姐聊聊,也和老师聊一聊,包括返校规定啥的。

感觉组会准备进度要提一下了

眼镜

饱受眼镜腿折磨了好几天,今天终于决定去眼镜店问问镜框。

可惜没有找到大小、价格都合适的镜框,改天去万人看看好了。

顺便去书店和超市逛了一下,没有想买的书,买了一些好吃的。

正义摸鱼

做完核酸去篮球场小摸一会儿,时隔2年的第一次投篮(

开局毫无手感,感觉不知道投篮是啥了,虽然本来就没什么水平,但是投篮还是太离谱了一点。

投了几个还是找回了一点手感。开始时候喜欢单手投,拜托,完全没这个能力好吧(虽然上篮还是能放进去几个的)

后面找到双手投篮的手感就好一些了,但是还是有点糟糕,一个三分都没进。

防守也是完全业余的状态(我本来就是完全业余啊~[旺柴]

开心就好 :doge [狗头]