途游笔试

来源:互联网 发布:老虎机源码 编辑:程序博客网 时间:2024/05/16 18:57
int a[10]占用空间
如果是TC2.0,int占2字节,那int a[10]就是10*2=20字节;
如果其他编译器,int占4字节,那么int a[10]就是10*4=40字节;

为了安全你需要用到这个的话可以用10*sizeof(int).这样比较安全。
func(char *str)
{
printf(” %d”,sizeof(str));
printf(” %d”,strlen(str));
}
main()
{
char a[]=”123456789″;
printf(” %d”,sizeof(a));
printf(” %d”,strlen(a));
func(a);
}
10,9,4,9   strlen是判断数组的大小,指针的所占的字节为4
sizeof返回的值表示的含义如下:
    数组——编译时分配的数组空间大小;
    指针——存储该指针所用的空间大小(存储该指针的地址的长度,是长整型,应该为4);
    类型——该类型所占的空间大小;
    对象——对象的实际占用空间大小;
    函数——函数的返回类型所占的空间大小。函数的返回类型不能是void
线程与进程的区别

1.定义

进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位.

线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源.


2.关系

一个线程可以创建和撤销另一个线程;同一个进程中的多个线程之间可以并发执行.

相对进程而言,线程是一个更加接近于执行体的概念,它可以与同进程中的其他线程共享数据,但拥有自己的栈空间,拥有独立的执行序列。


3.区别

进程和线程的主要差别在于它们是不同的操作系统资源管理方式。进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些。但对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程。

1) 简而言之,一个程序至少有一个进程,一个进程至少有一个线程.

2) 线程的划分尺度小于进程,使得多线程程序的并发性高。

3) 另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。

4) 线程在执行过程中与进程还是有区别的。每个独立的线程一个程序运行的入口顺序执行序列程序的出口但是线程不能够独立执行必须依存在应用程序中,由应用程序提供多个线程执行控制。

5) 从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但操作系统没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配。这就是进程和线程的重要区别。

4.优缺点

线程和进程在使用上各有优缺点:线程执行开销小,但不利于资源的管理和保护;而进程正相反。同时,线程适合于在SMP机器上运行,而进程则可以跨机器迁移。

在浏览器中输入网址后都发生了什么

1.浏览器发起DNS查询请求

浏览器会根据本地客户端DNS服务器配置(下图为DNS服务器配置),向DNS服务器获取域名对应的IP地址。

2.域名服务器向客户端返回查询结果域名,从而完成域名到IP地址的转换。

3.客户端向web服务器发送HTTP请求

在得到了域名对应的IP地址后,客户端便可以向真正的web服务器发生HTTP请求了。

4.发送响应数据给客户端

Web服务器通常通过监听80端口,来获取客户端的HTTP请求。与客户端建立好TCP连接后,web服务器开始接受客户端发来的数据,并通过HTTP解码,从接受到的网络数据中解析出请求的url信息以前其他诸如Accept-Encoding、Accept-Language等信息。
5.设计模式的理解
设计模式是基于面向对象的语言,尤其是继承,并且用多态的方式来保证程序增加功能,不用修改原代码。(面向过程不知道能不能实现)
1,简单工厂模式,解决的是客户端通过大量的判断来选择相应的对象,需要进行封装的问题。特点是判断的条件需要统一,比如字符串,或者一个特定的值。使用的结果就是判断由工厂方法来做。并且可以通过继承和多态,使得相同的语句返回一系列拥有共同父类的对象
2,策略模式,解决的是客户端选择方法的封装方法(与之相比的是简单工厂模式封装的是对象),其实把简单工厂模式稍作修改,就是策略模式了。可以认为是用简单工厂模式返回了一系列有共同父类或者同一接口的对象,然后调用对象的接口或者虚方法。这样客户端代码只是通过工厂生成了一个对象,然后调用对象的方法,并通过多态来实现不同的程序功能
3,装饰模式,解决的问题是,现在有一个对象,我们想给他增加方法或者属性,怎么去做,并且可以随意修改增加方法和属性的顺序。其实我首先想到的是c#的扩展方法。感觉和扩展方法的目的差不多。
c给定矩阵的长度级数n,返回一个回旋排列的数字矩阵
升降排序,右边为降序,左边为升序,上边为升序,下边为降序
  1. public class Demo08_two {  
  2.     public static void show(int[][] m) {  
  3.         for (int[] x : m) {  
  4.             for (int y : x) {  
  5.                 System.out.print(y + "\t");  
  6.             }  
  7.             System.out.println("");  
  8.         }  
  9.     }  
  10.     public static void helix(int n, int b, int[][] a) {  
  11.         int i;  
  12.         int j;  
  13.         int k;  
  14.         for (i = 0; i < n / 2; i++) {  
  15.             for (j = i; j < n - i; j++)  
  16.                 /* 四个循环按不同的方向进行 */  
  17.                 a[i][j] = ++b;  
  18.             for (k = i + 1, j--; k < n - i; k++)  
  19.                 a[k][j] = ++b;  
  20.             for (j = --k, j--; j >= i; j--)  
  21.                 a[k][j] = ++b;  
  22.             for (k--; k > i; k--)  
  23.                 a[k][i] = ++b;  
  24.         }  
  25.         if (n % 2 != 0/* 如果是单数的话,要加上最大的那个数放在中间 */  
  26.             a[i][i] = ++b;  
  27.     }  
  28.     public static void main(String[] args) {  
  29.         Scanner scan = new Scanner(System.in);  
  30.         int i, j, k, n, b = 0;  
  31.         System.out.print("输入一个整数:");  
  32.         n = scan.nextInt();  
  33.         int[][] a = new int[n][n];  
  34.         helix(n, b, a);  
  35.         show(a);  
  36.     }  
  37. }  
有两个特别大的手机文件,问如何找出连个文件中公用的电话号码