校招面试

[TOC]

1. 操作系统

1.1 进程-线程

进程:所有的应用程序都需要进入内存中执行。点击应用程序,程序进入内存,进入内存的程序叫进程。

线程:线程属于进程,是进程中的一个执行单元,负责程的执行。是通往cpu的通道。效率高,多个线程之间互不影响。

  1. 进程只是一个容器


    image.png
  2. 计算机真实的运行是 一条条线程


    image.png

程序是完成某个特定功能的一系列程序语句的集合,只要不被破坏,他就永远存在。程序是一个静态的概念,而进程是一个动态的概念,它由创建而产生,完成任务后应撤销而消亡;进程是系统进行资源分配和调度的独立单位,而程序不是。

  1. 进程的状态
进程的状态

1.1.1 同步与互斥

同步 互斥
直接制约关系 间接制约关系
两个人相约去什么地方;速度有差异,一定情况下等待 千军万马过独木桥

1.1.2 线程调度

  • 分时调度
    所有线程轮流使用CPU的使用权,平均分配每个线程占用CPU的时间。
  • 抢占式调度
    优先让优先级高的线程使用CPU,如果线程的优先级相同,呢么就会随机选择一个来执行(线程随机性),java为抢占式调度。

1.1.3 死锁

image.png

1.2 存储

image.png

1.2.1 页式存储组织

image.png

1.2.2 段式存储组织

段式存储:按用户作业中的自然段来划分逻辑空间,然后调入内存a 存,段的长度可以不一样


image.png

1.2.3 段页式存储组织

image.png

1.5 寻址

寻址空间

  • 32位→4G
  • 64位→264→1019Bytes
  • 64位JVM→可以使用更大的内存,但是需要重新编译

1.6 列题

image.png

2. 网络基础

image.png

image.png

2.1 网络传输

  • 丢包,重复包
  • 出错
  • 乱序不安全
    • 中间人攻击
    • 窃取
    • 篡改

2.2 滑动窗口协议

image.png

image.png

2.3 三次握手,四次挥手

image.png
image.png

2.4 列题

image.png

3. 数据库

image.png
image.png

image.png

image.png

4. 程序设计语言基础

4.1 语言的分类

1. 类型检查
·  编译时:C,C++,Java,Go…
·  运行时:Python,Perl,JavaScript,Ruby…

比如说:java中 int a 那么a就永远是一个int ,Python中 a 一开始可以是int 后来可能是String 所以只有他们只有在运行的时候才能知道是什么类型

4.2 运行/编译

· 编译为机器代码运行:C,C++,….
好处是编译快
· 编译为中间代码,在虚拟机运行:Java,C#,….
为什么在虚拟机中运行呢,因为为提高跨平台的能力
· 解释执行:Python,Perl,javaScript,….

有时候说java即使编译型也是解释型语言
因为java不将代码编译成 .class字节码文件就无法运行,所以是编译型语言。
但是java编译后不能直接运行,必须在JVM中才能解释运行,所以是解释型语言。

4.3 编程范式

· 面向过程: C, Visual, Basic,…. 现在已经不怎么使用了
· 面向对象:Java,C#,C++,Scala,…. 现在的主流,大型商业使用的系统还是面向对象比较容易胜任。
· 函数式:Haskell,Erlang,…. 具体的场合有比较容易的使用

4.4 数据类型

1. boolean,byte,char 
    java中char是两个字节,都是使用的Unicode
    C中的char是一个字节
2. short,int,long,float,double
    java中int是32位,long是64位的
3. String,Enum,Array
    他们是Object派生下来的,像String可以+ 在C++中可以自定义+号,但是在java中不可以
4. Object

32位int的范围 -231~232-1
浮点数

image.png

浮点数比较          
    a==b   是不可以的           
    Math.abs(a-b)<eps?          
    使用BigDecimal算钱          
    
    
Primitive type vs object 
原始类型VS对象类型

    Primitive type: int,long,float….
        值类型 
        用 a==b 判断相等
    Object : Integer,Long,Float,String…. 
        引用类型
        用a==b判断是否为同一个Object
        用a.equals(b)    java7出现了Object.equals(a,b) 解决了a为null的情况

4.5 列题

image.png

5. 编码技巧

数学归纳法
用于证明断言对所以自然数成立
1. 证明对于N=1成立
2. 证明N>1时:如果对于N-1成立,那么对N成立
3.

5.1 递归

递归的书写方法:        
    ○ 严格定义递归函数的作用,包括参数,返回值,Side-effect(全局状态)        
    ○ 先一般,后特殊        
    ○ 每次调用必须缩小问题规模      
    ○ 每次问题规模缩小程度必须为1      

5.1.1 将list转换为链表

image.png

5.1.2 链表反转

image.png

5.1.3 列出所有组合

image.png

5.2 循环控制

  • 定义循环不变式,斌仔循环体每次结束后保持循环不变式
  • 先一般,后特殊
  • 每次必须向前推进循环不变式中涉及的变量值
  • 每次推进的规模必须为1

5.2.1 链表反转

image.png

5.2.2 删除链表

image.png

5.2.3 二分查找

image.png

6. 数据结构

6.1 列表

数组:查询快,插入和删除慢
链表:删除快,查询慢
队列,栈

6.2 树

二叉查找树,左子树一定比节点小,右节点一定比节点大
二叉树
搜索树
堆/优先队列

6.2.1 二叉树的遍历

二叉树的遍历:
• 前序遍历
• 中序遍历
• 后序遍历
• 层次遍历

image.png

前序遍历:ABDEGCF
中序遍历:DBGEACF
后序遍历:DGEBCFA
层次遍历:ABCDEFG

6.2.1 树对象结构

public class Tree {
    private final char value;
    private Tree left;
    private Tree right;

    public Tree(char value) {
        this.value = value;
        this.left = null;
        this.right = null;
    }

    public char getValue() {
        return value;
    }

    public Tree getLeft() {
        return left;
    }

    public void setLeft(Tree left) {
        this.left = left;
    }

    public Tree getRight() {
        return right;
    }

    public void setRight(Tree right) {
        this.right = right;
    }
}

6.2.2 初始化树

 public Tree create(){
        Tree tree = new Tree('A');
        tree.setRight(new Tree('C'));
        tree.getRight().setRight(new Tree('F'));

        tree.setLeft(new Tree('B'));
        tree.getLeft().setLeft(new Tree('D'));
        tree.getLeft().setRight(new Tree('E'));
        tree.getLeft().getRight().setLeft(new Tree('G'));

        return tree;
    }

6.2.3 test

 @Test
    public void test(){
        System.out.println("abcde".charAt(0));
        System.out.println("abcde".substring(0, 2));
        //ab
        System.out.println("abcde".indexOf('c'));
        //2
    }

6.2.4 遍历树

public class TreeShow {
    //先序遍历 Foreword
    public void foreword(Tree tree){
        if (tree==null){
            return;
        }
        System.out.print(tree.getValue());
        foreword(tree.getLeft());
        foreword(tree.getRight());
    }

    //中序遍历Medium
    public void medium(Tree tree){
        if (tree==null){
            return;
        }
        medium(tree.getLeft());
        System.out.print(tree.getValue());
        medium(tree.getRight());
    }

    //后序遍历Post
    public void post(Tree tree){
        if (tree==null){
            return;
        }
        post(tree.getLeft());
        post(tree.getRight());
        System.out.print(tree.getValue());
    }


    public static void main(String[] args){
        //初始化树
        Tree tree = new TreeCreate().create();

        TreeShow treeShow = new TreeShow();
        //先序遍历
        System.out.println("先序遍历");
        treeShow.foreword(tree);
        System.out.println();

        //中序遍历
        System.out.println("中序遍历");
        treeShow.medium(tree);
        System.out.println();

        //后序遍历
        System.out.println("后序遍历");
        treeShow.post(tree);
        System.out.println();

        //求后序遍历
        System.out.println("=============================");
        tree = new TreeCreate().getPost("ABDEGCF","DBGEACF");
        treeShow.post(tree);
        System.out.println();

        //求后序遍历
        System.out.println("=============================");
        String str = new TreeCreate().getPostString("ABDEGCF","DBGEACF");
        System.out.println(str);
        System.out.println();
    }
}

6.2.5 已知前序,中序求后序(生成树)

/**
     * 已知 前序遍历  中序遍历 求 后序遍历  方法一
     * 前序遍历:A BDEG CF
     * 中序遍历:DBGE A CF
     * 后序遍历:DGEBCFA
     * @Author chendpeng
     * @Description //TODO
     * @Date 17:01
     * @Param [foreword, medium]
     * @return com.looc.demo4.Tree
     **/
    public Tree getPost(String foreword,String medium){
        if (foreword.isEmpty()){
            return null;
        }
        //得到根节点
        char rootNode = (char) foreword.charAt(0);
        Tree tree = new Tree(rootNode);

        //拿到a的root节点的位置
        int rootIndex = medium.indexOf(rootNode);
        //左节点
        tree.setLeft(
                getPost(
                        foreword.substring(1,rootIndex+1),
                        medium.substring(0,rootIndex)));
        //右节点
        tree.setRight(
                getPost(
                        foreword.substring(rootIndex+1),
                        medium.substring(rootIndex+1)));
        return tree;
    }

6.2.6 已知前序,中序求后序(不生成树)


   /* * 前序遍历:A BDEG CF
     * 中序遍历:DBGE A CF
     * 后序遍历:DGEBCFA*/
    public String getPostString(String foreword, String medium){
        if (foreword.isEmpty()){
            return "";
        }
        //拿到根节点
        char rootChar = foreword.charAt(0);
        //拿到在中序遍历中的位置
        int rootIndex = medium.indexOf(rootChar);

        //左边
        String leftForeword = foreword.substring(1,rootIndex+1);
        String rightForeword = foreword.substring(rootIndex+1);

        //右边
        String leftMedium = medium.substring(0,rootIndex);
        String rightMedium = medium.substring(rootIndex+1);

        return getPostString(leftForeword,leftMedium)+
                getPostString(rightForeword,rightMedium)+
                rootChar;

    }

6.3 栈,队列,优先队列

• pusb(1);push(3);push(2);pop();pop();pop();
栈:2;3;1;
队列:1;3;2;
优先队列:1;2;3

• Map<K,V>/Set<K>
HashMap/HashSet →基于 k.hashCode()
TreeMap/TreeMap→基于 k implements Comparable

6.4 图

无向图
有向图
有向无环图

图的算法
深度优先遍历
广度优先遍历
拓扑排序
最短路径、最小生成树

6.4 列题

image.png

7. 算法复杂度

image.png

image.png

8. 面向对象

详细面向对象

image.png

image.png

image.png

image.png

image.png
image.png

9. 设计模式

image.png

image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,270评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,489评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,630评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,906评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,928评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,718评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,442评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,345评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,802评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,984评论 3 337
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,117评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,810评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,462评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,011评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,139评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,377评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,060评论 2 355