项目经历
- 个人网站
后端使用了 Flask 框架,数据库使用的是 Python 自带的 sqlite
前端使用 Vue.js + BootStrape4
首页类似 RSS, 集合了 readhub 和 36kr 的新闻资讯
另外,用户登录后可以在博客页发表和修改文章
Java
-
基本数据类型
// 整数byte 1short 2int 4long 4// 浮点数float 4double 8// 逻辑boolean 1// 字符char 2, Unicode
- 栈和堆
基本数据类型的变量, 在栈里面, 复制变量的时候, 复制的是值
引用类型的变量, 在堆, 变量只是引用, 类似于指针,只能指向特定对象,不能乱指, 复制变量的时候,复制的是引用
引用类型: 类, 接口, 数组
- Override, 覆盖/重写, 返回值和形参都不能改变
- Overload, 重载
-
抽象类跟接口的区别
抽象类, 是声明, 抽象类不能instantiate(实例化), 也就是不能制造对象。抽象方法只声明, 不实现。具体的实现由继承它的子类来实现。
public abstract class Shape{ // 抽象的方法, 注意没有大括号, ()后面直接分号结尾 // 有abstract方法的类必须是abstract public abstract void draw();}
接口, 让其他类能够有接口的方法
public interface Cell{ // 不需要显示写abstract void draw(Graphics g, int x, int y, int size);}public class Fox extends Animal implements Cell{ @Override public void draw(...){ // ... } public void run() { }}
抽象类可以有非抽象的方法(具体实现), 接口是纯抽象类, 只有抽象方法
一个子类只能存在一个父类,但是可以存在多个接口。
-
MVC 开发模型
数据模型、表现、控制, 三者分离M, Model, 模型, 保存和维护数据, 还可以 通知 View 进行界面的更新.V, View, 表现, 从 Model 获得数据, 并以此画出表现(界面).View 是被动的, 只有在 Model 通知 View 之后, View才会去Model取数据, 并画出来.C, Control, 控制, 得到用户输入, 以此调整数据. C 和 V 并不直接交互.C只能更新Model中的数据, 也就是说, 用户在界面上所作的操作, 不会直接修改界面上的显示.而是先去修改后台的数据, 再由Model通知View, 再整体重画.
- 多线程
创建线程的方式, 继承 Thread 类, 实现 Runnable 接口
start(), run(), stop(), destroy()
新建 --- 就绪 --- 运行 --- 阻塞 --- 运行 --- 终止
-
错误和异常
try{}catch(ArrayIndexOutOfBoundsException e){}ArrayIndexOutOfBoundsExceptionOpenFileExceptionAllocateMemoryExceptionLoadFileExceptionOutOfMemoryError
-
垃圾回收机制
)
某个对象在未来的程序运行中, 将不会被访问, 就可以回收它的内存
分类
引用计数收集器, 当有其他数据与其相关时则加一, 反之相关解除时减一, 最后计数为 0 的对象可以回收跟踪收集器, 定期对若干根储存对象开始遍历, 对与其相关的对象进行标记, 最后, 没有被标记的对象就可以回收
C++
前端
-
选择器
// 按ID查找document.getElementById('xxx');// 按tagname查找document.getElementsByTagName('xxx');// classnamedocument.getElementsByClassName('xxx');
-
正则表达式
`\d` 数字`\w` 字母或数字`.` 至少 1 个任意字符`*` 至少 0 个任意字符`\d{3}` 匹配 3 个字符`[0-9a-zA-Z\_]` 匹配一个数字, 字母或者下划线var re1 = /^\d{11}$/;re1.test('12345678'); // false
-
AJAX, Asynchronous JavaScript and XML, 意思就是用JavaScript执行异步网络请求
AJAX请求是异步执行的, 也就是说, 要通过回调函数获得响应
function success(text) { var textarea = document.getElementById('test-response-text'); textarea.value = text;}function fail(code) { var textarea = document.getElementById('test-response-text'); textarea.value = 'Error code: ' + code;}var request = new XMLHttpRequest(); // 新建XMLHttpRequest对象request.onreadystatechange = function () { // 状态发生变化时,函数被回调 if (request.readyState === 4) { // 成功完成 // 判断响应结果: if (request.status === 200) { // 成功,通过responseText拿到响应的文本: return success(request.responseText); } else { // 失败,根据响应码判断失败原因: return fail(request.status); } } else { // HTTP请求还在继续... }}// 发送请求:request.open('GET', '/api/categories');request.send();
数据结构
-
排序
- 复杂度
- 稳定性
- 实现代码
- Fib
数据库
-
数据库事务(Transaction)的 ACID 特性
原子性(Atomicity), 一致性(Consistency), 隔离型(Isolation), 持久性(Durability)
- 原子性(A)是指事务中的操作不可拆分,只允许全部执行或者全部不执行
- 一致性(C)指事务的执行不能破坏数据库的一致性,一致性也称为完整性。一个事务在执行后,数据库必须从一个一致性状态转变为另一个一致性状态
- 隔离性(I)指并发的事务相互隔离,不能互相干扰
- 持久性(D)指事务一旦提交,对数据的状态变更应该被永久保存
-
数据库事务隔离级别有4个
# 由低到高依次为Read uncommitted, 读到了未提交的事物, 只是 add 还没有 commitRead committed, 读到了上一次的commit, 也就是说还没有更新 最新的commitRepeatable read, 保证读取最新的 commit, 为此, 读取的时候不允许提交Serializable, 要求有很高的实时同步性# 这四个级别可以逐个解决脏读 、不可重复读 、幻读 这几类问题
- 锁(并发控制的手段)
- 关系数据模型的三个组成部分
数据结构, 对数据的操作, 完整性约束
- 参考链接
SQL
- CRUD
Create, Read, Update, and Delete
-
过程
1.首先连接到数据库 conn = sqlite.connect('test.db')2.建立游标 cursor cursor = conn.cursor()3.建立表 create table user (id int, name varchar(20), score int )4.insert into 插入数据,注意占位符是 ? insert into user (id, name) values(1, "Alice", 88) insert into user (id, name) values(2, "Bob", 89) insert into user (id, name) values(3, "Cindy", 88)5.select * from user where 查找数据 select * from user where id between 1 and 3 order by score asc6.cursor.close()7.conn.commit()8.conn.close()
-
column, 列, 字段
select * from userselect col1, col2 from user
-
下面以这个表格
customers
为例, 展示 SQL 的语法id name age city postalcode country 1 Alfreds 25 Berlin 12209 Germany 2 Ana 15 Mexico 05021 Mexico 3 Antonio 20 Mexico 05023 Mexico 4 Thomas 30 London WA11DP UK 5 Berglunds 35 Lulea S-958-22 Sweden -
where 条件选择
select * from customers where country='Germany' and city='Berlin'
-
order by 排序
select * from customers order by country
-
插入
insert into customers (name, age, city, postalcode, country) values ('Bart', 10, 'LA', '4006', 'USA')
-
更新
update customers set name = 'Smith', city = 'Paris' where id = 5
-
删除
delete from customers where name = 'Berglunds'
-
limit/top 不返回全部结果, 只返回有限数量的记录
# SQLselect top 3 from customers# MySQLselect * from customers limit 3
-
最大最小值
select min(age) from customers
-
统计 count, distinct
# 统计有多少个不同的国家select count(distinct country) from customers
-
平均值
select avg(age) from customers
-
求和
select sum(age) from customers
-
通配符
# SQLselect * from customers where name like 'B%'# sqliteselect * from customers where name like 'B*'
-
选择范围
# 离散select * from customers where country in ('Germany', 'France')# 连续select * from customers where age between 10 and 20
-
连接表格
inner join, (A ∩ B)left join, (A ∩ B) U Aright join, (A ∩ B) U Bfull outer join, (A U B)