zoukankan      html  css  js  c++  java
  • 杂七杂八的面试概念

    1,c语言中内存分配与释放的函数,并指出他们的区别。

    c语言中标准的内存分配函数:malloc,calloc,realloc,free

    malloc 调用形式为:(类型*)malloc(size):在内存的存储区中调用一块长度为size字节的连续区域,并返回首地址。

    calloc调用形式为:(类型*)calloc(n,size):在内存的存储区中分配n块长度为size字节的连续区域,返回首地址。

    realloc调用形式为:(类型*)realloc(*ptr,size): 将ptr内存大小增大到size。

    malloc与calloc的另一个主要区别是后者在返回指向内存的指针之前把它初始化为0,而malloc并没有以任何方式进行初始化。

    另外c++中 new / delete 函数是内存分配和释放函数。

    2,写出socket 函数,并指出其功能。

     socket()  建立socket通信描述符。

      bind() 将套接字和机器一定的端口关联。

      connect() 连接远程主机。

      listen()  使套接字做好连接准备,规定等待服务请求队列的长度

      accept() 接受连接,一旦有客户端发出连接,accept返回客户地址信息和一个新的socket

      send() 和 recv() 用于流式套接字或者数据套接字的通讯

      sendto()  和 recvfrom()  用于无连接的数据报套接字。

      close() 关闭套接字

      shutdown()  选择性的关闭套接字,可以只允许某一个方向通讯关闭

      getpeername() 返回流式套接字时对端 peer信息

      gethostname()  返回程序所运行的机器的主机名字

      gethostbyname()  返回 本机ip

    3,  Session缓存和Cache缓存

    转自: http://www.cnblogs.com/zhangzt/archive/2013/02/17/2914195.html

    Session和Cache的区别

    以前实现数据的缓存有很多种方法,有客户端的Cookie,有服务器端的Session和Application。其中Cookie是保存在客户端的一组数据,主要用来保存用户名等个人信息。Session则保存对话信息。Application则是保存在整个应用程序范围内的信息,相当于全局变量。通常使用最频繁的是Session,那么Session和Cache又有什么区别呢?

    (1)最大的区别是Cache提供缓存依赖来更新数据,而Session只能依靠定义的缓存时间来判断缓存数据是否有效。

    (2)即使应用程序终止,只要Cache.Add方法中定义的缓存时间未过期,下次开启应用程序时,缓存的数据依然存在。而Session缓存只是存在于一次会话中,会话结束后,数据也就失效了。

    (3)Session容易丢失,导致数据的不确定性,而Cache不会出现这种情况。

    (4)由于Session是每次会话就被加载,所以不适宜存放大量信息,否则会导致服务器的性能降低。而Cache则主要用来保存大容量信息,如数据库中的多个表。

    (5)VS2005的测试版提供了将缓存保存在硬盘上的参数,但正式版中取消了这个功能,估计其在以后版本中会重新实现。而Session目前只能保存在内存中,对其性能有影响。

    4, session 的配置和存储方方式

    转自:http://www.cnblogs.com/zhangkai2237/archive/2012/03/22/2410890.html

    Session又称为会话状态,是Web系统中最常用的状态,用于维护和当前浏览器实例相关的一些信息。我们控制用户去权限中经常用到Session来存储用户状态,这篇文章会讲下Session的存储方式、在web.config中如何配置Session、Session的生命周期等内容。

         Session的存储方式。

      session其实分为客户端Session和服务器端Session。

      当用户首次与Web服务器建立连接的时候,服务器会给用户分发一个 SessionID作为标识。SessionID是一个由24个字符组成的随机字符串。用户每次提交页面,浏览器都会把这个SessionID包含在 HTTP头中提交给Web服务器,这样Web服务器就能区分当前请求页面的是哪一个客户端。这个SessionID就是保存在客户端的,属于客户端Session。

      其实客户端Session默认是以cookie的形式来存储的,所以当用户禁用了cookie的话,服务器端就得不到SessionID。这时我们可以使用url的方式来存储客户端Session。也就是将SessionID直接写在了url中,当然这种方法不常用。

      我们大多数提到的Session都是指服务器端Session。他有三种存储方式(自定义存储在这里不做讨论):

      1.1保存在IIS进程中:

      保存在IIS进程中是指把Session数据保存在IIS的运行的进程中,也就是inetinfo.exe这个进程中,这也是默认的Session的存方式,也是最常用的。

      这种方式的优点是简单,性能最高。但是当重启IIS服务器时Session丢失。

      1.2.保存在StateServer上

      这种存储模式是指将Session数据存储在一个称为Asp.Net状态服务进程中,该进程独立于Asp.Net辅助进程或IIS应用程序池的单独进程,使用此模式可以确保在重新启动Web应用程序时保留会话状态,并使会话状态可以用于网络中的多个Web服务器。 

      1.3.保存在SQL Server数据库中

      可以配置把Session数据存储到SQL Server数据库中,为了进行这样的配置,程序员首先需要准备SQL Server数据服务器,然后在运行.NET自带安装工具安装状态数据库。

      这种方式在服务器挂掉重启后都还在,因为他存储在内存和磁盘中。

      下面是这三种方式的比较:

     

    InProc

    StateServer

    SQLServer

    存储物理位置

    IIS进程(内存)

    Windows服务进程(内存)

    SQLServer数据库(磁盘)

    存储类型限制

    无限制

    可以序列化的类型

    可以序列化的类型

    存储大小限制

    无限制

    使用范围

    当前请求上下文,对于每个用户独立

    生命周期

    第一次访问网站的时候创建Session超时后销毁

    优点

    性能比较高

    Session不依赖Web服务器,不容易丢失

    缺点

    容易丢失

    序列化与反序列化消耗CPU资源

    序列化与反序列化消耗CPU资源,从磁盘读取Session比较慢

    使用原则

    不要存放大量数据

     

     

     gets函数存在的问题,由于gets函数 是从stdin中读到end-of-file或换行符时将停止读取,并且丢掉换行符,在最后添加null 。没有检测buffer的大小,出现内存越界的安全性问题。

  • 相关阅读:
    java客户端集成RocketMq
    java8常见流式操作
    Spring源码架构以及编译
    Rocket消息存储原理
    由二叉树中序和先序遍历求二叉树的结构
    10.14重写ENqUEUE和DEQUEUE,使之能处理队列的下溢和上溢。
    10.12 说明如何用一个数组A[1..n]来实现两个栈,使得两个栈中的元素总数不到n时,两者都不会发生上溢,注意PUSH和POP操作的时间应为O(1)。
    用类模板实现对任何类型的数据进行堆栈进行存取操作。
    java struts2+urlrewrite 配置404错误
    c++ sizeof 及别名定义2种示例
  • 原文地址:https://www.cnblogs.com/newpanderking/p/3780988.html
Copyright © 2011-2022 走看看