某小厂面试
1.spring ioc aop
IOC(Inversion of Control)是一种设计原则,它将原本由程序员手动创建和管理的对象交给Spring容器来管理。Spring容器充当对象工厂的角色,负责对象的创建和依赖关系的管理。通过IOC,当我们需要使用对象时,只需从容器中获取即可。
实现IOC的方式之一是依赖注入(Dependency Injection)。依赖注入可以通过以下三种方法来实现:
- 注解注入:使用注解(如@Autowired、@Resource)来标注需要注入的依赖对象,Spring容器会根据注解信息自动完成对象的创建和注入。
- Setter注入:通过为依赖对象提供对应的setter方法,在XML配置或者注解中配置依赖关系,Spring容器在创建对象时会自动调用setter方法来完成依赖注入。
- 构造方法注入:通过在构造方法中声明依赖参数,Spring容器会根据构造方法的参数信息来创建对象并完成依赖注入。
AOP(Aspect-Oriented Programming)是一种编程范式,它允许在程序的某个特定点(切入点)插入非业务性的代码,比如日志记录等。这些代码被称为切面(Aspect),可以通过AOP来实现。
2.arraylist和linkedlist哪个查询快
ArrayList和LinkedList在查询、删除和插入操作上具有不同的性能特点。
- 查询:ArrayList的查询速度较快,因为它内部使用数组实现,可以通过索引直接访问元素,时间复杂度为O(1)。而LinkedList需要从头或尾开始遍历链表,直到找到目标元素,时间复杂度为O(n)。
- 删除和插入:LinkedList在删除和插入操作上比ArrayList更快。当需要删除或插入元素时,ArrayList需要移动其他元素以保持连续性,导致时间复杂度为O(n)。而LinkedList只需要更改相邻节点的指针,时间复杂度为O(1)。特别是在链表的首尾操作上,LinkedList表现更为突出。
3.java基本数据类型
基本数据类型指的是Java语言中的基本数据类型,包括整型、浮点型、布尔型和字符型。以下是Java中的基本数据类型:
- 整型:
- int:用于表示整数,占用4个字节。
- byte:1个字节,范围为-128到12
- long:用于表示长整数,占用8个字节。
- short:用于表示短整数,占用2个字节。
- 浮点型:
- float:用于表示单精度浮点数,占用4个字节。
- double:用于表示双精度浮点数,占用8个字节。
- 布尔型:
- boolean:用于表示逻辑值,只有两个取值:true和false。
- 字符型:
- char:用于表示单个字符,占用2个字节。
4.自动装箱拆箱
自动装箱就是将基本数据类型用对应的引用数据类型封装起来
比如:
int a=1;
Interge w=a;
自动拆箱就是指将包装类对象自动转换为对应的基本数据类型。
比如:
Interge a=1;
int w=a;
5.关系型数据库用过吗
用过,比如mysql,sqlserver
6.mysql连接方式
- JDBC连接:使用Java数据库连接(JDBC)API通过驱动程序连接到MySQL数据库,导入库,在配置文件中配置url,username,password。
- 命令行连接:使用MySQL命令行客户端通过命令行界面连接到MySQL数据库,mysql -u -p,username为主机名或者主机的IP地址。
- 图形化工具连接:使用图形化工具如Navicat Premium 15等连接到MySQL数据库。
- 编程语言连接:通过编程语言的MySQL连接库(如Python的MySQLdb、PHP的mysqli扩展等)连接到MySQL数据库。
7.内连接和外连接
- 内连接:内连接根据两个或多个表之间的匹配条件,返回同时在这些表中存在的行。只有满足连接条件的行才会被返回,其他行将被过滤掉。
- 外连接:外连接根据连接条件,返回左表(左外连接)或右表(右外连接)中的所有行,同时根据连接条件匹配的行将被返回。如果没有匹配的行,将使用NULL值填充缺失的列。
将使用一个名为
Employees
的表和一个名为Departments
的表来演示。
Employees
表包含员工的信息,具有以下列:
- EmployeeID: 员工ID
- EmployeeName: 员工姓名
- DepartmentID: 所属部门ID
下面是
Employees
表的示例数据:
EmployeeID EmployeeName DepartmentID 1 John 1 2 Mary 2 3 David 1 4 Lisa 3
Departments
表包含部门的信息,具有以下列:
- DepartmentID: 部门ID
- DepartmentName: 部门名称
下面是
Departments
表的示例数据:
DepartmentID DepartmentName 1 Sales 2 Marketing 3 Finance 4 HR 现在,我们可以使用内连接和外连接来获取不同的结果:
内连接(Inner Join):
内连接会返回同时存在于两个表中的匹配行。示例查询:
SELECT Employees.EmployeeName, Departments.DepartmentName FROM Employees INNER JOIN Departments ON Employees.DepartmentID = Departments.DepartmentID;
查询结果:
EmployeeName DepartmentName John Sales Mary Marketing David Sales Lisa Finance 上述结果显示了员工的姓名和他们所属的部门名称,仅包括存在于
Employees
表和Departments
表中的匹配行。左外连接(Left Outer Join):
左外连接会返回所有的左表行,以及与左表匹配的右表行。如果右表中没有匹配的行,则使用 NULL 值填充右表的列。示例查询:
SELECT Employees.EmployeeName, Departments.DepartmentName FROM Employees LEFT JOIN Departments ON Employees.DepartmentID = Departments.DepartmentID;
查询结果:
EmployeeName DepartmentName John Sales Mary Marketing David Sales Lisa Finance 注意,左外连接的查询结果与内连接的结果相同。这是因为在这个示例中,所有的员工都有所属的部门,没有员工没有部门。
右外连接(Right Outer Join):
右外连接会返回所有的右表行,以及与右表匹配的左表行。如果左表中没有匹配的行,则使用 NULL 值填充左表的列。示例查询:
SELECT Employees.EmployeeName, Departments.DepartmentName FROM Employees RIGHT JOIN Departments ON Employees.DepartmentID = Departments.DepartmentID;
查询结果:
EmployeeName DepartmentName John Sales Mary Marketing David Sales NULL HR 上述结果显示了部门的名称以及与之匹配的员工姓名。注意到最后一行中的员工姓名为 NULL,这是因为 “HR” 部门在
Employees
表中没有匹配的员工。
8.主键和外键
- 主键:主键是用于唯一标识表中每一行数据的列或列组合。它具有唯一性和非空性约束,用于确保每一行都有唯一的标识,并且不允许为空值。主键可以帮助在表中快速查找和识别特定的行。
- 外键:外键是表中的一个列,它创建了与另一个表中的主键之间的关联。外键用于建立表之间的关系,它指向其他表中的主键,用于实现表之间的引用完整性。外键可以用于实现表之间的关联查询和数据一致性。