开发岗的面试知识点(一)

1. c++Java的区别与联系

(1)C++ : C++应用在中间件和底层,在桌面程序上比Java实用,可以直接编译成exe文件,有丰富的动态库;JAVA:用在高层,无指针,完全面向对象, 运行在JVM,可移植性强, 在web 应用上具有c++ 无可比拟的优势 java 丰富的插件沿袭了c++的一些实用结构 

(2)垃圾回收机制的区别。c++用析构函数回收垃圾C++程序时一定要注意内存的申请和释放;java自动自动的废料回收(GC算法),Java语言中,内存的分配和回收都是自动进行的,程序员无须考虑内存碎片的问题。

(3)指针是c++的优势,可以直接对内存的操作,但同时具有危险性,c++很灵活,因为有句柄的存在;ava语言不使用指针,对于底层程序的编程以及控制方面的编程Java语言中没有指针的概念,引入了真正的数组。不同于C++中利用指针实现的“伪数组”,Java引入了真正的数组,同时将容易造成麻烦的指针从语言中去掉,这将有利于防止在c++程序中常见的因为数组操作越界等指针操作而对系统数据进行非法读写带来的不安全问题。

(4)JavaC++程序可靠性更高。因为Java语言不需要程序对内存进行分配和回收,Java还丢弃了C++ 中很少使用的、很难理解的、令人迷惑的那些特性,如操作符重载、多继承、自动的强制类型转换。

(5)Java用接口(Interface)技术取代C++程序中的多继承性。接口与多继承有同样的功能,但是省却了多继承在实现和维护上的复杂性。

2. SQL Server,MySQL,Oracle三者的区别

  • Oracle最贵,功能最多,安装最不方便(3g),不开源,速度最慢,最安全。适合金融,电信等企业。要想用好并发挥其性能,对管理员的能力要求较高。另维护成本较高。用户决定内容,一个数据库中多个用户的形式。
  • Microsoft SQL Server 不全是免费,中等贵,功能最少,使用最方便,开发最方便,运维最方便,不开源,速度中等,一般安全。操作简单,人员要求低,学习曲线低
  • Mysql(152M)免费,功能中等,安装最方便,支持平台最多,使用最不方便,开发最不方便,运维最不方便,有开源版本,速度最快,最不安全。由数据库决定内容,多个数据库多个用户形式(最好每个数据库对应一个用户)。MySQL不支持事务处理,没有视图,没有存储过程和触发器,没有数据库端的用户自定义函数,不能完全使用标准的SQL语法。 也就是MySQL缺乏transactionsrollbacks, 和subselects的功能。

Oracle 创一代+高富帅 ;Sqlserver 富二代 Mysql 屌丝创业青年。

3. 多线程

C++实现多线程及其三种方法实现多线程同步:

  • 调用windows API实现多线程

DWORD WINAPI myfun1(LPVOID lpParameter); //声明线程函数  

  • 使用临界区对象、事件对象和互斥对象三种方法实现多线程同步,

//InitializeCriticalSection(§ion);//初始化临界区对象(需要在线程前初始化)  

//hevent=CreateEvent(NULL,FALSE,false,NULL);//创建事件并返回句柄  

//hmutex=CreateMutex(NULL,false,NULL);//创建互斥对象并返回其句柄  

JAVA多线程实现的四种方式:

继承Thread类创建线程;

实现Runnable接口创建线程;

实现Callable接口通过FutureTask包装器来创建Thread线程,使用ExecutorService、Callable、Future实现有返回结果的线程。


 在WIN32中,同步机制主要有以下几种:

(1)事件(Event);

(2)信号量(semaphore);

(3)互斥量(mutex);

(4)临界区(Critical section)。


线程互斥是一种特殊的线程同步。实际上,互斥和同步对应着线程间通信发生的两种情况:

(1)当有多个线程访问共享资源而不使资源被破坏时;

(2)当一个线程需要将某个任务已经完成的情况通知另外一个或多个线程时。


4. 进程线程.形象的说明进程和线程的区别

进程是指运行中的应用程序,每一个进程都有自己独立的内存空间。一个应用程序可以同时启动多个进程。例如对于IE浏览器程序,每打开一个IE浏览器窗口,就启动了一个新的进程。同样,每次执行JDK的java.exe程序,就启动了一个独立的Java虚拟机进程,该进程的任务是解析并执行Java程序代码。线程是指进程中的一个执行流程,有时也称为执行情景。一个进程可以由多个线程组成,即在一个进程中可以同时运行多个不同的线程,它们分别执行不同的任务。当进程内的多个线程同时运行时,这种运行方式称为并发运行。许多服务器程序,如数据库服务器和Web服务器,都支持并发运行,这些服务器能同时响应来自不同客户的请求。进程和线程的主要区别在于:每个进程都需要操作系统为其分配独立的内存地址空间,而同一进程中的所有线程在同一块地址空间中工作,这些线程可以共享同一块内存和系统资源,比如共享一个对象或者共享已经打开的一个文件。

5. Socket通信

开发岗的面试知识点(一)_第1张图片

开发岗的面试知识点(一)_第2张图片


Socket通信实现步骤解析:

Step 1:创建ServerSocket和Socket

Step 2:打开连接到的Socket的输入/输出流

Step 3:按照协议对Socket进行读/写操作

Step 4:关闭输入输出流,以及Socket

Socket服务端的编写

步骤

Step 1:创建ServerSocket对象,绑定监听的端口 Step 2:调用accept()方法监听客户端的请求 Step 3:连接建立后,通过输入流读取客户端发送的请求信息 Step 4:通过输出流向客户端发送响应信息 Step 5:关闭相关资源

Socket客户端的编写

步骤

Step 1:创建Socket对象,指明需要链接的服务器的地址和端号 

Step 2:链接建立后,通过输出流向服务器发送请求信息 

Step 3:通过输出流获取服务器响应的信息 

Step 4:关闭相关资源

来自:Android基础入门教程——7.6.2 基于TCP协议的Socket通信(1)

5. TCP 协议

                        开发岗的面试知识点(一)_第3张图片

           三次握手四次挥手示意图

参考:面试题:三次握手、四次握手内容整理

三次握手过程说明: 
1、由客户端发送建立TCP连接的请求报文,其中报文中包含seq序列号,是由发送端随机生成的,并且将报文中的SYN字段置为1,表示需要建立TCP连接。(SYN=1,seq=x,x为随机生成数值)
2、由服务端回复客户端发送的TCP连接请求报文,其中包含seq序列号,是由回复端随机生成的,并且将SYN置为1,而且会产生ACK字段,ACK字段数值是在客户端发送过来的序列号seq的基础上加1进行回复,以便客户端收到信息时,知晓自己的TCP建立请求已得到验证。(SYN=1,ACK=x+1,seq=y,y为随机生成数值)这里的ack加1可以理解为是确认和谁建立连接。
3、客户端收到服务端发送的TCP建立验证请求后,会使自己的序列号加1表示,并且再次回复ACK验证请求,在服务端发过来的seq上加1进行回复。(SYN=1,ACK=y+1,seq=x+1)

开发岗的面试知识点(一)_第4张图片

四次挥手过程说明: 
1、客户端发送断开TCP连接请求的报文,其中报文中包含seq序列号,是由发送端随机生成的,并且还将报文中的FIN字段置为1,表示需要断开TCP连接。(FIN=1,seq=x,x由客户端随机生成)

2、服务端会回复客户端发送的TCP断开请求报文,其包含seq序列号,是由回复端随机生成的,而且会产生ACK字段,ACK字段数值是在客户端发过来的seq序列号基础上加1进行回复,以便客户端收到信息时,知晓自己的TCP断开请求已经得到验证。(FIN=1,ACK=x+1,seq=y,y由服务端随机生成)
3、服务端在回复完客户端的TCP断开请求后,不会马上进行TCP连接的断开,服务端会先确保断开前,所有传输到A的数据是否已经传输完毕,一旦确认传输数据完毕,就会将回复报文的FIN字段置1,并且产生随机seq序列号。(FIN=1,ACK=x+1,seq=z,z由服务端随机生成)
4、客户端收到服务端的TCP断开请求后,会回复服务端的断开请求,包含随机生成的seq字段和ACK字段,ACK字段会在服务端的TCP断开请求的seq基础上加1,从而完成服务端请求的验证回复。(FIN=1,ACK=z+1,seq=h,h为客户端随机生成) 
至此TCP断开的4次挥手过程完毕


开发岗的面试知识点(一)_第5张图片

 来自:TCP三次握手和四次挥手以及11种状态

6.IP协议详解


 

你可能感兴趣的:(TCP协议,IP协议,socket通信)