Gillian's Blog

coding for happiness


  • Home

  • About

  • Tags

  • Categories

  • Archives

  • Search

Basic Knowledge

Posted on 2020-09-30
Words count in article: 2.7k | Reading time ≈ 9

数据结构与算法

数据结构是工具, 算法是通过合适的工具解决特定问题的方法.

数据结构的存储方式

数据结构的存储方式只有两种: 数组(顺序存储)与链表(链式存储)

数据结构 定义 数组 链表
队列/栈 需要扩容 更多空间存储指针
图 多对多 邻接矩阵 邻接表
散列表 通过散列函数将键映射到一个大数组里
需要解决散列冲突
线性探查法 拉链法
树 一对多 堆, 完全二叉树,不需要节点指针 不一定是完全二叉树, 衍生出各种巧妙的设计
eg. 二叉搜索树/AVL树/红黑树/区间树/B树等, 应对不同的问题.

数据结构的基本操作

遍历(找) + 访问(改) (具体点: 增删改查)

两种形式: 线性(for/while循环) & 非线性(递归)

Read more »

Binary Tree

Posted on 2020-09-27
Words count in article: 655 | Reading time ≈ 2
二叉树相关题解
Read more »

Array

Posted on 2020-09-21
Words count in article: 2k | Reading time ≈ 9
数组相关题解
Read more »

Sort

Posted on 2020-09-17
Words count in article: 2k | Reading time ≈ 8
排序算法总结
Read more »

Linked-list

Posted on 2020-09-11
Words count in article: 7k | Reading time ≈ 32
链表相关题解
Read more »

JavaScript Notes

Posted on 2020-09-01
Words count in article: 24.1k | Reading time ≈ 105

JavaScript 简介

诞生

本名 ECMAScript, 被创建的原因是, 在浏览器输入数据时需要进行验证, 而不是传到服务器才告知客户数据错误或者空白等, 于是被创建时诞生在 NetScape 浏览器中.

特点

只能在浏览器中运行, 不能单独运行, 不能读取文件

由浏览器中的执行模块(JS引擎)执行, 考虑到页面打开的速度, 不编译执行.

功能

操作HTML的DOM

浏览器从服务器取到HTML页面之后, 会展示页面出来, 但是浏览器内部将HTML组织成一个树给JS, 这个树称为 DOM.

JS可以定位并操作DOM中的任意一个节点, 且不用刷新页面, 操作就可以立刻显示出效果. 而且操作是内部进行, 并没有改变 html的源码.

控制浏览器

打开窗口/在一个窗口内前进后退/获得浏览器名称+版本(判断是什么浏览器, 才能做这个浏览器支持的特殊操作)…

异步调用

不能像java一样访问网络, 就不能调用服务器的接口去获取数据. 用户只能get或者post向服务器发送请求, 服务器返回整个页面, 而不是一个片段, 整个页面得重新刷新.

XMLHttpRequest 使得 JS 可以直接向服务器发起接口调用, 等获得服务器返回的数据(此时为XML)后执行浏览器提供的回调函数. Called 异步调用. 回调函数基本就是更新DOM树的某个节点, 实现网页的局部刷新. 后来上述的异步调用被称为 AJAX (Asynchronous JavaScript And XML).

由于XML的标签太多, 真正数据很少, 而且需要XML解析器进行解析, 后来 JS 和服务器之间的数据传输使用 JSON 这种更简洁的格式.

HTML 结构, CSS 展示, JS(AJAX JSON) 逻辑 = 前端. 可以在浏览器实现 MVC.

后来出现了多种框架, ExtJS/prototype/JQuery/AngularJS将前端推向另一个高峰.

JS 移动到服务器端

需要满足下述两个要求:

  1. 引擎移动到服务器端, 需要执行地足够快. Chrome V8

  2. 绕开 JAVA 服务器的问题, 即线程遇到IO/数据库/网络这样的耗时操作, 不能等待, 换成异步处理.

即后来出现的 node.js, 巨大优势就是: 前后端均使用JS开发.

Node.js 工作特点

只用一个线程来处理所有请求, 事件驱动编程.

需要等待的操作, 会有一个回调函数在那, 线程不会等待. 操作一完成则发出事件通知线程, 线程立马回来执行对应的回调函数, 执行完回调函数再去接着执行那些不需要等待的操作.

即: 需要等待的操作先跳过, 先去执行那些不需要等待的操作, 耗时操作完成后事件通知线程后, 线程再立即回来执行其对应的回调函数. 事件驱动编程, 有需要处理的事件才去处理, 耗时操作先跳过.

Read more »

Backtracking

Posted on 2020-08-18 | In Algorithm
Words count in article: 3.8k | Reading time ≈ 17
回溯相关题解
Read more »

String

Posted on 2020-08-17 | In Algorithm
Words count in article: 2.2k | Reading time ≈ 10
字符串相关题解
Read more »

Dynamic-Programming

Posted on 2020-08-04
Words count in article: 3.4k | Reading time ≈ 15
动态规划相关题解
Read more »

Binary Search

Posted on 2020-08-03 | In Algorithm
Words count in article: 2.6k | Reading time ≈ 13
二分查找相关题解
Read more »
12>
Gillian

Gillian

Life is like a roller coaster, live it, be happy, enjoy life.

13 posts
1 categories
7 tags
GitHub
© 2022 Gillian | Site words total count: 54.6k
0%