个人面试小总结之一

技术个人面试小总结之一 个人面试小总结之一基础
值传递和引用传递的区别
值传递:指在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,那么我们的实际参数不会改变
引用传递:指在调

个人面试总结之一

基础

值传递和引用传递的区别

传递值:在调用一个函数时,将实际参数的副本传递给函数,这样如果在函数中修改了参数,我们的实际参数就不会改变。

Pass-by:调用函数时,实际参数的地址直接传递给函数,所以在函数中修改参数时,也会影响我们的实际参数。

修饰符的作用与访问类型

列兵:只有这个班

默认:在同一个包下

Proptect:在同一个包下继承这个类的其他类可以

公共:全球

final修饰符

最终变量必须显示并初始化,只能赋值一次;

final修改基本类型变量时,不能重新分配该变量;

当final修改引用类型变量时,该变量不能重定向到其他对象;

最终修改的方法是最终方法,不能重写;

最后修改的类是超类,不能继承;

说说static

静态本身就意味着静态。

由static关键字修饰的方法或变量不需要依赖对象来访问,只要类被加载了,就可以通过类名去进行访问。.

可用于类、方法、代码块等。

静态方法:你可以在不依赖对象的情况下互相访问,但是没有这个关键字,因为你不依赖对象,你不能在静态方法中访问非静态成员和非静态成员方法,但是我们可以在非静态方法中访问静态资源。

静态变量:静态变量由所有对象共享,并且在内存中只有一个。非静态变量在创建对象时初始化,静态变量由所有对象共享。

当第一次加载静态代码块:类时,每个静态块将按照静态块的顺序执行,并且只执行一次。

多线程的应用场景

Servlet多线程

多线程操作文件

数据库使用多线程。

框架

SpringBoot或者SpringMVC常用注解

SpringMVC:

@Controller、@Service、@Reqository标记的类是一个SpringMVC Controller对象,检查该方法是否使用@RequestMapping注释。@RequestMapping是真正处理请求的处理器。

@RequestMapping:是一个用于处理请求地址映射的注释,可以用在类或方法上。RequestMapping注释有六个属性。

值:指定请求的实际地址。

方法:指定请求的方法类型,GET、POST、PUT、修改和删除。

消耗

Params:指定请求必须包含特定参数才能使用此方法。

标头:指定的请求必须包含一些指定的标头值。

注射豆子时使用的@Resource与@AutoWired:

自动连线:注释由ByType组装。

资源:根据别名组装

@PathVariable:把uri模板中的变量作为参数。

@RequestParam:将请求参数区域的数据映射到函数处理方法的参数。

@SessionAttributes:把值放在会话范围内,并写在类上。

@ResponseBody:用于将控制器方法返回的对象转换为格式,并将其写入响应对象的正文数据区。

@Component:总笔记,

SpringBoot

@SpringBootApplication:核心注释,用于主类,其表名为Boot application。

-@配置

-@ enable自动配置

-@组件扫描三个注释的组合

@EnableAutoConfiguration:打开启动配置,根据当前类路径下的包或类配置Spring Bean。

@配置

ion:用于定义的配置类,指出该类是bean配置的信息源,相当于xml配置文件

也可以@ImportResource注解加载xml配置文件

@ComponentScan:让boot扫描到Configuration类并把它加入到上下文

@ConfigurationProperties:将自定义的properties文件映射到实体bean中,比如config.properties文件

@Repository、Service

@RestController:是@Controller和ResponseBody的合集 (表示是控制器bean,并且是将函数的返回值直接填入Http的响应体中。

@ResponseBody:将结果直接写入Http的响应体中

@Component:泛指组件

@bean:相当于XML中的放在方法的上面,意识是产生一个bean交给spring

@AutoWired:byType方式。把配置好的Bean拿来用,完成属性、方法的组装,它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作。

@Qualifier:当有多个同一类型的bean时,可以用@qualifier(”name“)来指定具体的

@requestMapping:负责URL到Controller中的具体函数的映射,可用于类或方法上

@Transactional:可以声明事务,可以添加在类上或者方法上

@Profiles:提供了一种隔离应用程序配置的方法

SpringBoot中properties和yml的区别

Spring的IOC与AOP


Spring中AOP的应用场景与注入方式

场景:

  • 记录日志
  • 权限控制
  • 缓存优化(第一次调用查询数据库,将查询结果放入内存对象, 第二次调用, 直接从内存对象返回,不需要查询数据库)
  • 事务管理(调用方法前开启事务, 调用方法后提交关闭事务)

注入方式:

基于xml配置开发

自定义实现AOP

注解方式

SpringBoot中Bean注入的方式

  • @ComponentScan+@组件标注注解
  • @Configuration+@Bean
  • @Import 快速给容器中导入组件 id默认是全类名

集合

list和set(cotnection)区别

list可以插入多个null元素,set只允许插入一个null元素

list容器是有序的,set是无序的

list可以允许重复的对象,set不允许重复的对象

list方法常用的实现类有ArrayList、LinkedList 和 Vector。

Set方法中最流行的几个实现类是 HashSet、LinkedHashSet 以及 TreeSet

HashMap和HashTable

HaspMap与HashTable都实现了Map接口

不同点:

第一:线程安全性不同,HashMap线程不安全,HashTable中的方法都是Synchronized修饰的。

第二:key、value是否运行null。 HashMap的key与Value都可以是null,但是key只允许一个null; Hashtable的key与value都不能为null

第三:迭代器不同

第四:hash的计算方式,HashMap计算了hash值;Hashtable使用了key的hashCode方法

第五点: HashMap把Hashtable的contains方法去掉了,改成containsValue和containsKey,因为contains方法容易让人引起误解。

JVM

JVM的运行时分区空间

方法区:存储了每个类的信息(包括类的名称、方法信息、字段信息)、静态变量、常量以及编译器编译后的代码等,类加载器将 .class 文件加载到运行时数据区时就是先丢到这一块上面。

堆:和方法区同属性线程共享区域,主要放了一下存储数据,如:对象实例、数组等 JVM只有一个堆

栈:内存模型,存放的是一个个栈帧,每一个栈帧对应一个被调用的方法

本地方法栈:可以看到它的start()方法带有一个native关键字修饰,而且不存在方法体,这种用native修饰的方法就是本地方法。本地方法栈则是为执行本地方法(Native Method)服务的

JVM的GC方法

引用计数法:每个对象在创建的时候,就给这个对象绑定一个计数器。每当有一个引用指向该对象时,计数器加一;每当有一个指向它的引用被删除时,计数器减一。这样,当没有引用指向该对象时,该对象死亡,计数器为0,这时就应该对这个对象进行垃圾回收操作。

优点:简单、代价分散

缺点:不全面(容易漏掉循环引用的对象) 占用额外内存空间

标记-清除法:每个对象存储一个标记位,记录对象的状态(活着或是死亡)。分为两个阶段,一个是标记阶段,这个阶段内,为每个对象更新标记位,检查对象是否死亡;第二个阶段是清除阶段,该阶段对死亡的对象进行清除,执行 GC 操作。

优点:

相比于引用计数法,标记—清除算法中每个活着的对象的引用只需要找到一个即可,找到一个就可以判断它为活的。

缺点:判断对象是否死亡,消耗了很多时间

每个对象都要去标识检查,复杂度高

标记-整理法:在标记阶段,该算法也将所有对象标记为存活和死亡两种状态;不同的是,在第二个阶段,该算法并没有直接对死亡的对象进行清理,而是将所有存活的对象整理一下,放到另一处空间,然后把剩下的所有对象全部清除。

优点:不会像标记-清除法那样 产生大量的碎片空间

缺点:如果存活对象多,整理阶段就会执行较多复制操作,导致算法效率低。

可达性分析:通过一种GC ROOT的对象(虚拟机栈(栈帧中的本地变量表)中引用的对象、方法区中类静态属性引用的对象、方法区中常量引用的对象、本地方法栈中JNI(即一般说的Native方法)引用的对象)来判断,如果有一条链能够到达GC ROOT就说明,对象还在被引用,不能到达GC ROOT就说明对象已经不再被引用,可以回收


JDK1.8的什么。。


MyByatis

${ } 和#{ }

#是预编译处理、是占位符

eg:select id,name,age from student where id =#{id},当前端把id值1,传入到后台的时候,就相当于 select id,name,age from student where id ='1'.

$字符串替换、是拼接符。

eg:select id,name,age from student where id =${id},当前端把id值1,传入到后台的时候,就相当于 select id,name,age from student where id = 1.

{}的变量替换是发生在DBMS中的,变量替换后,#{}对应的变量自动加上单引号

${}的变量替换是在DBMS之外,替换后,对应的变量不会加上单引号。

#可以很大程度上防止sql注入

Mybatis如何一次性插入一万条数据

循环插入

foreach插入

使用ExecutorType 分批插入 (批处理)

//我们使用的是springboot,sqlSessionTemplate是可以自己注入的
@Autowired
private SqlSessionTemplate sqlSessionTemplate;
public void insertExcelData(ListUser list) {
    //如果自动提交设置为true,将无法控制提交的条数,改为最后统一提交,可能导致内存溢出
    SqlSession session = sqlSessionTemplate.getSqlSessionFactory().openSession(ExecutorType.BATCH, false);
    //不自动提交
    try {
        UserDao userDao = session.getMapper(UserDao.class);
        for (int i = 0; i  list.size(); i++) {
            userDao.insert(list.get(i));
            if (i % 400 == 0 || i == list.size() - 1) {
                //手动每400条提交一次,提交后无法回滚
                session.commit();
                //清理缓存,防止溢出
                session.clearCache();
            }
        }
    } catch (Exception e) {
        //没有提交的数据可以回滚
        session.rollback();
    } finally {
        session.close();
    }
}
userDao.insert(User user);
insert  parameterType="com.echo.UserPo"
    insert into USER
    (id
    if test="age != null"
        ,age
    /if
    if test="name != null"
        ,name
    /if
    if test="email != null"
        ,email
    /if
    )
    values (
    sys_guid()
    if test="age != null"
        ,#{age}
    /if
    if test="name != null"
        ,#{name}
    /if
    if test="email != null"
        ,#{email}
    /if)
/insert

MyBati中select from where || group by || oderBy 的执行顺序

我们平常写的语句:

1. SELECT 
2. DISTINCT select_list
3. FROM left_table
4. join_type JOIN right_table
5. ON join_condition
6. WHERE where_condition
7. GROUP BY group_by_list
8. HAVING having_condition
9. ORDER BY order_by_condition
10.LIMIT limit_number

但是Mybatis的执行条件是

FROM
表名 # 笛卡尔积
ON
筛选条件 # 对笛卡尔积的虚表进行筛选
JOIN join, left join, right join... 
join表 # 指定join,用于添加数据到on之后的虚表中,例如left join会将左表的剩余数据添加到虚表中
WHERE
where条件 # 对上述虚表进行筛选
GROUP BY
分组条件 # 分组
SUM()等聚合函数 # 用于having子句进行判断,在书写上这类聚合函数是写在having判断里面的
HAVING
分组筛选 # 对分组后的结果进行聚合筛选
SELECT
返回数据列表 # 返回的单列必须在group by子句中,聚合函数除外
DISTINCT
# 数据除重
ORDER BY
排序条件 # 排序
LIMIT
行数限制

数据库

开启事务的命令

begin start transaction

事务

ACID原则

脏读就是指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据

不可重复读:前后多次读取,数据内容不一致

幻读:前后多次读取,数据总量不一致

隔离级别

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/134420.html

(0)

相关推荐

  • 增加cacti监控对象时导致数据库出问题怎么办

    技术增加cacti监控对象时导致数据库出问题怎么办这篇文章主要介绍增加cacti监控对象时导致数据库出问题怎么办,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!生产环境:数据库:mysql 5.5.

    攻略 2021年11月23日
  • java中基于线层池Spring-quartz如何实现动态增删除改和暂停恢复定时任务

    技术java中基于线层池Spring-quartz如何实现动态增删除改和暂停恢复定时任务这篇文章主要讲解了“java中基于线层池Spring-quartz如何实现动态增删除改和暂停恢复定时任务”,文中的讲解内容简单清晰,

    攻略 2021年11月15日
  • 二建考试要求,二级建造师报考的基本要求

    技术二建考试要求,二级建造师报考的基本要求二级建造师报考条件二级建造师考试实行全国统一大纲,各省二建考试要求、自治区、直辖市命题并组织考试的制度,所以报考条件各地也会存在些许的区别,主要都是学历和工作经验等方面的区别,例

    生活 2021年10月22日
  • Bytom如何使用PAT树

    技术Bytom如何用PAT树本篇内容介绍了“Bytom如何用PAT树”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!为什么

    2021年12月20日
  • nebulagraph存储什么数据(nebula graph)

    技术图数据库Nebula Graph访问控制实现原理是什么这期内容当中小编将会给大家带来有关图数据库Nebula Graph访问控制实现原理是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有

    攻略 2021年12月18日
  • 动态初始化和静态初始化的区别(如何解决项目启动时初始化资源)

    技术中项目启动时实现初始化方法的加载参数是什么中项目启动时实现初始化方法的加载参数是什么,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。spr

    攻略 2021年12月21日