
面试经验
Chan_Keh
https://github.com/chankeh
展开
-
LeetCode :Valid Palindrome
Given a string, determine if it is a palindrome, considering only alphanumeric characters and ignoring cases.For example, “A man, a plan, a canal: Panama” is a palindrome. “race a car” is not a palin原创 2017-05-04 00:10:50 · 243 阅读 · 0 评论 -
TCP 连接的建立和终止
三路握手 建立一个TCP连接时会发生下述情形。 (1)服务器必须准备好接受外来的连接。这通常通过调用socket、bind和listen这3个函数来完成的,我们称之为被动打开。(2)客户通过调用connect发起主动打开。这导致客户TCP发送一个SYN(同步)分节,它告诉服务器客户将在(待建立的)连接中发送的数据的初始序列号。通常SYN分节不携带数据,其所在IP数据报只含有一个IP首部、一个TC原创 2017-09-09 12:47:05 · 457 阅读 · 0 评论 -
二叉查找树,红黑树,AVL树,B~/B+树(B-tree),伸展树——优缺点及比较
二叉查找树(Binary Search Tree)很显然,二叉查找树的发现完全是因为静态查找结构在动态插入,删除结点所表现出来的无能为力(需要付出极大的代价)。BST 的操作代价分析: (1) 查找代价: 任何一个数据的查找过程都需要从根结点出发,沿某一个路径朝叶子结点前进。因此查找中数据比较次数与树的形态密切相关。 当树中每个结点左右子树高度大致相同时,树高为logN。则原创 2017-08-29 19:01:56 · 733 阅读 · 0 评论 -
线程同步的方式-互斥锁/读写锁
读写锁特点:1)多个读者可以同时进行读 2)写者必须互斥(只允许一个写者写,也不能读者写者同时进行) 3)写者优先于读者(一旦有写者,则后续读者必须等待,唤醒时优先考虑写者)互斥锁特点:一次只能一个线程拥有互斥锁,其他线程只有等待原创 2017-08-23 10:09:56 · 400 阅读 · 0 评论 -
编程之美-链表专题
目录(?)[+]一单链表结点的删除删除单链表p指向的那个元素时间和空间复杂度尽量小二单链表的存取找出单链表的倒数第K个元素仅允许遍历一遍链表找出单链表的中间元素仅允许遍历一遍链表三单链表与环的问题判断单链表是否有环6形状如何找到环的入口如何知道环的长度带环链表的长度是多少四单链表与相交环的问题如何知道两个单链表无环是否相交如果两个单链表无环相交如何知道它们相交的第一个节点是什么如何知道两个单链表可能原创 2017-08-14 23:05:02 · 293 阅读 · 0 评论 -
一个无序自然数序列有N个自然数,快速找到二者之和为M的两个整数并输出
思路:首先对无序自然数数列进行排序(升序),然后定义i和j分别指向数列的两端,所指两数之和分别和M作比较,比M大,则j左移,比M小,则i右移。#include <stdio.h>#include <stdlib.h>//快排void sort(int *a, int left, int right){ if(left >= right) { return ;原创 2017-08-14 20:52:09 · 1143 阅读 · 0 评论 -
C++后端开发面试题
后端开发面试题后端开发面试知识点大纲:语言类(C++):关键字作用解释:volatile作用Volatile关键词的第一个特性:易变性。所谓的易变性,在汇编层面反映出来,就是两条语句,下一条语句不会直接使用上一条语句对应的volatile变量的寄存器内容,而是重新从内存中读取。Volatile关键词的第二个特性:“不可优化”特性。volatile告诉编译器,不要对我这个变量进行各种激进的优化,甚至将原创 2017-08-18 10:35:51 · 1323 阅读 · 2 评论 -
进程与线程的区别与联系
要了解二者的区别与联系,首先得对进程与线程有一个宏观上的了解。进程,是并发执行的程序在执行过程中分配和管理资源的基本单位,是一个动态概念,竟争计算机系统资源的基本单位。每一个进程都有一个自己的地址空间,即进程空间或(虚空间)。进程空间的大小 只与处理机的位数有关,一个 16 位长处理机的进程空间大小为 216 ,而 32 位处理机的进程空间大小为 232 。进程至少有 5 种基本状态,它们是:初始态原创 2017-07-05 09:14:54 · 266 阅读 · 0 评论 -
常见排序算法
1.归并排序#include <iostream>#include <vector>using namespace std;void merge(vector<int>&a,vector<int>&dst,int s,int m,int e){ int i = s,j = m+1,k = s; while(i<=m&&j<=e) { if(a[i]<=a[原创 2017-09-02 00:05:09 · 256 阅读 · 0 评论