欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

面试 | 软通动力技术面

程序员文章站 2022-06-28 08:21:02
一、自我介绍1分钟(介绍自己的校园经历,项目)二、项目介绍:主要讲了书城平台,首先分析需求,主要介绍了购物车模块,要建立两个模型类:1)一个是Cart类:Cart类主要放的是商品items,总的商品数,总商品数价格;2)一个是CartItems类,主要放商品id,商品的名字,商品数量,商品单价,商品总价,map对象创建泛型为,删除操作;3)在Cart类中添加方法:因为在商品页面要进行加入购物车操作,因此要有一个addCart操作,在第一次添加的方法...

一、自我介绍1分钟(介绍自己的校园经历,项目)

二、项目介绍:

主要讲了书城平台,首先分析需求,主要介绍了购物车模块,要建立两个模型类:
1)一个是Cart类:Cart类主要放的是商品items,总的商品数,总商品数价格;
2)一个是CartItems类,主要放商品id,商品的名字,商品数量,商品单价,商品总价,map对象创建泛型为<Integer,CartItems>,删除操作;
3)在Cart类中添加方法:因为在商品页面要进行加入购物车操作,因此要有一个addCart操作,在第一次添加的方法中可以进行session创建,将后面购物车的信息存放在session域中,因此后面对session的操作都是在session域中,如果该商品已经添加进入购物车中,再次添加会对商品数量进行累加,同时对总价格进行重新单价与该商品数量进行相乘。
4)在Cart类中删除方法:map里面有一个remove()可以根据商品id对商品删除。
5)在Cart类中清空购物车方法:map里面有一个clear()可以直接将map的商品信息全部删除。
6)在Cart类中修改商品数量的方法:通过map的get方法根据商品id获取具体的商品信息,即通过id获取对应的CartItems,然后通过setCount方法来设置商品数量,同时对该商品的总价钱进行重新相乘。
后期通过struts2对程序的MVC模型进行代码优化,减去了前面的请求参数的代码和请求转发的操作,只需要html的各标签的name属性名和javabean类中有一一映射关系就可以;其次省去了反射操作根据传进来的action参数找到对应servlet中的方法进行相应的业务操作。

三、开始问java基础知识:

1.如何进行双线程操作。
notify-wait机制
2.根据user表和student表,查询user表的age>18,student表的score>80的信息。

select * from user join student on user.id=student.userId where age>18 and score>80;

3.冒泡排序:

public class BubbleSort {
        public static void bubbleSort(int[] arr){
            int temp;
            for(int i=0;i<arr.length-1;i++){
                boolean flag=true;
                for(int j=1;j<arr.length-i-1;j++){
                   if(arr[j-1]>arr[j]){
                       temp=arr[j];
                       arr[j]=arr[j-1];
                       arr[j-1]=temp;
                       flag=false;
                   }
                }
                if(flag){
                    break;
                }
            }
        }

        public static void main(String[] args){
            int[] arr=new int[]{10,13,20,15,21,43};
            BubbleSort.bubbleSort(arr);
            System.out.println(Arrays.toString(arr));
        }
}

4.讲一下抽象类和接口。
1)概念:
什么是抽象类?在面向对象的概念中,所有的对象都是通过类来描绘的,但反过来,并不是所有的类都是用来描述对象的,如果一个类中没有包含足够的信息来描述来描绘一个具体的对象,那么这样的类就叫做抽象类
接口?在java编程语言中是一种抽象类型,是抽象方法的集合。接口只是对事物和属性更高层次的抽象。对修改关闭,对扩展开发,接口是对开闭原则的一种体现。
2)相同点:
a.接口中的方法一定是抽象方法,抽象类中的方法可以是抽象方法。
b.抽象类和接口都不能定义为私有的或final的,否则就不能进行继承或实现。
c.都不能实例化,必须由其他类来继承或实现,如果当前类继承抽象类或实现了接口中的所有方法(通过重写方式),那么当前类就可以进行实例化。
不同点:
a.抽象类的修饰符是abstract ,接口的修饰符是interface;抽象类的继承是extends,接口的实现是implements;
b.抽象类中的成员变量可以当做普通变量去修改赋值操作,而接口中的变量必须定义为static final类型的常量,一经定义就不能修改赋值操作;
c.抽象类中的方法可以不是抽象方法,可以在一些非抽象方法中进行一些初始化操作,那么其子类就可以持有该属性,而接口中只能是抽象方法;同时抽象类中方法可以有静态方法,但接口中不能有静态方法。
d.完全的非抽象子类通过extends关键字继承抽象类的方法来形成非抽象子类,而通过implements关键字实现接口的方法来形成非抽象类;但是如果子类没有完全实现抽象类或接口,那么子类仍然是抽象类;
e.抽象类可以有构造器,但接口不能有构造器;
f.抽象类只能实现单继承;接口可以实现继承多接口。
应用:
抽象类:一般用于基类的创建,通过子类调用基类的方法或实现基类的方法。例如数据库的增删改查操作就可以写在抽象类中,其中还包括对数据库的连接初始化操作,便于其他子类的调用来实现对数据库的操作。
接口:a.通过接口可以实现不相关类的相同行为,而不需要了解对象所对应的具体的实现类;
b.通过接口的声明可以指明多个类需要实现的方法;
c.通过接口可以了解对象的交互界面,而不需要了解对象所对应的类。

附加:a.为什么用接口?多个不同的实现类可以重写接口的方法,从而实现类的多态,来实现不同的业务逻辑,从而降低了代码耦合度。
b.为什么接口要规定成员变量为public static final的?
首先介绍一下为什么是public static的?接口是一种高度抽象的模板,而接口中的属性也就是模板中的成员,就应当是所有实现模板的实现类的公有属性。因此定义为public static是所有实现类共有的。同时定义为static便于区别,是因为接口是多继承的,万一父级接口也存在同名的成员属性呢?因此用static还可以便于区别不同级的变量;
其次介绍一下为什么final?通过反面看,如果该属性是非static的,而方法又是abstract的,这不就自相矛盾了吗!即可以修改静态变量的值,但所有实现类的成员变量的值都改变了,这相当于又是abstract了。另一方面,接口是一种更高层次的抽象,是一种规范、功能定义的声明,所有可变的属性或方法都放在实现类中去实现,这样接口才能起到标准化、规范化的作用。因此接口中的成员变量必须定义为常量。
public static final 解释的原文作者链接
5.一个子类可以继承父类,而父类又继承父类,那么此时的子类会继承父类的父类吗?如果可以?它是怎么继承的?
不知道怎么组织语言!有知道的猿朋友可以帮我回答一下这个问题吗!谢谢了。当时我就说子类继承了父类那自然就拥有了父类的属性和方法,那父类继承父类的父类,自然当前父类就拥有了父类的属性和方法了,依次类推,子类就通过父类的间接作用就继承了父类的父类的属性和方法了。但看面试官表情估计是不对的。
6.mysql有哪些索引类型?
普通索引(不受任何限制)、唯一索引(可以用null值)、主键索引(一张表唯一的,不为空且索引唯一)、组合索引(指多个字段上创建的索引,只有在查询条件中使用了创建索引时的第一个字段,索引才会被使用)、全文索引(主要用来查找文本中的关键字,而不是直接与索引中的值相比较。fulltext索引跟其它索引大不相同,它更像是一个搜索引擎,而不是简单的where语句的参数匹配)
7.了解linux吗?如何用linux命令查询指定的文件?
如果现在某一目录下存在text.txt文件,那么可以用如下命令实现:

find -name text.txt

该命令会在整个目录树下进行来查询text.txt文件。
8.什么是面向对象的编程思想?
转载原文链接
根据面试官的角度,面试官可能想要听到的是我们对面向对象的理解,面向对象给我们带来的好处(从由来去解释),以及面向对象独有的特点(封装、继承、多态),从三个方面去解释:
1)面向对象的由来;
2)理解并解释面向对象的编程思想;
3)从面向对象的三大特征去解释;
面向对象的由来:过去是使用c语言进行面向过程的编程,但这样的编程方式更多的是按照计算机处理事务的思想来编写代码的,称为函数,不符合人类的思维方式,因此就出现了面向对象的编程思想,就是把解决问题的重点放在与解决问题相关的各个对象上。
理解并解释面向对象的编程思想: 总结一句话:万事万物皆对象。我们生活中实际存在的各种具体事物都可以看做一个对象,那么这些事物就可以抽象出来成为一个对象,通过这个对象来进行相关的操作,即面向对象。
从面向对象的三大特征去解释:可以通过女娲造人的故事来解释。女娲既然要造人,那肯定就需要有一个模板(就像java的一个学习路线,这个学习路线就是一个模板),那么女娲就按照自己的样子捏造出一个模板,那么这个模板在OOP(面向对象编程)就可以当做一个类。然后根据这个模板去造人,人在OOP中就可以当做一个对象,那么人有鼻子、耳朵、眼睛、手、脚等,这些就是这个对象的属性,这个人可以吃饭、打球、打游戏、睡觉等,这些行为就是这个对象的行为(方法),因此,一个类里面就拥有了属性和方法,对象就会对类中的属性和方法进行操作。那么吃饭是一个行为,这个外部的环境可以知道这个行为,但这个行为是通过哪些细节实现的,却没有明确显示出来,这样我就保护了内部的属性,将属性隐藏起来了,那么这种隐藏类内部属性的,暴露方法的行为就叫做封装。人肯定也有分类,那么女娲就把人分为男人和女人,他们有着共同的属性和行为,但可能某些实现细节会不同,那么这种根据相同模板实现不同细节的类的行为叫做多态。既然提到多态那肯定是必须有继承,因为子类要重写父类的方法,那么女娲为了方便和节省造人的时间,自己也繁衍了自己的孩子,那么这个孩子就是子类,这个子类就可以继承女娲的属性和行为,因此这个子类就可以拥有女娲造人的行为,这种子类继承父类属性和方法的行为叫做继承。
9.谈谈重写和重载?
重写:同一类中,不同方法的方法名相同,但方法的参数列表的参数类型不同,参数个数不同从而形成了方法的重载,即重载。
重写:发生在父类与子类之间,子类重写了父类中的需要被重写的方法,保证方法名、返回值、参数类型都必须相同,这样的行为即重写。
相同点:两者都是多态形式出现。
不同点:
1)多态的体现不同:重载是编译时行为,重写是运行时行为;
2)规则不同:
重载:a.权限修饰符:可以是任意的
b.返回值:不规定返回值类型必须一样
c.参数:参数类型不同或参数个数不同
d.异常:可以抛出任意大小的异常
e.方法:多个重载方法的方法名必须一样,不然就不是重载
重写:a.权限修饰符:子类的权限修饰符必须大于父类的权限修饰符
b.返回值:返回值类型必须与父类一致
c.参数:参数必须与父类一致
d.异常:异常不能大于父类的异常类型
e.前提:重写必须发生在父子之间,且只能是子类对父类方法的重写
重载的返回值类型的不同会产生重载吗?
不会。重载可以决定返回值类型,但返回值类型不能决定重载。
10.你有什么想了解的?
答:想问一下对我这次面试的一个评价?
面试官:还可以。(但其实我回答的太水了!逻辑也不清晰!估计不过了!基础确实还是不扎实!还得继续努力!希望对将要面试的猿朋友们一个经验!校招基础知识还是要扎实!一步一个脚印才行!我就输在基础知识不扎实!加油吧!)
11.整体面试时间:30分钟
觉得可以的话,可以点点赞!觉得写得有问题!希望大家多多在评论区提建议!

本文地址:https://blog.csdn.net/m0_50763265/article/details/110240462

相关标签: java mysql