目录
- 1.自我介绍
- 2.面对对象的几大特征?
- 3.多态的实现。
- 4.重载重写的区别?
- 5.为什么通过返回类型不能判别重载?
- 6.方法重写时的异常限制。
- 7.static修饰的方法可以重写吗?
- 8.java中的访问权限有哪些?
- 9.怎么声明数组/二维数组?
- 10.二维数组横向和纵向都是有序的,怎么判断一个元素是否在矩阵中存在?
- 11.java如何创建线程?
- 12.ThreadPollExcutor有哪些参数?参数之间有什么关系?
- 13.无界阻塞队列,out of memory时线程池的线程数为多少?
- 14.Excutors中的newFixThreadPool怎么去设计参数?
- 15.怎么用数组实现ArrayBlockingQueue?
- 16.java中的异常分了哪些?空指针异常属于哪一类,IOE异常
- 17.在finally中加了return方法。try里面有return,会以哪个return为准?
- 18.写一个简单的sql,学生成绩表,找出每门课程中的最高成绩。
1.自我介绍
大家好,我叫xx,西工大电子与通信工程专业,2021年6月份毕业,研究方向xx。我想从三个方面介绍自己:
1)学习方面: 大三时保送研究生,之后进入实验室开展项目研究。在x年时间里,先后参与了x个项目,其中x个纵向项目,x个横向项目,纵向项目主要是关于xx,横向项目主要是关于xx。这些分别对应我简历里的项目经历(1,2,3)。我本科绩点3.8,研究生绩点3.4。我XX年一次性通过大学英语四、六级考试,XX年通过托业英语考试,考试成绩XX分(满分XX分),XX年通过软件工程师/网络工程师/系统分析师考试。
2)实践方面: 曾在软件公司实习xx年时间,曾在xx当过计算机讲师,主讲xx,另外,本科时曾参加过xx比赛,并获得了xx奖。实习期间,我的最大收获是:学校学习与工作知识的衔接,深切感悟将理论应用于实践的重要性和快乐。
3)社会工作方面: 本科和研究生都担任所在班级班长/**部长,同时也在校学生会工作过。在担任班干部的日子里我具备了一定的组织、协调能力,并深深体会团队协作的重要性。
我的性格特点
是, 1.性格沉稳,2.考虑问题全面、仔细,3.做事有自己明确的想法和计划。
我的优势
是1.自己全面的综合素质;2.做事分清轻重缓急;3.喜欢总结,避免犯同样的错误。
我的座右铭
是:人因为梦想而伟大,机遇永远属于那些有准备、立即行动并能坚持到底的人!
我的 职业生涯目标是,将来有一天能带领一个团队,做出亿万网民喜爱和尊敬的软件!做一个既懂技术,又懂业务的复合型人才(非IT企业用)。 |
我的未来5年的规划是:因为我本人是学计算机的,所以希望沿着以技术为主线的路走下去。5年以后,我希望自己能够对某一个领域有比较深入的理解,成为某一领域的专家,在某一方面能独挡一面,同时也能够了解其他领域的发展动态 |
2.面对对象的几大特征?
(1)抽象:抽象包括两个方面,一是过程抽象,二是数据抽象。
在平面坐标系中包括矩形、圆形、三角形、椭圆形、五边形等等不同的图形,对所有平面图像进行抽象可以形成平面图像类,所有的图形能求面积、周长。平面图像类有求面积/求周周长的操作,但是不同种类的图形,他们求面积/周长的操作是不一样的。
平面图像类有求面积/周长的操作,没法具体实现。这个操作就可以定义抽象方法。
抽象类和具体类是相对的概念,“抽象”是一种存在思想逻辑中的概念,而“具体”是一种可见、可触摸的现实对象。简单说,“人”比“男人”更抽象,“动物”有比“人”更抽象,而“生物”有比“动物”更抽象。
普通类可以去实例化调用,抽象类不能被实例化。因为它是存在于一种概念而非具体。
声明情况下需要定义为抽象方法?
当一个类的某种操作无法具体实现时,这个操作可以定义为抽象方法
如:宠物嗷嗷叫的操作
如何定义抽象方法?
[修饰符] abstract 返回值类型 方法名 [参数列表]
即是使用abstract 修饰方法,只有方法声明部分,没有方法体
含有抽象方法的类必须定义为抽象类
(2)继承: 继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。 对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类、超类)。派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。
在java种所有类的根都是从Object继承过来的
注意
- 子类继承父类,不能继承父类的构造方法
- 父类(超类或基类)
- 子类(派生类)
- 满足继承条件:is…a
- 继承特性:在java中一个类只能直接继承一个直接的父类,也就是说类是单根性
优点:减少代码的冗余性
(3)封装:隐藏类的内部信息,不允许外部程序直接访问,而是通过方法进行操作,即现实世界可以被描绘成一 系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。
封装的操作步骤:
第一步:将属性设置为私有的private,也就是只能在本类中进行访问,
第二部:编写对应属性的方法( 赋值set )
(4) 多态性: 多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享 、代码共享的优势,很好的解决了应用程序函数同名问题
多态语法格式
1).多态的语法格式:
父类类名 引用名称 = new 子类类名();
2).当是多态时,此时引用名时只能访问父类中的属性和方法,但是优先访问子类重写后的方法
3).多态:多种形态
多个对象调用同一个方法,得到不同的结果
4).多态的满足条件:
------子类继承父类
-------子类必须重写父类的方法
-------子类类名 引用名称 = new 子类类名();
5).多态的好处
减少代码冗余度
3.多态的实现。
方法的重载和重写都是实现多态的方式,区别在于前者实现的是编译时的多态性
,而后者实现的是运行时的多态性
。
- 在同一个类中,方法名字相同,参数列表必须不同,称为方法的重载。
特点
:两同一不同,同类同一方法名,不同的参数列表。- 重写也叫做方法覆盖: 在子类中重写父类的方法,与父类中的方法名称一致、参数列表一致、返回类型一致、修饰符一致,只有方法体不一样。不能比父类被重写方法声明更多的异常(里氏代换原则)。
当是多态时,此时引用名时只能访问父类中的属性和方法,但是优先访问子类重写后的方法。
4.重载重写的区别?
方法的重载和重写都是实现多态的方式,区别在于前者实现的是编译时的多态性,而后者实现的是运行时的多态性。重载发生在一个类中,同名的方法如果有不同的参数列表(参数类型不同、参数个数不同或者二者都不同)则视为重载;重写发生在子类与父类之间,重写要求子类被重写方法与父类被重写方法有相同的返回类型,比父类被重写方法更好访问,不能比父类被重写方法声明更多的异常。
5.为什么通过返回类型不能判别重载?
方法的重载和重写都是实现多态的方式,函数的返回值只是作为函数运行之后的一个“状态”,重载对返回类型没有特殊的要求。
为啥为什么不能用返回值类型来判断方法是否重载呢?
就比如
int f(){
}
void f(){
}
在main方法中调用f方法时f();
你能判断用哪个方法吗?你都不清楚的话,那系统就更不清楚了。因此,不能使用返回值来判断方法是否重载了。
6.方法重写时的异常限制。
重写方法一定不能抛出新的编译异常或者比父类的异常更加宽泛的异常。
1.子类在重写父类的具有异常声明的方法时,要么不抛异常,要么就抛出跟父类方法相同的异常或该异常的子类。
2. 子类在重写父类的具有异常声明的方法的同时,又去实现了具有相同方法名称的接口且该接口中的方法也具有异常声明,则子类中的重写的方法,要么不抛出异常,要么抛出父类中方法声明异常与接口中方法声明的异常的交集。
7.static修饰的方法可以重写吗?
static修饰的方法不能被重写可以被继承
static修饰的方法为静态方法,可以直接使用类名.方法名进行调用,即该方法不属于某个对象属于该类。与类同生死
。
static修饰的方法可以被继承。
如果父类中有一个静态的方法,子类也有一个与其方法名,参数类型,参数个数都一样的方法,并且也有static关键字修饰,那么该子类的方法会把原来继承过来的父类的方法隐藏,而不是重写。父类引用指向子类对象,只会调用父类的方法。
8.java中的访问权限有哪些?
(1).public :最大访问控制权限,对所有的类都可见。
(2).protect :修饰的,在类内部、同一个包、子类中能访问
(3).default :包访问权限,即同一个包中的类可以可见。默认不显式指定访问控制权限时就是 default 包访问控制权限。
(4).private :最严格的访问控制权限,仅该类本身可见。
(注:访问控制修饰符可以修饰类,成员变量,方法,但是修饰类只用public和default)
9.怎么声明数组/二维数组?
1、保存一个数据,可以定义一个变量,如果保存100个数据呢?可以使用数组,
数组就是用来储存同种类型若干数据的容器
数组的定义:1)数据类型 [] 数组名 = new 数据类型[] .
2)数据类型 数组名 [] = new 数据类型[] .
eg: int [] date = new int[10];
说明:1)int数据类型表示数组中存储元素的类型
2)[]表示data是一个数组
3)data是数组名,其实就是一个变量名,数组是一种引用数据类型,data变量的类型:int []
4)new 运算符会在堆区分配一块连续的存储空间,这块连续的存储空间可以存储10个int类型的数据,把这块存储空间的引用(起始地址)保存道data数组中
5)数组本质上就是内存中一块连续的存储空间
定义数组时,[]有时也可以放在数组名的后面,如,
double data 22[] = new double[];
数组元素的访问:
通过数组索引值(下标)访问数组的每个元素
定义了数组后,数组为每个元素指定一个索引值(下标),这个索引值是从0开始的。如data数组的长度是10,它的每个元素的索引值是0–9;
在定义数组时,可以给各元素赋值,这叫数组的静态初始化
注意
:在静态初始化数组时,不需要指定数组的长度
//数组静态初始化,可简化为:int [] data6 = {1,2,3,4,5};
遍历数组时,还可以使用增强的for循环,也称foreach循环
二维数组的元素实际上存储的是一维数组的引用
2、二维数据其实就是数组中的元素是一维数组的数组。
定义二维数组的格式:
数据类型[][] 变量名 = new 数据类型[x][y];
x: 二维数组的长度
y: 二维数组中一维数组的长度
10.二维数组横向和纵向都是有序的,怎么判断一个元素是否在矩阵中存在?
1.二分查找算法