转自:https://blog.csdn.net/YinhJiang/article/details/80538426
1 JAVA中关键字final 分别修饰类,方法,变量,各起什么作用?
final修饰类是不能被继承
fianl修饰方法不能在子类中被覆盖
final修饰变量,称为常量,初始化以后不能改变值
2 地址变换机构的基本任务是:
实现从逻辑地址到物理地址的转换。
3 大端模式和小端模式的概念
大端模式(Big_endian):字数据的高字节存储在低地址中,而字数据的低字节存放在高地址中。
小端模式(Little_endian):字数据的高字节存储在高地址中,而字数据的低字节存放在低地址中。
4 C语言问题:内存的分配方式
内存分配方式有三种:
(1)从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。
(2)在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。
(3)从堆上分配,亦称动态内存分配。程序在运行的时候用malloc或new申请任意多少的内存,程序员自己负责在何时用free或delete释放内存。动态内存的生存期由程序员决定,使用非常灵活,但如果在堆上分配了空间,就有责任回收它,否则运行的程序会出现内存泄漏,频繁地分配和释放不同大小的堆空间将会产生堆内碎块。
5 三个连续自然数,
它们的最小公倍数是210,这三个连续自然数是5,6,7
6 linux基本操作命令
linux用grep在文件中查找字符串并显示字符串在文件中的行号?
它能使用正则表达式搜索文本,并把匹配的行打印出来。
Linux grep命令用于查找文件里符合条件的字符串。
grep指令用于查找内容包含指定的范本样式的文件,如果发现某文件的内容符合所指定的范本样式,预设grep指令会把含有范本样式的那一列显示出来。若不指定任何文件名称,或是所给予的文件名为"-",则grep指令会从标准输入设备读取数据。
grep -niR ‘想要查找的字符’ xxx
注:n,显示行号 R,查找所有文件包含子目录 i,忽略大小写 最后的“xxx”表示想要查找的文件名
例:如果你想在当前目录下 查找"hello,world!"字符串,可以这样:grep -rn “hello,world!” ././ : 表示路径为当前目录.-r 是递归查找-n 是显示行号
7 java的源文件的扩展名是(java),编译后的扩展名是(class)
8 安卓四大组件显示页面的是哪个组建:activity
9 -65的补码和反码是多少?
补码运算:正数为原码本身,负数为原码取反加一
127为正数,其补码为原码0111 1111
-127为负数,其补码为原码0111 1111,取反1000 0000,加一,1000 0001。
根据这情况来看,表示-0,不是的,-0的原码是1000 0000补码是0000 0000。+0的补码也是0000 0000
于是就有了规定 1000 0000 定为 -128的补码
反码和补码在线计算:https://www.osgeo.cn/app/s2877
10 网络层包括哪些?
一、TCP/IP网络体系结构中,常见的接口层协议有:
Ethernet 802.3、Token Ring 802.5、X.25、Frame relay、HDLC、PPP ATM等。
1.网络层
网络层包括:IP(Internet Protocol)协议、ICMP(Internet Control Message Protocol) 、控制报文协议、ARP(Address Resolution Protocol)地址转换协议、RARP(Reverse ARP)反向地址转换协议。
2.传输层
传输层协议主要是:传输控制协议TCP(Transmission Control Protocol)和用户数据报协议UDP(User Datagram protocol)。
3.应用层
应用层协议主要包括如下几个:FTP、TELNET、DNS、SMTP、RIP、NFS、HTTP。
二、TCP/IP网络体系结构中,每一种协议的作用有:
TCP/IP协议不依赖于任何特定的计算机硬件或操作系统,提供开放的协议标准,即使不考虑Internet,TCP/IP协议也获得了广泛的支持。所以TCP/IP协议成为一种联合各种硬件和软件的实用系统。
2.TCP/IP协议并不依赖于特定的网络传输硬件,所以TCP/IP协议能够集成各种各样的网络。用户能够使用以太网(Ethernet)、令牌环网(Token Ring Network)、拨号线路(Dial-up line)、X.25网以及所有的网络传输硬件。
3.统一的网络地址分配方案,使得整个TCP/IP设备在网中都具有惟一的地址
4.标准化的高层协议,可以提供多种可靠的用户服务。
11 向一个有N个元素的顺序表中插入一个元素,平均要移动的个数为?
n/2
12 线程同步的四种方式的机制 :
临界区(Critical Section)、互斥量(Mutex)、信号量(Semaphore)、事件(Event)
13 以下对Java关键字描述错误的是()
参考网址:https://baike.so.com/doc/6742334-6956859.html
14 红黑树插入、删除、查找,基数树
红黑树(Red Black Tree) 是一种自平衡二叉查找树,在红黑树上只读操作不需要对用于二叉查找树的操作做出修改,因为它也是二叉查找树。但是,在插入和删除之后,红黑属性可能变得违规。恢复红黑属性需要少量(O(log n))的颜色变更(这在实践中是非常快速的)并且不超过三次树旋转(对于插入是两次)。这允许插入和删除保持为 O(log n) 次,但是它导致了非常复杂的操作。
15 堆排序的最坏时间复杂度为()——选择题
参考网址做了详细的对比:https://www.cnblogs.com/xiaochun126/p/5086037.html
16 Java中volatile含义正确的是()
Volatile修饰的成员变量在每次被线程访问时,都强迫从共享内存中重读该成员变量的值。而且,当成员变量发生变化时,强迫线程将变化值回写到共享内存。这样在任何时刻,两个不同的线程总是看到某个成员变量的同一个值。
volatile是Java提供的一种轻量级的同步机制,在并发编程中,它也扮演着比较重要的角色。同synchronized相比(synchronized通常称为重量级锁),volatile更轻量级,相比使用synchronized所带来的庞大开销,倘若能恰当的合理的使用volatile,自然是美事一桩。
17 基本的计算机知识:
http含义,ftp含义——HTTP是Hyper Text Transfer Protocol,超文本传输协议;FTP是File Transfer Protocol,文件传输协议;HTTP是面向网页的,而FTP是面向文件的。
补充:URL Uniform Resource Locator统一资源定位器,功能是统一的方式指定internet信息资源的位置;
TCP/IP:Transmission Control Protocol/Internet Protocol的简写,中译名为传输控制协议/因特网互联协议,又名网络通讯协议,是Internet最基本的协议、Internet国际互联网络的基础,由网络层的IP协议和传输层的TCP协议组成。TCP/IP 定义了电子设备如何连入因特网,以及数据如何在它们之间传输的标准。协议采用了4层的层级结构,每一层都呼叫它的下一层所提供的协议来完成自己的需求。通俗而言:TCP负责发现传输的问题,一有问题就发出信号,要求重新传输,直到所有数据安全正确地传输到目的地。而IP是给因特网的每一台联网设备规定一个地址。
18 软件测试的一般步骤(4步)
(1)单元测试(也称模块测试):针对软件设计的基本单元——程序模块,进行正确性检验的测试工作。目的在于发现各个模块内部可能存在的各种差错。单元测试需要从程序内部结构出发设计测试用例,多个模块可以平行、独立地进行测试;
(2)集成测试(也称组装测试,联合测试):在单元测试的基础上,将所有模块按设计要求集成在一起进行测试,以检验总体设计中各模块间的接口设计问题、模块之间的相互影响、上层模块存在的各种差错及全局数据结构对系统的影响等方面。
(3)确认测试(也称验收测试,有效性测试):主要检验软件的功能和性能是否与需求说明书中的规定一致。
(4)系统测试:将软件系统作为一个元素,放入整个实际的计算机系统中,与计算机硬件、其他软件、使用人员等系统元素结合在一起,在实际使用环境下进行综合全面的测试。
19 参数重载
函数重载和返回类型无关,参数列表不同即可。
两个名字相同的函数要实现重载,至少要在参数个数或者参数类型上有所不同。
20 在ARM集成开发环境中:
1)只读的代码段和常量被称作RO段,是程序中的指令和常量;
2)可读写的全局变量和静态变量称为RW段,是程序中已初始化变量;
3)RW段中要被初始化为0的变量称为ZI段,是程序中未初始化变量。
只有只读的指令和常量可以共享。
21 线程共享的进程环境包括:
进程代码段
进程的公有资源(如全局变量,利用这些共享的数据,线程很容易的实现相互之间的通信)
进程打开的文件描述符
消息队列
信号的处理器
进程的当前目录
进程用户ID
进程组ID
22 线程独占资源:
线程ID
寄存器组的值
用户栈、内核栈(在一个进程的线程共享堆区(heap))
错误返回码
线程的信号屏蔽码
线程的优先级
一个进程中的所有线程共享该进程的地址空间,但它们有各自独立的(/私有的)栈(stack),堆(heap)的分配与栈有所不同,一般是一个进程有一个C运行时堆,这个堆为本进程中所有线程共享,windows进程还有所谓进程默认堆,用户也可以创建自己的堆。
用操作系统术语,线程切换的时候实际上切换的是一个可以称之为线程控制块的结构(TCB?),里面保存所有将来用于恢复线程环境必须的信息,包括所有必须保存的寄存器集,线程的状态等。
堆: 是大家共有的空间,分全局堆和局部堆。全局堆就是所有没有分配的空间,局部堆就是用户分配的空间。堆在操作系统对进程初始化的时候分配,运行过程中也可以向系统要额外的堆,但是记得用完了要还给操作系统,要不然就是内存泄漏。
栈:是个线程独有的,保存其运行状态和局部自动变量的。栈在线程开始的时候初始化,每个线程的栈互相独立,因此,栈是 thread safe的。操作系统在切换线程的时候会自动的切换栈,就是切换 SS/ESP寄存器。栈空间不需要在高级语言里面显式的分配和释放。
23 请问linux系统发送信号的系统调用是:kill
系统调用signal是进程用来设定某个信号的处理方法,系统调用kill是用来发送信号给指定进程的。
这 两个调用可以形成信号的基本操作。
后两个调用pause和alarm是通过信号实现的进程暂停和定时器,调用alarm是通过信号通知进程定时器到时。
24 定点二进制运算器中,减法运算一般通过( )来实现:补码运算的二进制加法器
25 操作系统在控制和管理进程过程中,涉及到( PCB )这一重要数据结构,这是进程存在的唯一标志。
每个进程在内核中都有一个进程控制块(PCB)来维护进程相关的信息,Linux内核的进程控制块是task_struct结构体。
/usr/src/linux-headers-3.16.0-30/include/linux/sched.h文件中可以查看struct task_struct 结构体定义。其内部成员有很多,重点:
进程id。系统中每个进程有唯一的id,在C语言中用pid_t类型表- 示,其实就是一个非负整数。
进程的状态,有就绪、运行、挂起、停止等状态。
进程切换时需要保存和恢复的一些CPU寄存器。
描述虚拟地址空间的信息。
描述控制终端的信息。
当前工作目录(Current Working Directory)。
umask掩码。
文件描述符表,包含很多指向file结构体的指针。
和信号相关的信息。
用户id和组id。
会话(Session)和进程组。
进程可以使用的资源上限(Resource Limit)。
进程控制块(Processing Control Block),是操作系统进程中一种数据结构,主要表示进程状态。其作用是使一个在多道程序环境下不能独立运行的程序(含数据),成为一个能独立运行的基本单位或与其它进程并发执行的进程。或者说,OS是根据PCB来对并发执行的进程进行控制和管理的。 PCB通常是系统内存占用区中的一个连续存区,它存放着操作系统用于描述进程情况及控制进程运行所需的全部信息,它使一个在多道程序环境下不能独立运行的程序成为一个能独立运行的基本单位或一个能与其他进程并发执行的进程。
26 字符类型占据的字节数
32位系统上int类型占4个字节,值得一提的是64位的系统int也是4字节,
其他相关的字节数如下:
32位编译器:
char :1个字节
char*(即指针变量): 4个字节(32位的寻址空间是2^32, 即32个bit,也就是4个字节。同理64位编译器)
short int : 2个字节
int: 4个字节
unsigned int : 4个字节
float: 4个字节
double: 8个字节
long: 4个字节
long long: 8个字节
unsigned long: 4个字节
64位编译器:
char :1个字节
char*(即指针变量): 8个字节
short int : 2个字节
int: 4个字节
unsigned int : 4个字节
float: 4个字节
double: 8个字节
long: 8个字节
long long: 8个字节
unsigned long: 8个字节
27 循环队列的长度是(rear-front+Quesize)%Quesize
28 C++ 中malloc函数详解
https://blog.csdn.net/sinat_27456831/article/details/50834965
函数声明:void malloc(int size);
说明:malloc 向系统申请分配指定size个字节的内存空间。返回类型是 void 类型。void* 表示未确定类型的指针。C,C++规定,void* 类型可以强制转换为任何其它类型的指针。
从函数声明上可以看出。malloc 和 new 至少有两个不同: new 返回指定类型的指针,并且可以自动计算所需要大小。
而 malloc 则必须由我们计算要字节数,并且在返回后强行转换为实际类型的指针。
另外有一点不能直接看出的区别是,malloc 只管分配内存,并不能对所得的内存进行初始化,所以得到的一片新内存中,其值将是随机的。
29 进程间通信
又称IPC(Inter-Process Communication),指多个进程之间相互通信,交换信息的方法。根据进程通信时信息量大小的不同,可以将进程通信划分为两大类型:
1、低级通信,控制信息的通信(主要用于进程之间的同步,互斥,终止和挂起等等控制信息的传递)
2、高级通信,大批数据信息的通信(主要用于进程间数据块数据的交换和共享,常见的高级通信有管道,消息队列,共享内存等).
(1)管道( pipe ):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。
(2)有名管道 (named pipe): 有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。
(3)信号量( semophore ): 信号量是一个计数器,可以用来控制多个进程对共享资源的访问。不是用于交换大批数据,而用于多线程之间的同步.常作为一种锁机制,防止某进程在访问资源时其它进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。
(4)消息队列( message queue ): 消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信
息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。
(5)信号 ( signal ): 信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。
(6)共享内存( shared memory ) :共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的 IPC 方式,它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号两,配合使用,来实现进程间的同步和通信。
(7)套接字( socket ): 套解口也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同机器间的进程通信。
30 Android四大组件是:
Activity、Service、Broadcast Receiver、Content Provider.
31 JAVA中,final修饰的类、成员函数、变量分别有什么特点?
类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。因此一个类不能既被声明为 abstract的,又被声明为final的。
将变量声明为final,可以保证它们在使用中不被改变。被声明为final的变量必须在new一个对象时初始化(即只能在声明变量或构造器或代码块内初始化),而在以后的引用中只能读取,不可修改。
将方法声明为final,则方法只能使用,而不能在子类重写。
32
请问如何定义C++类,阻止C++类对象的相互赋值(obj2=obj1)?
提示:利用重载制造编译错误
class A{
}
答案:只要重载=的定义在private或protected下面即可,重载原型的const修饰及函数体内容无所谓
class A{
protected:
A& operator = (const A&){};
}
或者
class A{
private:
A& operator = (const A&){};
}
33 java中Thread.sleep()和 Object.wait() 有什么区别?
sleep是使线程休眠一段时间。在sleep休眠时间到期后,线程不一定立即恢复执行,除非系统没有其它更高优先级的任务正在执行
wait是线程间实现同步的一种机制。调用wait的线程会主动进入等待状态,直到被其它线程唤醒或者等待超时
34 sprintf、strcpy、strncpy及 memcpy 函数,请问这些函数功能有什么区别?从安全角度考虑一般应该用哪个函数复制字符串?
sprintf为格式化字符串函数
strcpy为字符串复制函数
strncpy也是字符串复制函数,但是可以指定最大复制长度
memcpy为内存复制函数
从安全角度应该选strncpy,不易出现越界异常
35 编程找出两个字符串中最大公共子字符串,如"abccade",“dgcadde"的最大子串为"cad”
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
char* longest(char *a,char *b)
{
int alen = strlen(a);
int blen = strlen(b);
int i,j,index,max=0,num=0;
int start;
char *str;
for(i = 0; i < alen; i++)
{
for(j = 0; j < blen; j++)
{
//这里的start1、start2是比较关键的
int start1=i;
int start2=j;
while((start1 <= alen-1) && (start2 <= blen-1) && (a[start1++] == b[start2++]))
num++;
if(num > max)//如果num是当前最大匹配的个数,则赋给max,并且在start记下str1最长匹配开始的位置
{
max=num;
start=i;
}
num=0;//如果num不是当前最大的,则赋为0值继续循环
}
}
str=(char *)malloc(max + 1);
strncpy(str,a + start,max);//从字符串a的start位置开始,拷贝max个字符到str中,这就是我们找出的最大子串
str[max] = '/0';
return str;
}
int main()
{
char a[]="abcdabcdcbadffdaccccafg";
char b[]="gfaccccadffdabcdcbadcba";
char *str;
str = longest(a,b);
printf("%s/n",str);
free(str);
system("pause");
return 0;
}

4534

被折叠的 条评论
为什么被折叠?



