zoukankan      html  css  js  c++  java
  • 面试题

    进程与线程的区别,进程如何同步?如何避免死锁?

    1.写出判断ABCD四个表达式的是否正确, 若正确, 写出经过表达式中 a的值(3分)

    int a = 4;

    (A)a += (a++); (B) a += (++a) ;(C) (a++) += a;(D) (++a) += (a++);

    a = ?

    答:C错误,左侧不是一个有效变量,不能赋值,可改为(++a) += a;

    改后答案依次为9,10,10,11

    2.某32位系统下, C++程序,请计算sizeof 的值(5分).

    char str[] = “www.ibegroup.com”

    char *p = str ;

    int n = 10;

    请计算

    sizeof (str ) = ?(1)

    sizeof ( p ) = ?(2)

    sizeof ( n ) = ?(3)

    void Foo ( char str[100]){

    请计算

    sizeof( str ) = ?(4)

    }

    void *p = malloc( 100 );

    请计算

    sizeof ( p ) = ?(5)

    答:(1)17 (2)4 (3) 4 (4)4 (5)4

    写出string类的构造函数,拷贝构造函数,析构函数,赋值函数。

    #include<iostream>
    using namespace std;

    class String
    {
    public:
           String(const char *str=NULL);
           String(const String &other);
           ~String(void);
           String &operator =(const String &other);
    private:
           char *m_data;
    };

    String::String(const char *str)
    {
        cout<<"构造函数被调用了"<<endl;
        if(str==NULL)//避免出现野指针,如String b;如果没有这句话,就会出现野
                      //指针
       {
            m_data=new char[1];
            *m_data='\0';
        }
        else
        {
          int length=strlen(str);
          m_data=new char[length+1];
          strcpy(m_data,str);
        }
    }
    String::~String(void)
    {
        delete m_data;
        cout<<"析构函数被调用了"<<endl;
    }

    String::String(const String &other)
    {
     cout<<"赋值构造函被调用了"<<endl;
     int length=strlen(other.m_data);
     m_data=new char[length+1];
     strcpy(m_data,other.m_data);
    }
    String &String::operator=(const String &other)
    {
          cout<<"赋值函数被调用了"<<endl;
          if(this==&other)//自己拷贝自己就不用拷贝了
                     return *this;
          delete m_data;//删除被赋值对象中指针变量指向的前一个内存空间,避免
                        //内存泄漏
          int length=strlen(other.m_data);//计算长度
          m_data=new char[length+1];//申请空间
          strcpy(m_data,other.m_data);//拷贝
          return *this;
    }
    void main()
    {
          String b;//调用构造函数
          String a("Hello");//调用构造函数
          String c("World");//调用构造函数
          String d=a;//调用赋值构造函数,因为是在d对象建立的过程中用a来初始化
          d=c;//调用重载后的赋值函数
    }


    1. 写一个函数实现字符串反转

    版本1 - while版
    void strRev(char *s)
    {
        char temp, *end = s + strlen(s) - 1;
        while( end > s)
        {
            temp = *s;
            *s = *end;
            *end = temp;
            --end;
            ++s;
        }
    }

    用链表实现通用堆栈

    #include <assert.h>
    #include <stdlib.h>

    typedef struct Stack//定义结构体
    {
     int num;
     struct Stack *next;
    }Stack;
    /*尾节点:链表堆栈中最后一个入栈的节点*/
    static Stack *stack;//指向尾节点的指针

    int isempty()//判断是否链式堆栈是否为空
    {
     return stack == NULL;
    }
    int isfull()//该情况不存在
    {
     return 0;
    }
    void push(Stack *newStack)//结构体入栈,加入链表尾节点
    {
     Stack *temp = (Stack *)malloc(sizeof(Stack));
     assert( !isfull() );//链表堆栈是否满
     assert( temp != NULL );//新节点空间分配是否失败
     temp->num = newStack->num;//新节点初始化
     temp->next = stack;//新节点指向旧的尾节点
     stack = temp;//链表堆栈指针指向尾节点
    }
    void pop()//删除尾节点
    {
     Stack *temp;
     assert( !isempty() );//链表堆栈是否空
     temp = stack;//保存旧的尾节点
     stack = temp->next;//链表堆栈指针指向次尾节点
     free(temp);//释放旧的尾节点。注意:一定要释放,否则容易引起内存泄露
    }
    Stack f_top()//返回尾节点,但并不删除
    {
     assert( !isempty() );//链表堆栈是否为空
     return *stack;//返回尾节点,但并不删除
    }
    void del_stack()//删除整个链表堆栈,释放内存空间

     while( !isempty() )
      pop();
    }


  • 相关阅读:
    MYSQL5.7.11安装问题
    Controllerizing the ScrollViewer Thumbnail
    WPF Tutorial
    How to properly release Excel COM objects
    How to detect and avoid memory and resources leaks in .NET applications
    [Forward]Ten Caching Mistakes that Break your App
    Process.StandardOutput
    .NET Framework posters with Namespaces & Types
    【转】常用 Microsoft .NET Framework 各版本下載網址列表
    6 ways to import data into SQL Server
  • 原文地址:https://www.cnblogs.com/zzxap/p/2175653.html
Copyright © 2011-2022 走看看