发表于: 2019-11-22 23:54:11

1 1163


由于maven 运行test一直有问题,(可以正常下载相关的包,可以运行clean、 install,但不能test)

不知道怎么解决所以准备先做插入一百万条数据,刚开始准备使用调用存储过程插入,由于建立了两个表,表结构比较复杂,

调用存储过程插入数据超过半个小时还没有完成,于是停止了操作,准备使用Java程序插入

搜索之后发现是要去mysql的配置文件里修改max_allowed_packet的值,修改以后发现mysql无法正常启动,去查看mysql日志没有看懂,不知道怎么解决,(mysql无法启动,手动win的管理—重启mysql服务也不行),最后只好重装mysql(不知道怎么还原mysql的配置文件)


深度思考

1.Mybatis有哪些常用标签?怎么使用标签来完成动态查询?

if  choose(when、otherwise) trim(where、set) foreach等标签

!--动态查询sql 示例-->
<select id="getWorkerList_whereIf" parameterType="Worker" resultMap="WorkerMap">
    select * from Worker
    <where>
        <if test="id!=null and id!=''">and id_=#{id}</if>
        <if test="name!=null and name!=''">and name_ like "%"#{name}"%"</if>
        <if test="sex!=null and sex!=''">and sex_=#{sex}</if>
        <if test="job!=null and job!=''">and job_=#{job}</if>
        <if test="hobby!=null and hobby!=''">and hobby_=#{hobby}</if>
    </where>
2.什么叫反射?反射的坏处是什么?有哪些反射的应用场景?

java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能调用它的任意一个方法和属性;这种动态获取信息以及动态调用对象的方法的功能称为java语言的反射机制。

优点:运行期类型的判断,动态加载类,提高代码灵活度。

缺点:性能瓶颈:反射相当于一系列解释操作,通知 JVM 要做的事情,性能比直接的java代码要慢很多。

反射的应用场景

反射是框架设计的灵魂。

在我们平时的项目开发过程中,基本上很少会直接使用到反射机制,但这不能说明反射机制没有用,实际上有很多设计、开发都与反射机制有关,例如模块化的开发,通过反射去调用对应的字节码;动态代理设计模式也采用了反射机制,还有我们日常使用的 Spring/Hibernate 等框架也大量使用到了反射机制。

举例:

①我们在使用JDBC连接数据库时使用Class.forName()通过反射加载数据库的驱动程序;

②Spring框架也用到很多反射机制,最经典的就是xml的配置模式。

Spring 通过 XML 配置模式装载 Bean 的过程:

1) 将程序内所有 XML 或 Properties 配置文件加载入内存中;

2)Java类里面解析xml或properties里面的内容,得到对应实体类的字节码字符串以及相关的属性信息;

3)使用反射机制,根据这个字符串获得某个类的Class实例;

4)动态配置实例的属性。

3.什么是AOP,适用于哪些场景,AOP的实现方案有哪些?

AOP:Aspect-OrientedProgramming,面向切面编程

是OOP(Object-Oriented Programing,面向对象编程)的补充和完善,OOP引入封装、继承和多态性等概念来建立一种对象层次结构,用以模拟公共行为的一个集合。

OOP定义从上到下的关系,aop定义了从左到右的关系,aop对原有代码侵入性小,也提高了代码复用率。

AOP把软件系统分为两个部分:核心关注点和横切关注点。业务处理的主要流程是核心关注点,与之关系不大的部分是横切关注点。横切关注点的一个特点是,他们经常发生在核心关注点的多处,而各处都基本相似。比如权限认证、日志、事务处理。Aop 的作用在于分离系统中的各种关注点,将核心关注点和横切关注点分离开来。正如Avanade公司的高级方案构架师Adam Magee所说,AOP的核心思想就是“将应用程序中的商业逻辑同对其提供支持的通用服务进行分离。”

实现AOP的技术,主要分为两大类:

一是采用动态代理技术,利用截取消息的方式,对该消息进行装饰,以取代原有对象行为的执行;

动态代理:

jdk :对实现接口的目标类生成代理类

cglib:对无实现接口的目标类生成代理类(相同父类)

二是采用静态织入的方式,引入特定的语法创建“方面”,从而使得编译器可以在编译期间织入有关“方面”的代码。

4.Map,List,Array,Set之间的关系是什么,分别适用于哪些场景,集合大家族还有哪些常见的类?

关系

Collection

--List:以特定顺序存储

--ArrayList(可变数组)、LinkList(链表)、Vector(线程安全可变数组)

--Set:不能包含重复的元素

--HashSet(哈希set,)、TreeSet(底层是树,有序)

--Map(键不重复,值可以重复)

--HashMap、HashTable(线程安全)、TreeMap

List:List接口是有序的,会精确的将元素插入到指定的位置,和下面的Set接口不同,List接口允许有相同元素

ArrayList:实现可变大小的数组,允许所有的元素,不是同步的,也就是没有同步方法

LinkList:允许null元素,通常在首部或者尾部操作,所以常被使用做堆栈(stack)、队列(queue)和双向队列(deque)

Vector:类似于ArrayList,但Vector是同步的,Stack继承自Vector

Set:是一种不包含重复元素的Collection接口

HashSet:不能有重复元素,底层是使用HashMap来实现的

Map:此接口实现的Key到Value的映射,一个Map中不能包含相同的Key,每个Key只能映射一个Value

   HashTable:实现了一个Key-Value的哈希表,每一个非null元素都可作为Key或者Value,HashTable是同步的

   HashMap:和HashTable的不同之处是,非同步的,且允许null元素的存在


今天完成的事情:

没有完成的事情,maven test失败,插入百万数据失败,但收获了一些排错技能

遇到的问题:

Java代码插入数据报错

去修改mysql配置文件后mysql无法启动,不知道怎么还原

解决办法:没有找到解决办法,明天再试

今天的收获:

学会去如何去看mysql的日志,但没有看懂,对深度思考的相关问题进行了思考,

明天要做的事情:

完成debug 调试,完成jdbc curd,完成mvn test完成

总结:感觉今天不在状态,浪费了很多时间另外入学时间快到了,准备入学修真院




返回列表 返回列表
评论

    分享到