zoukankan      html  css  js  c++  java
  • 计算机软件方面的面试题?

    作为刚刚毕业参加工作的本科生,初出茅庐的这点儿经验和建议自然无法和业界大佬的相提并论,就姑且算作是我的小总结吧;对你有用就更好啦!

    一.我的第一份工作经历了两轮面试,第一次是项目经理到学校进行的校招,第二次是与项目技术人员进行的视频面试。

    P公司是3月份大三下学期开学后第一个来我学校进行校招的公司,因为我一开始就没打算考研,所以对打好招呼要来校招的公司都给与了足够的重视,

    放寒假前就知道P公司要来,也上网了解了一下,然而并没有太大用。。。(但提前了解还是对的,嗯嗯)

    校招当天P公司来了好多部门的负责人,在一个头头讲了一下公司整体情况后,就由各个负责人轮流讲各自的项目和自己都需要哪些人。

    其中一个项目负责人就是后来我所在团队的项目经理L,他给了很深刻的印象,给我的感觉就是这人很洒脱又挺靠得住的。

    他是所有男士里唯一没穿西服的(我们有好多同学都是穿正装来的呢),期间介绍了手里项目的欧美背景,以及工作方向,工作氛围之类的。

    说的正是我想要的,反正我是不想搞得太日式,穿西服打领带写代码,我的终极目标可是WFH(在家办公,未来这个行业应该可以实现)。

    负责人各自都说完,学生们就开始去找自己感兴趣的负责人继续了解项目,我和一起来的室友意见一致,都准备去他的项目看看。

    要说的他都说完了,分开就是为了笔试,笔试包括考查基础知识的选择题,和看你动手能力的编程题。

    一只熊走过来的我是第一个答完的,然后我就举手示意了一下,过了一会儿也没有第二个答完的,他就示意我先出去和他聊聊,

    然后就得到了一个单独面试的机会嘻,我们就根据这个试题和我的简历聊了起来,

    十分钟以后,他就跟我说我已经在他的团队里了,但定下来之前还要和技术人员聊一下。

    然后我那天晚上十分高兴,点了两荤两素还买了杯奶茶,哈。

    1.面试官要有足够的魅力来吸引面试者,不要官腔给人高高在上的感觉,也不要紧张让人觉得没有安全感。

    要从容,当然这种从容也是时间积累起来的。

    2.去面试一定要做好准备,把基础知识整理整理,把编程题里像递归,排序,链表,树图遍历等必考知识提前练一练,

    我之所以能很快写完,就是因为提前突击了一下。(主要是高手都选择考研,压根没来,或是早跟更好的公司签好了:)

    3.面试中L指出了我一个问题:一般题目都会让你完成某种功能,你不能只写几行代码,

    要把这功能封装成函数,给定的变量写成参数。嗯嗯

    4.在学校里多参加专业相关的比赛,做出的成果可以成为面试时的谈资,像ACM,数学建模,互联网+,大创项目等。

    5.L多次指出面试是双方互相了解的过程,我在考察你,你也在考察我,

    对于具体的工作形式,公司的运营模式,要多了解问清楚,要不是他说我也不知道这些事,

    比如说这个词——外包

    外包:与A公司签订合同,然后A公司把你派遣到B公司帮B公司干活,B公司给A公司钱,A公司再给你发钱的模式。

    *一年后的经历证明外包的确挺尴尬的,小车说翻就翻。呜。

    Action

    几天以后的周五进行了期盼已久的视频面试,(工作地点和学校不在一座城市)

    面试官也是我未来的同事Z对我进行了面试,(L代表的是P公司,对我表示认可后,交由Z代表的E公司再对我进行面试)

    面试的内容还是基础知识,对概念的理解,对编程语言的了解,谈谈做过的小项目,给你一个题目谈谈你的思路。

    视频就免了在纸上写代码,不然一般面试都会让写代码的。

    视频吗,就可以看到对面的工作环境,感觉还是不错的,所以就决定是这儿了。

    最后就是对方给了一个肯定的答复,结果导致我之后的面试都没什么心思了,整个学期过得也都很浪,额。

    然后从大三下的暑假开始的整个大四都在被P公司派遣到的E公司实习,

    与XM,ZZ,BJ,JW,SJ,YF度过了一段愉快的时光。

    1.面试题:OOP(Object Oriented Programming 面向对象的程序设计)

     

    面向对象技术具有3大基本特征是:封装性、继承性和多态性。

    1.封装性

    封装性就是把对象的属性和方法结合成一个独立的单位,并尽可能隐蔽对象的内部细节,它包含两个方面的含义:

    (1).把对象的全部属性和方法结合在一起,形成一个不可分割的独立单位(类或对象);

    (2).信息隐蔽,对象的使用者只是通过预先定义的接口关联到某一对象的行为和数据,而无须知道其内部细节。

    封装的结果使对象以外的部分不能随意存取对象的内部数据,从而有效的避免了外部错误对它的影响,是错误局部化,大大减小了查错和排错的难度。

    对象的内部实现和外部行为分隔开来,人们在外部进行控制,具体的操作细节在内部实现,这样大大降低了人们操作对象的复杂程度。

    (2.抽象性 类是对象的抽象,对象是类的具体表现形式。)

    2.继承性

    继承的本质是在已有的类的基础上进行扩充或改造,得到新的数据类型,以满足新的需要。

    它是存在于面向对象程序中的两个类之间的一种关系。当一个类A能够获取另一个类B中所有非私有的成员属性和行为时,就称这两个类之间具有继承关系。

    被继承的类B成为父类或超类(superclass)继承了父类或超类的属性和行为的类A成为子类(subclass)。

    在java面向对象程序设计中,一个父类可以同时拥有多个子类,每一个子类是父类的特殊化。

    继承机制解决的软件的重用问题。

    3.多态性

    多态性一般是指在父类中定义的方法被子类继承后,可以表现出不同的行为。这使得同一个方法在父类及其各个子类中具有不同的语义。

    继承产生的相关的不同的类,其对象对同一消息会做出不同的响应。

    子类对父类方法的覆盖 实现多态。

    2.简历上的项目,一定要能够讲明白,达到整体掌握具体精通的程度,不然加分项就会变成扣分项。

    3.面试题:给定一个单链表的头指针,返回倒数第n个节点。先给个思路,再在纸上实现一下。

    Action

    毕设答辩前一天通知我公司可能不要我了 :( 

    还好当时的同事把我推荐到了现在工作的C公司,过来当然也是要面试的啦

    面试的时候问了我上一个工作的情况,并根据测试方面的工作给我出了两道面试题

    1.之前的工作就是面试官眼里的经验,这要比毕设课设什么的更有分量。

    所以一定要掌握好,或是描述好。这将直接决定面试官对你的整体把握。

    2.面试题:给定三条边,问是否能组成三角形。

    3.面试题:给一段英语短文,给出各个单词出现的频率。

    这些都是非常简单的。

    再之后,所在的项目招人,我作为旁听者参加了几次面试,我也大致整理了一下:

    首先让面试者做自我介绍,了解下他的经历,看看表达能力,在心里给这位可能的未来同事打个分。

    就着他介绍的各种经历里,提取一些对所应聘岗位中我们关注的点,提一些问题:看看他在项目里的参与掌握程度。

    之后再问问自己比较在乎的知识,看看他答的水平。

    技术岗的话,最后都会在纸上练练的。

    最后再让面试者了解了解公司这边的情况,面试是互相了解的过程。

    “人(我们)的精力有限,必须在有限的时间内判断这个人,行就上,不行就拉倒,不用怕错,别有负担” 一位老前辈这样对我说。

    进程与线程

    进程是装入内存运行的程序段,是许多的系统对象拥有权的集合,是资源的集合,是资源分配的基本单位。

    线程是CPU运行调度的基本单位,线程必须被包含在进程中;

    通常在一个进程中可以包含若干个线程,它们可以利用进程所拥有的资源。

    在引入线程的操作系统中,通常都是把进程作为分配资源的基本单位,而把线程作为独立运行和独立调度的基本单位。

    数据库的种类

    数据库通常分为层次式数据库、网络式数据库和关系式数据库三种。而不同的数据库是按不同的数据结构来联系和组织的。

    而在当今的互联网中,最常见的数据库模型主要是两种,即关系型数据库和非关系型数据库。

    关系型数据库 Oracle和MySQL

    非关系型数据库种类

    (1).键值存储数据库(key-value)Memcached、Redis、MemcacheDB

    (2).列存储(Column-oriented)数据库 Cassandra、HBase

    (3).面向文档(Document-Oriented)数据库 MongoDB、CouchDB

    (4).图形数据库 Neo4J、InforGrid

    软件开发模型 

    Software Development Model是指软件开发全部过程、活动和任务的结构框架。

    软件开发包括需求、设计、编码和测试等阶段,有时也包括维护阶段。

    1.瀑布模型:

    瀑布模型核心思想是按工序将问题化简,将功能的实现与设计分开,便于分工协作,
    即采用结构化的分析与设计方法将逻辑实现与物理实现分开。
    将软件生命周期划分为制定计划、需求分析、软件设计、程序编写、软件测试和运行维护等六个基本活动,
    并且规定了它们自上而下、相互衔接的固定次序,如同瀑布流水,逐级下落。

    2.迭代模型

    在某种程度上,开发迭代是一次完整地经过所有工作流程的过程:需求、分析设计、实施和测试工作流程。
    实质上,它类似小型的瀑布式项目。
    RUP(统一软件开发过程?)认为,所有的阶段都可以细分为迭代。
    每一次的迭代都会产生一个可以发布的产品,这个产品是最终产品的一个子集。

    3.敏捷开发模型

    项目的敏捷开发,敏捷开发小组主要的工作方式可以归纳为:
    作为一个整体工作; 按短迭代周期工作; 每次迭代交付一些成果;关注业务优先级; 检查与调整。

    4.螺旋模型 5.快速原型模型 6.喷泉模型 7.增量模型(演化模型)。。。

    面向过程(Procedure Oriented)与面向对象(Object Oriented)

    只为一个问题进行编程,把这个问题看做一个整体,

    例如最初开始学C语言时的,求质数,判断大小什么的都是面向过程的编程,

    带我的人这样讲:面向过程是轮胎坏了需要换一辆车,面向对象是轮胎坏了直接换轮胎。

    问为什么要面向对象编程,主要原因就是为了重用:也就是面向对象的三个特点:封装、继承和多态。

    公司包含所有员工,一部分员工是领导,领导继承员工的领工资等方法,就不用重新再写了。

    问题:继承中如何让子类屏蔽父类的成员函数?

    答案:在父类把该函数变成私有,或是在子类中重写该函数


    java访问权限

    public:所有

    protected:子类

    default(friendly):本包

    private:本类

    问题:为什么要设置访问权限?

    答案:要是随便什么人都能去中南海溜达一圈,是不就挺乱套的?

    Java编译

    Java程序从源文件创建到程序运行要经过两大步骤:

    1.源文件由编译器编译成字节码(ByteCode);

    2.字节码由Java虚拟机(JVM)解释运行。

    因为Java程序既要编译同时也要经过JVM的解释运行,所以说Java被称为半解释语言( "semi-interpreted" language)。

    Java虚拟机屏蔽了与具体操作系统平台相关的信息,

    使得Java程序只需生成在Java虚拟机上运行的目标代码(字节码),

    就可以在多种平台上不加修改地运行。

    平台无关性就是一种语言在计算机上的运行不受平台的约束,一次编译,到处执行 。

    Java程序编译和运行的过程 - 邱明成 - 博客园

    抽象类与接口

    abstract class 和 interface

    在面向对象的概念中,我们知道所有的对象都是通过类来描绘的,

    但是反过来却不是这样的。

    并不是所有的类都是用来描绘对象的,

    如果一个类中没有包含足够的信息来描绘一个具体的对象,

    这样的类就是抽象类。

    比如:如果我们进行一个图形编辑软件的开发,

    就会发现问题领域存在着圆、三角形 这样一些具体概念,

    它们是不同的,但是它们又都属于形状这样一个概念,

    形状这个概念在问题领域是不存在的,它就是一个抽象概念。

    正是因为抽象的概念在问题 领域没有对应的具体概念,

    所以用以表征抽象概念的抽象类是不能够实例化的。

    Java中只支持类的单继承,确切的说是,

    Java中类的继承只支持单继承;

    abstract class在Java语言中表示的是一种继承关系,

    一个类只能使用一次继承关系。

    但是,一个类却可以实现多个interface。

    也许,这是Java语言的设计者在考虑Java对于多重继承的支持方面的一种折中考虑吧。

    接口之间的继承同样也是使用extends关键字

    接口只是对方法的一个声明,并没有具体的实现,

    所以子接口中的方法属于哪个父接口并不重要,

    重要的是当实现这个接口的时候只需有一个该方法的实现就可以了,

    这个方法的实现应该同时属于两个父接口。

    如果在两个父接口中分别定义了名称和参数都相同,而返回结果却不同的方法

    这就有问题了,这时会有编译时错误,原因很简单,

    方法的重载只能是相同的方法名,不同的输入参数;

    而对于这两个方法,它们具有相同的方法名,相同的输入参数,只是不同的返回参数,是不能作为重载方法的,

    所以对于编译器来说,这里是一个方法的重复定义,明显是不能通过编译的。

    函数签名:函数的名称及其参数类型组合在一起,就定义了一个唯一的特性,称为函数签名。(不包括返回类型)

    抽象类和接口联系与区别 - Alan's Blog - 博客园


    Java内存模型

    Hash table & Hash map

    Spring框架

    拿石子问题

    4亿个数里取出重复两次的数(大数据 位图bitmap)

    现有40亿个无符号整型数字,请在1GB的运行内存条件下,找出所有出现2次的数字

    提取有用的信息:

    (1).40亿个,数量很大,用哈希表肯定是要超过1GB的运存,

    (2).无符号整形数字,32位二进制位表示的正整数其取值范围是0~4294967295,也就是大约有40多亿种可能性。

    (3).出现2次,所以需要两位做记录,因为1位只能记录0或1,代表有或无;用两位记录的话,

      00表示无,01表示出现一次,10表示出现两次,11表示出现3次或以上;

    所以申请的内存大小为:2的32次方再乘以2(单位:位),合1GB(单位:字节)

    另:有40多亿种可能性是因为无符号整型数字,而不是题目中的40亿个的条件,换成80亿或者120亿,仍然只需要1GB运存;

    为此赢得了一顿饭,O(∩_∩)O哈哈~

    待续》》》

    2020疫情期间更新

    问:已经工作了几年了,有什么经验想分享么?

    互联网行业火得不行,很多非计算机专业的人加入进来想分口吃的,计算机专业的本科生唯一的优势似乎就是在大学里获得的成体系的知识框架。

    但随着时间的流逝这些东西也几乎都还给老师了。再加上大四学分置换出来实习,导致大四一年的专业课啊没有上。

    这些迟早是要还的,起码比在学校准备考研的,和读了研又学了几年的那些同学要差一大截。

    诚然,不是每个人都要拼命的努力,但你要努力的时候需要知道和别人到底差在了哪。

  • 相关阅读:
    118/119. Pascal's Triangle/II
    160. Intersection of Two Linked Lists
    168. Excel Sheet Column Title
    167. Two Sum II
    172. Factorial Trailing Zeroes
    169. Majority Element
    189. Rotate Array
    202. Happy Number
    204. Count Primes
    MVC之Model元数据
  • 原文地址:https://www.cnblogs.com/duasonir/p/7628157.html
Copyright © 2011-2022 走看看