zoukankan      html  css  js  c++  java
  • 2013百度研发笔试

    一、简答题

    1. 动态链接库和静态链接库的优缺点

    2. 轮询任务调度和可抢占式调度有什么区别?

    3. 列出数据库中常用的锁及其应用场景

     

    二、算法设计题

    1. 给定N是一个正整数,求比N大的最小“不重复数”,这里的不重复是指没有两个相等的相邻位,如1102中的11是相等的两个相邻位故不是不重复数,而12301是不重复数。

    2. 设N是一个大整数,求长度为N的字符串的最长回文子串。

    3. 坐标轴上从左到右依次的点为a[0]、a[1]、a[2]……a[n-1],设一根木棒的长度为L,求L最多能覆盖坐标轴的几个点?

     

    三、系统设计题

    1. 在现代系统的设计过程中,为了减轻请求的压力,通常采用缓存技术,为了进一步提升缓存的命中率,同常采用分布是缓存方案。调度模块针对不同内容的用户请求分配给不同的缓存服务器向用户提供服务。请给出一个分布式缓存方案,满足如下要求:

    1) 单台缓存服务器故障,整个分布式缓存集群,可以继续提供服务。

    2)通过一定得分配策略,可以保证充分利用每个缓存服务的存储空间,及负载均衡。当部分服务器故障或系统扩容时,改分配策略可以保证较小的缓存文件重分配开销。

    3)当不同缓存服务器的存储空间存在差异时,分配策略可以满足比例分配

    下面给出我自己的一些解答,不保证100%正确,欢迎批评指正。

     

    一、简答题

    1. 动态链接库和静态链接库的优缺点

    动态链接库:是在程序运行时被使用的函数库,在linux中以.so为后缀,windows中以.dll为后缀。

    优点:多次调用时只需要内存中加载一次,节省了内存空间和页面交换。

            由于在运行时调用,减小了最终可执行文件的大小。

            可以在不编译连接的情况下,只要输出接口不变(名称,参数,返回类型和调用约定)更改动态库实现程序的修改。

    适用于大规模的开发,使开发过程独立,耦合度小,便于不同开发者之间合作及测试。

    缺点:应用程序不是自完备的,如果找不到动态链接库,程序会报错;

            速度比静态链接慢;

            当某模块更新后,若与旧模块不兼容,那么需要改模块的程序统统出错。

    静态链接库:程序在编译时添加到代码中,linux中以.a为后缀,windows中以.lib为后缀。

    优点:代码装载速度快,执行速度比动态链接库较快;

       只要有静态链接库,就可以执行,不存在版本问题,不会引发dll地狱问题。

    缺点:文件体积较大,多处包含重复代码,造成浪费。

    2. 轮询任务调度和可抢占式调度有什么区别

    轮询任务调度:是指按照请求的顺序将请求从1到N分配到服务器上。只有当请求挂起时,才会使服务器被其他请求占用。

    抢占式调度:按照请求的优先级别对请求进行先后分配。优先级别越高,越早分配。但是实现过程较复杂,级别较低的请求可能一直到不到分配。

     

    3. 列出数据库中常用的锁及其应用场景

        (1)共享锁:(S锁),粒度为行或元组,当事务获取共享锁后,可以对锁定的内容执行读操作。

        (2)排他锁:(X锁),粒度为行或元组,当事务获取排他锁,对锁定的内容可执行写操作。

          T1获取了一个元组的共享锁,其他事务也可以获取该元组的共享锁,但不能获取排他锁。

          T2获取了一个元组的排他锁,其他事务不可以获取该元组的共享锁和排他锁。

        (3)更新锁:避免了两个事务共享锁同时转换为排他锁的过程中形成的死锁。一次只有一个事务可以获得对象的更新锁。当事务要修改对象时,更新锁改为排他锁。当事务只读取对象时,更新锁改为共享锁。

        (4)意向锁:包含意向共享锁,意向排它锁和共享意向排它锁。如果对一个结点加意向锁,说明该结点的下层结点正在被加锁;对任意结点加锁时,必须先对它的上层结点加意向锁。这样事务对表加锁时,不需要检查每行记录的锁标志位,系统效率大大提高。释放锁时则应按自下而上的次序进行。具有意向锁的多粒度封锁方法提高了系统的并发度,减少了加锁和解锁的开销。

      意向共享锁(IS锁):如果对一个数据对象加IS锁,表示它的后裔结点拟加S锁。例如,事务T1要对R1中某个元组加S锁,则要先对关系R1和数据库加IS锁。

      意向排它锁(IX锁):如果对一个数据对象加IX锁,表示它的后裔结点拟加X锁。例如,事务T1要对R1中某个元组加X锁,则要先对关系R1和数据库加IX锁。

      共享意向排它锁(SIX锁):如果对一个数据对象加SIX锁,表示对它加S锁,再加IX锁,即SIX=S+IX。例如,对某个表加SIX锁,则表示该事务要读取整个表(所以要对该表加S锁),同时会更新个别元组(所以要对该表加IX锁)。

     

    二、算法设计题

    1.n为正整数,求比这个数大且最小的不重复数,重复数为相邻两位数字相同,如1101为重复数,1231为不重复数。

    未完待续

  • 相关阅读:
    抓包工具 Fiddler 使用介绍
    HTTP 协议常见首部字段
    HTTP 协议服务器相关概念
    HTTP 协议常见的状态码
    HTTP 协议中 GET 和 POST 方法详解
    设置html title标题左侧的小图标
    HTML页面如何判断是手机访问还是电脑访问
    使用Java的Frame类编写的QQ登录界面
    swing中JTable的使用方法
    采用MVC模式JDBC演示案例
  • 原文地址:https://www.cnblogs.com/lzh-cnblogs/p/3539615.html
Copyright © 2011-2022 走看看