• 问题总结


    1、快速排序的算法复杂度怎么计算:

      在最优的情况下,partition每次都划分的很均匀,如果排序n个关键字,其递归树的深度就为log2n+1,每次将数组一分为二,可以有下面的不等式:

      T(n) <= 2T(n/2) + n ;

      T(n) <= 2(2T(n/4) + n/2) + n = 4T(n/4) + 2n;

      T(n) <= 4(2T(n/8) + n/4) + 2n = 8T(n/8) + 3n;

      ......

      T(n) <= nT(1) + log2n * n = O(nlogn);

      在最差的情况下,就类似于冒泡排序了复杂度为O(n*n);

      就空间复杂度来说,主要是递归造成的栈空间的使用,最好情况,递归树的深度为log2n,其空间复杂度也就为O(logn),最坏情况,需要进行n‐1递归调用,其空间复杂度为O(n),平均情况,空间复杂度也为O(logn)。

      可惜的是,由于关键字的比较和交换是跳跃进行的,因此,快速排序是一种不稳定的排序方法。

      参考:http://book.51cto.com/art/201108/287089.htm

    2、浮点数精度丢失?

      http://justjavac.iteye.com/blog/1724438

    3、怎么样保证线程安全?

      线程安全就是多线程访问时,采用了加锁机制,当一个线程访问该类的某个数据时,进行保护,其他线程不能进行访问直到该线程读取完,其他线程才可使用。不会出现数据不一致或者数据污染。线程不安全就是不提供数据访问保护,有可能出现多个线程先后更改数据造成所得到的数据是脏数据。

      互斥操作:对共享资源的访问,要对互斥量进行加锁,如果互斥量已经上锁,调用线程会阻塞,直到互斥量被解锁。在完成了对共享资源的访问后,要对互斥量进行解锁。

      死锁:死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。

      线程同步:即当有一个线程在对内存进行操作时,其他线程都不可以对这个内存地址进行操作,直到该线程完成操作, 其他线程才能对该内存地址进行操作,而其他线程又处于等待状态,目前实现线程同步的方法有很多,临界区对象就是其中一种。

    4、模板特化?

      c++中的模板特化不同于模版的实例化,模版参数在某种特定类型下的具体实现称为模版的特化。模版特化有时也称为模版的具体化,分别有函数模板特化和类模版特化。

      模板实例化:一个通过使用具体值替换模版参数,从模版产生的普通类,函数或者成员函数的过程。指函数模板(类模板)生成模板函数(模板类)的过程。

      特化:就是上述过程最终获得实体。、

      普通函数重载和使用模板特化还是有不同之处,主要表现在如下两个方面:
      (1)如果使用普通重载函数,那么不管是否发生实际的函数调用,都会在目标文件中生成该函数的二进制代码。而如果使用模板的特化版本,除非发生函数调用,否则不会在目标文件中包含特化模板函数的二进制代码。这符合函数模板的“惰性实例化”准则。
      (2)如果使用普通重载函数,那么在分离编译模式下,应该在各个源文件中包含重载函数的申明,否则在某些原文件中就会使用模板实例化,而不是重载函数。
      
    5、内存泄漏?
      SomeClass *foo=new SomeClass(...);
      foo=nullptr;
      内存泄漏怎么解决,可以使用智能指针;在这里,比起直接使用new,应该优先使用能够std::make_unique和std::make_shared;
      智能指针是存储指向动态分配(堆)对象指针的类。除了能够在适当的时间自动删除指向的对象外,他们的工作机制很像C++的内置指针。智能指针在面对异常的时候格外有用,因为他们能够确保正确的销毁动态分配的对象。他们也可以用于跟踪被多用户共享的动态分配对象。
      事实上,智能指针能够做的还有很多事情,例如处理线程安全,提供写时复制,确保协议,并且提供远程交互服务。有能够为这些ESP (Extremely Smart Pointers)创建一般智能指针的方法,但是并没有涵盖进来。
         http://www.jb51.net/article/56004.htm
     内存泄漏与检测:http://www.cnblogs.com/skynet/archive/2011/02/20/1959162.html


    6、分页相关:
      http://www.cnblogs.com/vinozly/p/5589032.html
      https://www.douban.com/group/topic/19646863/?cid=234011002

      缺页中断:就是要访问的页不在主存,需要操作系统将其调入主存后再进行访问。在这个时候,被内存映射的文件实际上成了一个分页交换文件。

      是指计算机在执行程序的过程中,当出现异常情况或特殊请求时,计算机停止现行程序的运行,转向对这些异常情况或特殊请求的处理,处理结束后再返回现行程序的间断处,继续执行原程序。
  • 相关阅读:
    setInterval和setTimeOut方法—— 定时刷新
    json
    开发者必备的火狐插件
    C#泛型类和集合类的方法
    jQuery几种常用方法
    SQL语句优化技术分析
    索引的优点和缺点
    Repeater使用技巧
    jQuery 表格插件
    利用WebRequest来实现模拟浏览器通过Post方式向服务器提交数据
  • 原文地址:https://www.cnblogs.com/jhmu0613/p/7553892.html
Copyright © 2020-2023  润新知