软件、硬件 - 编程开发技术导航
官方导航:
Java C#.NET Android Go Swift Node.js
面向对象编程 - OOP
概念:
C语言结构体成员不支持函数,且属于值传递,虽然可以用指针模拟,但内存分配比较繁琐,故C++和Java则专门增加了引用类型的Class和Object。
Java、C#异同:
相同:
两者的class和namespace(java为package)、record均用法一致。
顶级语句 - 均支持不使用 Main 方法的程序。
C#和Java 22均支持下划线标识的“弃元”参数。
不同:
C# 中任何*.cs文件存在 global using System; 即整个项目均无需再 using 引用了。
C# using (var t = File.OpenText("x.txt")){ } 等同 Java try(...){ }。
C# 字符串插值 Console.WriteLine($"{name} is {age} year{(age == 1 ? "" : "s")} old.");
数据库 - SQL
死记:x != 'x' 不会比对null值,只能用 is null 或 IFNULL(x,'') != 'x' 方式来处理。
技术方案
IM聊天:
消息DTO结构 - 纯文本、HTML代码(标签白名单)、纯文本混合自定义标记、文本和图片等解析为多个块状标记
编程语法
模块、类、实例化:
Java
模块化
module-info.java
类 - class C { void m(){ } } // 实例化:new C();
for/foreach
for(var element:arr) { System.out.println(element); }
JavsScript
模块化
export const name = "square";
export function f() { }
export class c { }
ES6 Class类
对象__proto__.constructor属性返回对创建此对象的函数的引用。
class C1 {
a = null; // 可选?
constructor(name) { this.name = name; }
show() { console.log("x"); } // 注意 - 方法名前不能写function关键词
static sum(a, b) { console.log(a+b); } // 静态调用 C1.sum(1, 2);
}; new C1("构造函数").show();
上方class语法糖构造器等同function自动生成的__proto__.constructor:
function C1(name) { this.name = name; }
C1.prototype.show = function () {
console.log("xx");
}; let c1 = new C1("构造函数");
for/foreach
forEach((element) => { /* … */ })
forEach((element, index) => { /* … */ })
for (x in person) { console.log(person[x]); }
字符串:
反转/翻转:
Java - new StringBuilder("example").reverse().toString(); // elpmaxe
C# - "example".Reverse();
JavaScript - [..."example"].reverse().join("");
其他
- docker比podman多一个开机重启参数“--restart=always”,后者需要systemd额外处理。
- [首选]docker.io是Debian以apt的方式管理依赖;docker-ce则是docker官方用go。