软件开发工程师面试题目之二

一、面向实现与面向接口的编程的区别,
“接口”是我们要调用的一系列接口的集合,有类会响应这些接口的调用。
“实现”为接口存放代码和逻辑的地方。
接口定义了标准,对同一个接口可以有不同的实现。
二、awk是什么,有什么用,怎么用?
最简单地说,AWK是一种用于处理文本的编程语言工具。

三、fork,exec 函数
fork函数,创建一个新的进程,该进程共用当前进程的代码段,拷贝父进程的数据段和堆栈段。为提高效率,写时拷贝技术。返回2次值,父进程中返回新的pid,子进程中返回0.并且都可能返回-1.

exec函数,用新的进程取代当前进程,只保留下当前进程pid。
拓展:wait函数
函数说明
wait()会暂时停止目前进程的执行,直到有信号来到或子进程结
束。如果在调用wait()时子进程已经结束,则wait()会立即返
回子进程结束状态值。子进程的结束状态值会由参数status 返回,
而子进程的进程识别码也会一快返回。如果不在意结束状态值,则
参数status 可以设成NULL。子进程的结束状态值请参考waitpid()。
返回值
四、多线程编程中的joinable和detachable的区别:
joinable,   joinable:当线程函数自己返回退出或pthread_exit时都不会释放线程所用资源,包括栈,线程描述符
detachable,线程结束会自动释放资源。
五、javaGC算法有那些?
标记算法-- 根搜索算法。算法思想是通过一系列称为“gc roots”的节点往下搜索,搜索走过的路径称为“应用链”,当一个一个对象到一个gc roots没有任何应用链时,则该对象不可用。
常见垃圾收集算法有:标记-清除算法,标记-整理算法,复制算法,分代收集算法
六、DOM 文档对象。
DOM= Document Object Model,文档对象模型,DOM可以以一种独立于平台和语言的方式访问和修改一个文档的内容和结构。
七、排序算法。《《重点》》
八、树的遍历。
对于二叉树,有先序,中序,后序遍历,广度优先遍历。对于多叉树,有广度优先遍历和深度优先遍历。
九、动态规划,
动态规划,又称记忆化搜索。实质是分治思想。
基本思想:动态规划通常用于求解具有某种最优性质的问题。这种方法会将原问题分解为相似的子问题,在求解的过程中通过子问题的解求出原问题的解。
经典例题:
0-1背包问题,兔子问题,最长公共字串。
递归写法,dp数组写法。

十、虚拟内存管理与内存分配算法
虚拟内存管理最 主要的作用是让每个进程有独立的地址空间 (进程间的安全)
内存分配算法:
首次适应算法,循环首次适应算法,最佳适应算法,最差适应算法。
十一、进程和线程的区别
进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动 ,
进程是系统进行资源分配和调度的一个独立单位 .
线程是进程的一个实体,CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.
线程之间没有独立的地址空间,一个线程死掉,整个进程就挂掉,多线程的健壮性比多进程差。
进程切换消耗资源较大。

十二,单例模式代码,如何实现同步
  
  
  1. /**  
  2.  * 懒汉式单例实现的示例  
  3.  */  
  4. public class Singleton {  
  5.     /**  
  6.      * 定义一个变量来存储创建好的类实例  
  7.      */  
  8.     private static Singleton uniqueInstance = null;  
  9.     /**  
  10.      * 私有化构造方法,可以在内部控制创建实例的数目  
  11.      */  
  12.     private Singleton(){  
  13.         //  
  14.     }  
  15.     /**  
  16.      * 定义一个方法来为客户端提供类实例  
  17.      * @return 一个Singleton的实例  
  18.      */  
  19.     public static synchronized Singleton getInstance(){  
  20.         //判断存储实例的变量是否有值  
  21.         if(uniqueInstance == null){  
  22.             //如果没有,就创建一个类实例,并把值赋值给存储类实例的变量  
  23.             uniqueInstance = new Singleton();  
  24.         }  
  25.         //如果有值,那就直接使用  
  26.         return uniqueInstance;  
  27.     }  
  28.     /**  
  29.      * 示意方法,单例可以有自己的操作  
  30.      */  
  31.     public void singletonOperation(){  
  32.         //功能处理  
  33.     }  
  34.     /**  
  35.      * 示意属性,单例可以有自己的属性  
  36.      */  
  37.     private String singletonData;  
  38.     /**  
  39.      * 示意方法,让外部通过这些方法来访问属性的值  
  40.      * @return 属性的值  
  41.      */  
  42.     public String getSingletonData(){  
  43.         return singletonData;  
  44.     }  
  
  
  1. /**  
  2.  * 饿汉式单例实现的示例  
  3.  */  
  4. public class Singleton {  
  5.     /**  
  6.      * 定义一个变量来存储创建好的类实例,直接在这里创建类实例,只能创建一次  
  7.      */  
  8.     private static Singleton uniqueInstance = new Singleton();  
  9.     /**  
  10.      * 私有化构造方法,可以在内部控制创建实例的数目  
  11.      */  
  12.     private Singleton(){  
  13.         //  
  14.     }  
  15.     /**  
  16.      * 定义一个方法来为客户端提供类实例  
  17.      * @return 一个Singleton的实例  
  18.      */  
  19.     public static Singleton getInstance(){  
  20.         //直接使用已经创建好的实例  
  21.         return uniqueInstance;  
  22.     }  
  23.  
  24.     /**  
  25.      * 示意方法,单例可以有自己的操作  
  26.      */  
  27.     public void singletonOperation(){  
  28.         //功能处理  
  29.     }  
  30.     /**  
  31.      * 示意属性,单例可以有自己的属性  
  32.      */  
  33.     private String singletonData;  
  34.     /**  
  35.      * 示意方法,让外部通过这些方法来访问属性的值  
  36.      * @return 属性的值  
  37.      */  
  38.     public String getSingletonData(){  
  39.         return singletonData;  
  40.     }  
高级写法:

十三、



软件开发工程师面试题通常会涉及以下几个方面: 1. 软件开发过程:面试官可能会问到软件开发过程的阶段以及每个阶段的作用。一般软件开发过程包括可行性分析、需求分析、架构设计、代码编写、测试、部署和维护等阶段。可行性分析用于评估项的可行性和风险控制,需求分析用于明确项的功能需求,架构设计用于设计系统的整体结构,代码编写用于实现具体功能,测试用于验证系统的正确性,部署用于将软件交付给用户,维护用于保证软件的可用性和稳定性。 2. 错误和异常处理:面试官可能会问到错误和异常的区别。错误(error)通常表示一种严重的问题,恢复起来可能很困难,比如内存溢出。而异常(exception)表示设计或实现问题,通常指程序运行正常时不会发生的情况。错误往往无法被程序处理,而异常可以通过异常处理机制被捕获并进行处理。 3. 托管代码和非托管代码:面试官可能会问到托管代码和非托管代码的区别。托管代码是运行在.NET公共语言运行时(CLR)中的代码,受CLR管理内存、资源和安全性。相对而言,非托管代码是直接访问计算机硬件和操作系统的代码,不经过CLR运行,需要程序员自行分配和释放内存空间。 综上所述,软件开发工程师面试题通常会涉及软件开发过程的阶段和作用、错误和异常的区别以及托管代码和非托管代码的概念。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [C#笔试题面试题锦集](https://blog.csdn.net/Fighting515/article/details/115870562)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值