zoukankan      html  css  js  c++  java
  • 面试经历感悟:

    第一部分是:Java基础。

    一.String、StringBuffer、StringBuilder的用法:

      首先他们三者的出现是由于我们java程序员在编写程序时,一把都会遇到大量的字符串的操作。java中就提供了String、StringBuffer、StringBuilder这几个类来操作字符串。下面就说说他们三者的具体使用:

    1.1  String类:包含的了一个不可变的字符串。一旦一个String对象被创建,包含在这个对象中的内容就是不可改变的了,直至这个对象被销毁。

    1.2  StringBuffer类:StringBuffer对象则是代表一个内容可变的字符串,StringBuffer和String虽然都是可以代表字符串,但是二者的实现方式有所不同,StringBuffer在进行字符串处理时,不生成新的对象,在内存上的使用优于String。所以在实际使用中,如果经常需要对字符串进行修改,就是使用StringBuffer性能就更好一些。

    1.3  StringBuilder类:是JDK5.0新增的代表字符串的对象,它和StringBuffer在很多方面是相同的。我们就说说他们两同胞兄弟格局个性的地方吧:StringBuffer方法是线程安全的,而StringBuilder不是线程安全的。所以StringBuilder的性能就要高一些。在不考虑线程安全的情况下,如果我们需要创建一个内容可变的字符串对象,我们可以优先考虑使用StringBuilder。

    二,下列那种异常是检查异常,需要在编写程序时申明(C)

      A  NullPointException            B  ClassCastException

      C  FileNotFoundException           D  IndexOutOfBoundException

    首先:异常分为-检查异常、运行时异常、错误。

    检查异常:通常是用户错误或者不能被程序员所预见的问题(不能被简单的忽略)。例如:打开一个文件时,文件找不到。C-文件找不到。

    运行时异常:一个程序在运行过程中可能发生的、可以被程序员避免的异常类型。与检查异常不同的是,运行时异常可以被忽略。如:数组越界、除数为零、引用为空、把引用类型转成一个无用的数据类型等。A-引用为空、B-类型转换出错、D-数组越界

    错误:错误根本不是一个异常,但却是程序员或用户无法控制的问题。如:调用栈溢出。

    三,分析下列代码,i,count变量的最终取值为:_7,16__;

      int i = 4;

      int count = (i++)+(i++)+(++i);

    分析:常见的增量和减量运算符的前置和后置。i++就是后置增量:运行后加一。++i就是前置增量:运行前加一。

    所以:i的值为-4-->5,5-->6,6-->7(最后一个前置了)。最终i的结果就为7。

       count的值:4+5+7=16;

    四,java接口修饰符可以为:BDE

    A:private    B:public    C:protected    D:final    E:abstract

    接口不是类,类是指描述对象的属性和行为,而接口里面只有行为。所以接口不符合类的定义。

    接口所有方法全是抽象方法只能 public abstract修饰 (默认public abstract修饰 ),属性默认public static final修饰。

    五,下面那个流类属于面向字符的输入流:D

    A:BufferedWriter    B:FileInputStream  C:ObjectInputStream  D:InputStreamReader

    1.按照流的方向分为输入输出流:

    输入流:从数据源读取数据到程序中,只能从中读取而不能写入数据,如:InputStream或Reader

    输出流:从数据源写入数据到程序中,只能从中写入而不能读取数据。如:OutputStream或Writer

    2.按照处理数据的最小单位的不同,可以分为两种类型。字符流和字节流。

    字节流:字节流是以byte为最小单位进行数据传送。以InputStream或OutputStream结尾

    字符流:字符流是以char为最小单位进行数据传送。以Reader和Writer结尾

    六,下列哪些是不合法的标识:

    A:do_it_now  B:_Substitude  C:9thMethod  D:$addMoney  E:%getPage  F:2variable  G:variable2  H:#myvar

    在Java中我们需要标识代码中很多元素,包括类名、方法、字段、变量、包名等,我们选择的名称就是标识符,并且遵守以下规则:

    1.标识符不能是关键字或true、false、null

    2.标识符可以允许包含字母、数字(0-9)、下划线(_)、美元符号($)

    3.标识符的第一个字符必须是:一个字母、下划线(_)、或美元符号($)

    4.标识符是区分大小写的,并且没有规定最大长度

    标识符就好比有:“三儿一女”-“美元字母下划线”+“数字”,还是以儿为重的主。

    由此可知:CEFH都不是合法的标识符。

    七,请问下列哪些语句在编译时会出错:

    A:float f=1.3;  B:double d =4.0;  C:byte b = 257;  D:String s="7";  E:int i=10;  F:cahr c="a";  

    G:cahr c=5;    H:boolean b = null;

    编译时出错是指:语法错误,在eclipse中就会直接报错的错误称为编译时出错。

    上面的大都是基本数据数据类型和String字符串,String字符串不属于基本数据类型。

    所以从这些数据的定义的规则来看:ACFGH会编译出错。

    将上列的错改为:

    float f =1.3F;

    byte b =(byte) 257; 

    char c ='a';//单引号,双引号即为字符串类型

    boolean b = true;//只能是true or false,不能定义为其他的任何字符。

    short dd = 3;是可以通过编译的。

    八,下面那些事Thread类的方法:AB

    A:start()  B:run()  C:exit()  D:getPriority()

    线程管理的主要方法定义在Thread类中,包括:

    start()/run()/setName()/setPriority()-优先级/join-让调用者等待/interrupt()-中断本线程/yield()-让步/sleep();

    第二部分为Sql部分:MySql数据库。

    一共有两张表:sm_user和db_deptdoc

    一,写出对数据库进行增删改查的关键字:

      增:insert into  删:delete  改:update  查:select

    二,查询sm_user表中不重复的数据:

      SELECT DISTINCT * FROM sm_user;

    三,查询sm_user中字段user_code为字符串01开头或结尾的数据:

      SELECT * FROM sm_user WHERE user_code LIKE '01%' AND '%01';

    四,查询sm_user中字段vtype的最大值:

      SELECT MAX(vtype) FROM sm_user;

    五,查询sm_user表中字段vtype等于该表中字段vtype最大值的全部信息:

      SELECT * FROM sm_user WHERE vtype = (SELECT MAX(vtype) FROM sm_user);

    六,统计sm_user表中以pk_deptdoc字段分组分别有多少条数据:

      SELECT COUNT(pk_deptdoc) FROM sm_user;

    七,统计sm_user表中以pk_deptdoc字段分组分别有多少条数据,并用内联接的方式关联表查询出对应的dept_name:

      SELECT sm_user.user_name AS uName,bd_deptdoc.dept_name AS dName FROM sm_user INNER JOIN bd_deptdoc ON sm_user.pk_deptdoc = bd_deptdoc.pk_deptdoc;

    八,查询出sm_user表user_name以‘蒲’开头且user_name值的长度为2的数据的vtype字段的平均值,平均值函数为avg(),字符串长度函数为length():

      SELECT AVG(ALL vtype) WHERE (SELECT * FROM sm_user WHERE user_name LIKE '张%' AND LENGTH(user_name)=2);

    九,对表sm_user按照这两字段user_code和user_name建索引:

      CREATE INDEX Codeindex,Nameindex ON sm_user(user_code,user_name);

    十,对表sm_user在这个字段sm_date上进行日期范围分区(写出关键字即可):

      between and 

    第三部分:综合部分(简单题和代码编写)

    简答题:

    1.接口interface和抽象abstract的区别??

    答:

    第一点. 接口是抽象类的变体,接口中所有的方法都是抽象的。而抽象类是声明方法的存在而不去实现它的类。
    第二点. 接口可以多继承,抽象类不行。
    第三点. 接口定义方法,不能实现,而抽象类可以实现部分方法。
    第四点. 接口中基本数据类型为static 而抽类象不是的。

      当你关注一个事物的本质的时候,用抽象类;当你关注一个操作的时候,用接口。抽象类的功能要远超过接口,但是,定义抽象类的代价高。因为高级语言来说(从实际设计上来说也是)每个类只能继承一个类。在这个类中,你必须继承或编写出其所有子类的所有共性。虽然接口在功能上会弱化许多,但是它只是针对一个动作的描述。而且你可以在一个类中同时实现多个接口。在设计阶段会降低难度的。 

    2.什么是方法覆盖?与方法的重载有什么不同?方法的覆盖与属性的隐藏有什么不同?

    答:

    重载:方法名相同,但参数不同的多个同名函数

    注意:1.参数不同的意思是参数类型、参数个数、参数顺序至少有一个不同。

       2.返回值和异常以及访问修饰符,不能作为重载的条件(因为对于匿名调用,会出现歧义,eg:void a ()和int a() ,如果调用a(),出现歧义)。

       3.main方法也是可以被重载的。

    覆盖:子类重写父类的方法,要求方法名和参数类型完全一样(参数不能是子类),返回值和异常比父类小或者相同(即为父类的子类),访问修饰符比父类大或者相同,‘两同两小一大’。

        注意:子类实例方法不能覆盖父类的静态方法;子类的静态方法也不能覆盖父类的实例方法(编译时报错),总结为方法不能交叉覆盖

    隐藏:父类和子类拥有相同名字的属性或者方法时,父类的同名的属性或者方法形式上不见了,实际是还是存在的。

       注意:当发生隐藏的时候,声明类型是什么类,就调用对应类的属性或者方法,而不会发生动态绑定。方法隐藏只有一种形式,就是父类和子类存在相同的静态方法。属性只能被隐藏,不能被覆盖。子类实例变量/静态变量可以隐藏父类的实例/静态变量,总结为变量可以交叉隐藏。

    隐藏和覆盖的区别:

      被隐藏的属性,在子类被强制转换成父类后,访问的是父类中的属性。被覆盖的方法,在子类被强制转换成父类后,调用的还是子类自身的方法。因为覆盖是动态绑定,是受RTTI(run time type identification,运行时类型检查)约束的,隐藏不受RTTI约束,总结为RTTI只针对覆盖,不针对隐藏。

    特殊情况:

      1.final修饰的属性可以被隐藏,但是不能被赋值,即不能用=来赋值,网上说final属性不能被修改,这个说法不准确,因为对于引用类型的变量用final修饰后,它只是不能被指向其他对象,但是可以改它自身的值,可以用ArrayList测试,final属性可以在运行的时候进行初始化,但是不能不出现初始化语句。

      2.final修饰的方法不能被重写,可以被重载。

      3.final修饰的类不能被继承。

      4.private 方法隐式添加了final。

     

    以上就是这次面试的面试题目的一些情况。

    总结:

    1. 从面试题目来看涉及到数据库的知识很多,当然数据库的知识考察也是由简单到难得循循渐进,以此来确定你的水平。能给你开多少工资。但是当我在答题时,数据库的知识几乎全部答错了,因为在平时的sql语句中接触这些的时候相对比较少,所以才能到了这个地步。所以接下来的时间安排就要对数据库的知识进行一个回顾。
    2. java基础知识的考察,从题目看的出来考察的范围还是比较细的。所以在看java基础的知识的时候要重视理解。
    3. 框架的知识几乎没有涉及到,只是在面试的时候问了一些框架的知识。
    4. 还有一个就是对于基础知识中线程、流、集合的知识考察得比较多。
    5. 这次面试的失败,从心态到策略上来说有一些地方没做好。首先是心态上:以为随便写一写说一说就会通过的,未免有一些太轻视,所以才会在面试的时候被问死,那种强烈的反差使得自己有些乱了阵脚。策略上:以为会重视框架的知识较多,就复习框架的知识较多。但是并没有问及到框架的知识。所以,得到的信息就是基本上只会在乎你的基础知识,高深的东西压根不会在乎那么多,毕竟你的工作经验也摆在那里的。
    6. 基础知识掌握不牢是这次失利的根本所在。告诫处于没啥经验的朋友们多去看看基础知识和数据库吧。对面试成功有很大的帮助。
  • 相关阅读:
    05流程图和流程定义的操作
    04启动流程实例,任务的查询与完成
    03流程图的绘制与部署
    02数据库表的初始化方式
    01环境安装
    JavaScript基础和JavaScript内置对象:
    用手机、pid作为win电脑扩展屏
    H5新增特性之语义化标签
    盒模型
    CSS定位总结--static、relative、absolute、fixed
  • 原文地址:https://www.cnblogs.com/tyhJava/p/5572875.html
Copyright © 2011-2022 走看看