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

本文深入探讨编程领域的多个核心概念和技术,包括面向接口与面向实现的区别、AWK文本处理工具的使用、进程与线程的区别、Java GC算法、DOM文档对象模型、排序算法、树的遍历方法、动态规划原理及应用、虚拟内存管理、单例模式的实现等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、面向实现与面向接口的编程的区别,
“接口”是我们要调用的一系列接口的集合,有类会响应这些接口的调用。
“实现”为接口存放代码和逻辑的地方。
接口定义了标准,对同一个接口可以有不同的实现。
二、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.     }  
高级写法:

十三、



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值