美文网首页
面试题目

面试题目

作者: jaydenZou1228 | 来源:发表于2019-06-19 19:14 被阅读0次
    1. 请撸一个二叉树
    package main
    
    import "fmt"
    
    func main() {
      fmt.Println("Hello World")
    }
    
    // 实现下面这个翻转二叉树的函数
    // 要达到的效果是这样
    // 翻转之前:
    //        1
    //      /  \
    //     /     \
    //    2       3
    //   / \     / \
    //  4   5   6   7
    // 翻转之后:
    //        1
    //      /  \
    //     /     \
    //    3       2
    //   / \     / \
    //  7   6   5   4
    // 给定的二叉树不一定是满的
    
    type TreeNode struct {
      Value interface{}
      Left *TreeNode
      Right *TreeNode
    }
    
    func InvertBinaryTree(root *TreeNode) {
      // write your code here
    }
    
    1. 下面是一个计算 Fibonacci 数列 数列第 N 项的函数,
      请简述它的时间复杂度,并用你熟悉的语言写出一个优化的版本,简述优化前后的原理和优化的复杂度(所有编程题目请确保你的代码能正常运行并输出结果,下同)
    function fibonacci(n) {
        if (n === 0 || n === 1) {
            return n;
        } else {
            return fibonacci(n - 1) + fibonacci(n - 2);
        }
    }
    
    class Fibonacci {
        public static int fibonacci(int n) {
            if (n == 0 || n == 1) {
                return n;
            } else {
                return fibonacci(n - 1) + fibonacci(n - 2);
            }
        }
    }
    

    3.用你熟悉的语言写一个程序,找出数组中差值为 k 的 数共有几对

    示例:

    差值 k=4,数组是 [7, 6, 23,19,10,11, 9, 3, 15]
    结果是 (7,11) (7,3) (6,10) (19,23) (15,19) (15,11) 共6对

    function countPairsWithDifference(arr, k) {
        // 实现
    }
    
    countPairsWithDifference([7, 6, 23,19,10,11, 9, 3, 15], 4)
    // 返回 6
    
    class Main {
        public static int countPairsWithDifference(int[] arr, int k) {
            // 实现
        }
    
        public static void main (String[] args) throws java.lang.Exception {
            int[] arr = {7, 6, 23,19,10,11, 9, 3, 15};
            // 返回 6
            countPairsWithDifference(arr, 4);
         }
    }
    

    4.HTTP GET 和 POST 方法有什么区别?谈谈你对 RESTful 的理解

    5.- 请写出一个 git 命令,撤销前一个提交

    • 请问 fork 一个 git 仓库后,如何跟上游同步

    • 如果代码分支像下面这样:

                           A---B---C topic
                          /
                   D---E---F---G master
      

      请画出git rebase master topic 命令后的结果

    • 你用过 git rebase -i 参数吗?使用git rebase -i后哪一个命令可以达到squash的效果

    6.假设货币有 1,5,10 三种面额,写一个函数,输出所有总和为 N 的货币的组合;

    例如,额度是 12,有如下几种方案:

    • (1, 1, 10)
    • (1, 1, 5, 5)
    • (1, 1, 1, 1, 1, 1, 1, 5)
    • 12 个 1
    1. 假设一个场景,比如淘宝,用户加入购物车行为记录是用什么方式保存,尝试不同的方式,阐述各自方案的利弊

    2. 以下代码有什么问题,说明原因。

    type student struct {
        Name string
        Age  int
    }
    
    func pase_student() {
        m := make(map[string]*student)
        stus := []student{
            {Name: "zhou", Age: 24},
            {Name: "li", Age: 23},
            {Name: "wang", Age: 22},
        }
        for _, stu := range stus {
            m[stu.Name] = &stu
        }
    
    }
    

    考点:foreach
    解答:
    这样的写法初学者经常会遇到的,很危险! 与Java的foreach一样,都是使用副本的方式。所以m[stu.Name]=&stu实际上一致指向同一个指针, 最终该指针的值为遍历的最后一个struct的值拷贝。 就像想修改切片元素的属性:

    func main() {
        runtime.GOMAXPROCS(1)
        wg := sync.WaitGroup{}
        wg.Add(20)
        for i := 0; i < 10; i++ {
            go func() {
                fmt.Println("A: ", i)
                wg.Done()
            }()
        }
        for i := 0; i < 10; i++ {
            go func(i int) {
                fmt.Println("B: ", i)
                wg.Done()
            }(i)
        }
        wg.Wait()
    }
    

    考点:go执行的随机性和闭包
    解答:
    谁也不知道执行后打印的顺序是什么样的,所以只能说是随机数字。 但是A:均为输出10,B:从0~9输出(顺序不定)。 第一个go func中i是外部for的一个变量,地址不变化。遍历完成后,最终i=10。 故go func执行时,i的值始终是10。

    第二个go func中i是函数参数,与外部for中的i完全是两个变量。 尾部(i)将发生值拷贝,go func内部指向值拷贝地址。

    1. 主协程如何等其余协程完再操作
    2. map如何实现顺序读取
    3. 实现消息队列(多生产者,多消费者)(基于slice加锁可以实现)
    4. 数据库如何建索引,讲述建立索引的策略
    5. 死锁条件,如何避免
    6. 讲解一下单点登录的思路、方案
      17, cookie 和 session 区别和应用
    7. 会计算算法的复杂度吗?哪些常见的算法是稳定的
    8. golang 踩过哪些坑?在其他语言是否有同样的缺陷,做一个对比
    9. 了解redis吗,讲解一下你们是如何应用的
    10. 了解rpc和grpc吗?稍微讲解一下应用的业务场景和解决的问题
    11. 为什么选择golang?除了beego还使用过其他框架吗?差别在哪里
    12. 有一个场景,网站会统计每日用户的活跃度做一个累计的评分,每天凌晨
      12:00 系统会清楚所有当天活跃数据。如何保证前端用户看到的是正确的
      显示而不会是昨天的数据(考虑用户量庞大,后台清除数据需要消耗一定
      的时间)
    13. 熟悉linux的运维吗?常用的网络状态、内存、CPU、进程相关的指令
    14. 如何部署服务系统的,如何构建到发布
    15. 阐述一下常用的数据库,有什么优化的策略
    16. 用channel实现一个定时器
    17. 退出channel时如何保证chan消费完
    18. channel 缓冲和无缓冲的区别
    19. golang标准库的sync包了解吗?都提供了些什么功能
    20. 用go语言实现堆和栈,讲述一下思路即可
    21. golang能否实现 继承、重载、多态功能,讲解一下interface
    22. 关于设计模式,观察者模式、生产消费者模式,有思考过使用的场景吗

    相关文章

      网友评论

          本文标题:面试题目

          本文链接:https://www.haomeiwen.com/subject/dwllqctx.html