Go: Frameworks
GORM (Go Object-Relational Mapping)
Why:
减少手写 SQL:用 Go 方法代替 SQL,降低出错概率。
跨数据库兼容:同一套代码可适配 MySQL、SQLite 等。
自动迁移(AutoMigrate):自动同步 Go 结构体和数据库表结构。
What:
GORM 是 Go 语言中最流行的 ORM(对象关系映射)框架,全称 Go ORM。它的作用是将 Go 结构体(struct)和数据库表自动映射,让你能用 面向对象的方式操作数据库,而不用手写 SQL。
Drawbacks:
性能损耗:比直接写 SQL 慢(但大部分场景可接受)。
复杂查询受限:极端优化场景仍需手写 SQL。
学习成本:需要理解 GORM 的约定和特性。
Go: Core Ideas
Polymorphism
Go语言没有类继承!!!
在Go语言中,直接定义一个Task基类(通过结构体嵌入)无法实现多态行为,这是由Go的类型系统和设计哲学决定的。以下是具体原因和对比分析:
Go的“继承”本质是组合,不支持多态
问题代码示例
type Task struct { TaskID int}type MapTask struct { Task // 嵌入基类 FileName string}type ReduceTask struct { Task Files []string}func (t *Task) Run() { /* 基类实现 */ }// Coordinator尝试调用Task.Run()func AssignTask(task Task) { task.Run() // 永远调用Task.Run(),无法调用子类方法}
问题:
即使MapTask和ReduceTask嵌入了Tas ...
Go: Syntax
值类型和引用类型
在Go语言中,数据类型的值/引用语义划分如下:
一、值类型(传递时拷贝整个数据)
基本数据类型:
整型:int, int8, int16, int32, int64
无符号整型:uint, uint8, uint16, uint32, uint64, uintptr
浮点型:float32, float64
布尔型:bool
字符串:string(特殊值类型,不可变)
复数:complex64, complex128
复合类型:
数组:[5]int
结构体:struct{...}
二、引用类型(传递时共享底层数据)
容器类型:
切片:[]int
映射:map[string]int
通道:chan int
函数:func()
指针类型:
指针:*int, *struct{...}
定义Slice的两种方式
两种初始化方式的对比:
方式
示例
内存分配
代码风格
零值初始化
var pieces []Piece
仅声明, ...
Go: 项目组织
Go Module 和 GOPATH有什么区别
Go Module 和 GOPATH 是 Go 语言管理依赖和项目的两种不同机制,主要区别如下:
GOPATH(传统模式)
特点
固定工作区:所有 Go 代码必须放在 $GOPATH/src 目录下。
无版本控制:依赖直接下载到 $GOPATH/src,无法管理多版本。
手动管理:需要手动执行 go get 下载依赖,无法精确锁定版本。
目录结构
$GOPATH/ ├── src/ # 所有项目代码必须放在这里 │ ├── github.com/ # 第三方依赖 │ └── your-project/ # 你的项目(路径需匹配导入路径) ├── pkg/ # 编译后的库文件 └── bin/ # 可执行文件
使用场景
旧版 Go 项目(Go 1.11 之前)。
部分遗留工具链仍依赖 GOPATH。
2. Go Module(现代模式)
特点
• 任意路径: ...
Java
Configuration
在JDK1.5之后的版本,配置Java环境变量的时候我们不再需要配置classpath,只需要配置Java_Home以及path即可!
原配置代码
.;%Java_Home%\bin;%Java_Home%\lib\dt.jar;%Java_Home%\lib\tools.jar
原代码详解
Java_Home代表了我们jdk的路径
dt.jar是关于运行环境的类库,主要是用于swing的包,如果不使用可以不配置。
tools.jar是工具类库,它在编译和运行一个类时被使用
当我们配置classpath后,系统会根据我们所配置的classpath加载类
例如:在我们使用javac命令编译程序时,系统加载tools.jar其实就封装了下面这样一条命令
javac XXX.javajava -Classpath=%JAVA_HOME%\lib\tools.jar xx.xxx.Main XXX.java
当然tools的功能可不止这一点,但是确实它为我们提供了很多便利。
我们不再需要配置classpath了!
在JDK1.5以后,classpath并不 ...
Python: pass by object reference
在 Python 中,“pass by object reference”(也称为“传对象引用”)的意思是:
当你把一个对象作为参数传递给函数时,函数获得的是该对象的引用(指向该对象的指针),而非一个独立的拷贝。
如果这个对象是可变的(例如列表、字典、NumPy 数组等),在函数中直接修改这个对象(例如对列表的就地修改或者使用 x -= 1),外部也会看到这些变化。
但如果在函数内对该参数重新赋值(例如 x = …),这只会改变本地引用的指向,而不会影响外部的变量。
哪些是object reference哪些不是?
Python中的一切都是object,它们都有自己的attribute和method,一切变量都是对object的reference.
在 Python 中,所有变量都实际保存对对象的引用。不过有些对象是可变的(mutable),而有些是不可变的(immutable)。在你的代码中:
x (在全局作用域中)
这个 x 是一个对 NumPy 数组对象的引用。
NumPy 数组是可变的,所以对它的原 ...
Python: Syntax
Python 函数参数 * 和 ** 核心总结
📌 核心作用:处理可变数量的参数,提升函数灵活性。
*args → 收位置参数为元组,用于不确定数量的输入。
**kwargs → 收关键字参数为字典,用于带名称的动态参数。
顺序规则:固定参数 → *args → **kwargs。
解包:* 展开序列,** 展开字典。
✨ 应用场景:
• 动态计算(如 sum(*values))。
• 配置传递(如 build_model(**config))。
• 装饰器、继承等高级用法。
Python Magic Methods (魔法方法)
重写(override)这些带有一对双下划线(如 __iter__、__getitem__、__setitem__、__len__ 等)的方法有以下几个主要作用:
1. 让自定义类支持 Python 内置语法和操作
这些方法被称为“魔法方法”或“特殊方法”,它们让你的类像内置类型(如 list、dict)一样使用。例如:
__iter__ 让对象可以被 for ... in ... 遍历。
__getitem__ 让对 ...
Java Web
有了Cookie为什么还要Session
Cookie 和 Session 虽然都用于解决 HTTP 无状态的问题,但它们的设计目的、安全性和适用场景有本质区别。以下是详细对比和实际应用中的选择逻辑:
一、核心区别
特性
Cookie
Session
存储位置
客户端(浏览器)
服务端(内存/数据库)
安全性
较低(易被篡改或窃取)
较高(敏感信息不暴露给客户端)
数据容量
较小(单个 Cookie ≤4KB)
较大(仅受服务器资源限制)
生命周期
可设置过期时间(包括持久化)
通常随会话结束(浏览器关闭)失效
跨域支持
受同源策略限制
无跨域问题(依赖 Session ID 传递)
二、为什么有了 Cookie 还要 Session?
1. 安全性问题
• Cookie 的缺陷:
◦ 直接存储敏感信息(如用户ID、权限)在客户端,可能被篡改(如通过浏览器工具修改 document.cookie)。
◦ 即使加密(如 JWT),仍需防范 CSRF/XSS 攻击。
• Session 的解决方案:
◦ 仅通过 Cookie 传递无 ...
衣物分类
T恤
夏季T恤的材质选择多样,不同材质直接影响衣物的柔软度、透气性和耐用性。以下是常见T恤材质及其特性对比,帮你理解为何有的软有的硬:
一、常见夏季T恤材质分类
纯棉(100% Cotton)
• 特点:天然透气、吸汗性强,亲肤舒适。
• 软硬度:
◦ 软:精梳棉(更细腻)、丝光棉(光滑柔软)。
◦ 较硬:普通棉未经过处理或磅数较高(如重磅棉T恤)。
棉混纺(Cotton Blends)
• 常见组合:棉+聚酯纤维(Polyester)、棉+氨纶(Spandex)。
• 特点:
◦ 棉+聚酯纤维:抗皱、耐磨,但透气性稍差(手感偏硬挺)。
◦ 棉+氨纶:增加弹性,贴身柔软(如修身款T恤)。
聚酯纤维(Polyester)
• 特点:速干、抗皱,但透气性较差,易闷汗。
• 软硬度:通常较硬(常见于运动T恤),但高端面料可能做柔化处理。
亚麻(Linen)
• 特点:天然透气、吸湿快干,但易皱、手感粗糙。
• 软硬度:偏硬挺,多次洗涤后会变软。
莫代尔(Modal)/莱赛尔(Lyocell)
• 特点:人造纤维素纤维,垂感好、极度柔软(类似丝绸触感)。
• 适 ...
健身
增肌、宽肩
肩膀窄、身材瘦弱的男生想要变壮,需要通过 科学训练+合理饮食+充足恢复 三方面系统改善。以下是具体方案,分为 训练、饮食、生活习惯 三部分:
一、力量训练:重点强化肩背和全身肌肉
目标:增加肩宽(三角肌)、背阔肌(显倒三角)、胸肌和手臂围度,同时提升整体力量。
训练频率:每周3-4次力量训练,每次60分钟左右,大肌群休息48小时后再练。
1. 针对肩部的黄金动作(练宽肩膀)
• 哑铃/杠铃推举(前束+中束)
• 坐姿更稳定,重量循序渐进(每组8-12次,4组)。
• 侧平举(中束主导,显肩宽)
• 小重量慢速控制,避免甩动(15次×4组)。
• 面拉(Face Pull)(后束改善圆肩)
• 用弹力带或绳索器械,强化后束让肩部更立体。
2. 背部和胸肌训练(打造倒三角)
• 引体向上(背阔肌+手臂)
• 做不了可用弹力带辅助或高位下拉替代。
• 杠铃划船(中下背厚度)
• 俯身45度,杠铃贴腿拉向腹部(8-12次×4组)。
• 平板卧推(胸肌+三角肌前束)
• 新手从空杠开始,注意肩胛骨收紧。
3. 下肢和核心(全身协调发展)
• 深蹲 & 硬拉(刺激睾酮分 ...