├── .gitignore ├── C++ └── C++FAQ.md ├── FrontEnd ├── css.md ├── dom.md ├── js.md ├── other.md └── web.md ├── Java ├── Hibernate.md ├── Spring.md ├── 垃圾回收.md ├── 基础知识.md ├── 并发编程.md ├── 知识点.md ├── 设计模式.md └── 集合框架.md ├── README.md ├── image ├── BEM.jpg ├── Bellman.png ├── IO复用模型.png ├── SSL五次握手.png ├── TCP.jpg ├── block.jpg ├── collection api.png ├── collection.png ├── concurrent_package.png ├── ctr_1.png ├── ctr_2.png ├── element.jpg ├── ftrl_1.png ├── ftrl_2.png ├── modifier.jpg ├── priority.png ├── thread_status.png ├── vc_1.png ├── vc_2.png ├── vc_3.png ├── 信号驱动IO模型.png ├── 原型链图解.png ├── 原型链图解1.png ├── 原型链图解2.png ├── 外边距合并初衷.png ├── 异步IO模型.png ├── 阻塞式IO模型.png └── 非阻塞式IO模型.png ├── 分布式技术 └── 分布式技术.md ├── 操作系统 ├── 基础知识.md └── 操作系统FAQ.md ├── 数据库 ├── NoSQL.md ├── SQL语句相关.md ├── 基础知识.md ├── 数据库优化与大数据量.md └── 数据库索引相关.md ├── 数据结构与算法 ├── 1.LRU算法(缓存淘汰算法).md ├── 2.排序算法.md ├── C++实现 │ ├── Ant_Algorithm.c │ ├── Binary_Indexed_Tree.cpp │ ├── Binary_Search.cpp │ ├── GCD.cpp │ ├── LIS.cpp │ ├── Matrix_Fast_Power.cpp │ ├── Minimum_Spanning_Tree │ │ ├── Kruskal.cpp │ │ └── Prim.cpp │ ├── README.md │ ├── Segment_Tree.cpp │ ├── Shortest_Path │ │ ├── Dijkstra.cpp │ │ └── Floyd.cpp │ ├── Sort_Approaches │ │ ├── Bubble_Sort.c │ │ ├── Insert_Sort.c │ │ ├── Merge_Sort.c │ │ ├── Quick_Sort.c │ │ ├── README.md │ │ ├── Shell_Sort.c │ │ └── Simple_Selection_Sort.c │ └── Union-Find.cpp ├── 剑指offer │ ├── Java │ │ ├── BalancedBinaryTree.java │ │ ├── CommonNode.java │ │ ├── DeleteDuplication.java │ │ ├── FindContinueSequence.java │ │ ├── FindInTwoDimensionalArray01.java │ │ ├── FindSingleCharacter.java │ │ ├── MergeSortReversePair.java │ │ ├── PokerStraight.java │ │ ├── RegexSolution.java │ │ ├── ReplaceSpaceOnString02.java │ │ ├── ReverseTheList03.java │ │ ├── UglyNumber.java │ │ └── run.sh │ └── python │ │ ├── Convert.py │ │ ├── EntryNodeOfLoop.py │ │ ├── Fibonacci.py │ │ ├── FindContinuousSequence.py │ │ ├── FindFirstCommonNode.py │ │ ├── FindGreatestSumOfSubArray.py │ │ ├── FindKthToTail.py │ │ ├── FindNumbersWithSum.py │ │ ├── FindNumsAppearOnce.py │ │ ├── FindPath.py │ │ ├── FirstAppearingOnce.py │ │ ├── FirstNotRepeatingChar.py │ │ ├── GetLeastNumbers.py │ │ ├── GetMedian.py │ │ ├── GetNumberOfK.py │ │ ├── HasSubtree.py │ │ ├── InversePairs.py │ │ ├── IsBalanced_Solution.py │ │ ├── IsContinuous.py │ │ ├── IsPopOrder.py │ │ ├── KthNode.py │ │ ├── LastRemaining_Solution.py │ │ ├── LeftRotateString.py │ │ ├── MaxInWindows.py │ │ ├── Mirror.py │ │ ├── MoreThanHalfNum.py │ │ ├── NumberOf1.py │ │ ├── NumberOf1Between1AndN_Solution.py │ │ ├── Permutation.py │ │ ├── Power.py │ │ ├── PrintMinNumber.py │ │ ├── README.md │ │ ├── ReverseSentence.py │ │ ├── StrToInt.py │ │ ├── TreeDepth.py │ │ ├── UglyNum.py │ │ ├── VerifySquenceOfBST.py │ │ ├── add.py │ │ ├── clone.py │ │ ├── deleteDuplication.py │ │ ├── duplicate.py │ │ ├── getNext.py │ │ ├── hasPath.py │ │ ├── isNumeric.py │ │ ├── isSymmetrical.py │ │ ├── jumpFloor.py │ │ ├── jumpFloorII.py │ │ ├── match.py │ │ ├── merge.py │ │ ├── minNumberInRotateArray.py │ │ ├── min_stack.py │ │ ├── movingCount.py │ │ ├── multiply.py │ │ ├── print.py │ │ ├── print2.py │ │ ├── printFromToptoBottom.py │ │ ├── printListFromTailToHead.py │ │ ├── printMatrix.py │ │ ├── queue.py │ │ ├── reConstructBinaryTree.py │ │ ├── reOrderArray.py │ │ ├── rectCover.py │ │ ├── replaceSpace.py │ │ ├── reverseList.py │ │ ├── serialize.py │ │ ├── sum_solution.py │ │ └── twodarray.py ├── 图.md ├── 红黑树.md └── 背包问题.md ├── 机器学习 ├── dkl项目相关准备.md ├── img │ ├── approximate.png │ ├── column_block.png │ ├── exact_greedy.png │ ├── goss.png │ ├── greedy_bundle.png │ ├── l2_loss.png │ ├── leaf-wise.png │ ├── level-wise.png │ ├── merge.png │ ├── momentum.png │ ├── momentum_algo.png │ ├── practice.png │ ├── regularization.png │ ├── sparsity.png │ └── theory.png ├── lightGBM.md ├── xgboost.md ├── 优化方法.md ├── 决策树.md ├── 支持向量机.md ├── 机器学习基本知识总结.md ├── 机器学习监督算法.md ├── 特征选择.md ├── 过拟合.md ├── 逻辑回归.md ├── 集成学习.md └── 非监督性算法.md └── 计算机网络 ├── HTTP.md ├── OSI7层模型.md ├── TCP_IP.md ├── 网络编程.md └── 计算机网络FAQ.md /.gitignore: -------------------------------------------------------------------------------- 1 |  2 | FrontEnd/.vscode 3 | 4 | *.class -------------------------------------------------------------------------------- /C++/C++FAQ.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LEAGUE-OF-BME/InterviewFAQ/0db6aed3bd3d101542d2fd8e7c61658eb816ab43/C++/C++FAQ.md -------------------------------------------------------------------------------- /FrontEnd/other.md: -------------------------------------------------------------------------------- 1 | # 关于面试 2 | ## 1 小米面试 3 | ### 1.1 getElementById 实现原理 4 | Q:getElementById 实现的原理? 5 | 6 | `getElementById()` 不是JavaScript语言的功能,而是浏览器作为JavaScript的host环境注册给JavaScript的host函数,由浏览器内部实现。 7 | 8 | 以 Chrome 为例,底层实现的代码是: 9 | ```cpp 10 | Element* TreeScope::getElementById(const AtomicString& elementId) const 11 | { 12 | if (elementId.isEmpty()) 13 | return 0; 14 | if (!m_elementsById) 15 | return 0; 16 | return m_elementsById->getElementById(elementId, this); 17 | } 18 | ``` 19 | 所以底层原理是利用了哈希表记录 ID 到 dom 节点的映射关系,每当有一个新的 ID 添加到 dom 节点,相应的映射关系就会被加到这个哈希表里。 20 | 21 | **延伸:其他获取 DOM 节点的方法比较** 22 | 23 | `getElementsByClassName()` 和 `getElementsByTagName()` 遍历 DOM 树(具体如何遍历不了解),返回 Array-Like Object `HTMLCollection`,而且是 live reference。 24 | 25 | The methods getElementsByClassName and getElementsByTagName return an HTMLCollection object that acts like an array. That collection is "live", which means the collection is updated if additional elements with tag name or class name are added to the document. 26 | 27 | `querySelectorAll()` 返回 Array-Like Object `NodeList`,不过是静态的。 28 | 29 | The method querySelectorAll() returns a NodeList, which also acts like an array. That list is "static", which means that the list won't update even if new matching elements are added to the page. 30 | ### 1.2 AJAX 相关 31 | Q:AJAX 产生背景,在 AJAX 出现之前一般是怎么做的? 32 | 33 | 在应用 AJAX 之前,传统的 web 应用在不需要进行大量内容更新时也要刷新整个页面。AJAX(***Asynchronous JavaScript And XML***)的出现使得我们可以1. 在页面加载好了之后更新部分内容;2. 在页面加载好了之后向服务器请求数据或者发送数据,优化了用户体验。 34 | 35 | AJAX 技术的核心是 `XMLHttpRequest`对象,XHR 为 web 应用和服务器通信提供了接口。具体的对象属性和方法以及通信的实现细节可以复习 `js.md` 中的`如何实现 AJAX 请求`。 36 | 37 | 在 AJAX 出现之前,采用的一些 hack 手段:(复习`web.md`中的`跨域方法`) 38 | 1. `