# 实习总结

学号: 202031061501

姓名:王帅

专业:软件工程 2020 级 7 班

# 前端实习总结

第一次实习学习的是 vue 语言及其他前端知识,这是我第一次接触这方面的内容,所以我觉得很有收获。

首先,我了解了 vue 的基本概念和用法,比如数据绑定,指令,组件,生命周期等。我觉得 vue 是一个很灵活和强大的框架,它可以让我更方便地开发动态和交互的网页。我也学会了用 vue-cli 来创建和管理项目,用 webpack 来打包和优化代码,用 eslint 来检查和规范代码风格。

除此之外我还学习了 vuex 和 router 这两个重要的插件,它们可以让我更好地管理应用的状态和路由。我知道了 vuex 是一个集中式的状态管理工具,它可以让我在不同的组件之间共享数据和状态,而不用担心数据的同步问题。我也知道了 router 是一个路由管理工具,它可以让我根据不同的 url 来显示不同的组件,实现单页面应用的效果。

最后,我学习了多组件开发的方法和技巧,比如父子组件通信,组件之间的事件传递,组件的复用和封装等。我觉得多组件开发是 vue 的一个核心特点,它可以让我把复杂的页面分解成多个简单的组件,提高代码的可读性和可维护性。我也尝试了用一些第三方的组件库,比如 element-ui 和 vant-ui,来提升我的开发效率和界面美观度。

在学习过程中,我也遇到了一些问题和困难,比如:

  • 当我在写购物车功能的时候,我发现如果直接修改 vuex 中的状态,会导致页面不更新。后来我查了资料,才知道 vuex 中的状态必须通过 mutation 来修改,才能触发视图的更新。
  • 当我在使用 router 来实现导航栏高亮的时候,我发现如果直接用 router-link 标签来包裹导航项,会导致整个导航项都变成链接。后来我找到了一个解决办法,就是用 tag 属性来指定 router-link 渲染成什么标签。
  • 当我在做 CSS 布局的时候,我发现自己对 flex 布局还不够熟练,有时候会搞不清楚主轴和交叉轴,对齐方式和排列方式。后来我多看了一些教程和示例,才逐渐掌握了 flex 布局的原理和用法。

总之,这次实习让我学到了很多前端开发的知识和技能,也让我对前端开发有了更深的兴趣和热情。我觉得前端开发是一个很有趣和有挑战性的领域,它可以让我把自己的想法和创意变成可见可感的网页。我希望以后能够继续学习更多的前端知识,并且能够做出更好更有逻辑的网页。

# 后端实习总结

第二次实习学习的是以 springboot2, mybatisplus, druid, jdbc 为主的后端知识。这门课程让我对后端开发有了更深入的了解,也让我收获了很多实践经验。

首先,我学习了 springboot2 的基本概念和使用方法。springboot2 是一个基于 spring 框架的快速开发工具,它可以帮助我们快速搭建和运行一个 web 应用,而不需要配置太多的 xml 文件。springboot2 的核心是自动配置,它会根据我们引入的依赖和注解,自动配置出合适的 bean 和组件。例如,当我引入了 spring-boot-starter-web 依赖,就可以使用 @RestController 注解来定义一个控制器类,它会自动将返回值转换为 json 格式,并映射到相应的 url 上。这样,我就可以很方便地编写 restful 风格的接口,提供给前端调用。

其次,我学习了 jdbc 的原理和使用方法。jdbc 是 java 数据库连接的标准接口,它定义了一些通用的方法和对象,如 Connection, Statement, ResultSet 等,来让我们与数据库进行交互。当我使用 jdbc 时,需要先加载驱动类,然后通过 DriverManager 获取数据库连接,然后通过 Statement 或 PreparedStatement 执行 sql 语句,并通过 ResultSet 获取查询结果。虽然 jdbc 比较底层和原始,但是它也有一些优点,比如可以直接执行任何 sql 语句,并且可以更好地控制事务和批处理。

之后,我学习了 mybatisplus 和 druid 的用法。mybatisplus 是一个基于 mybatis 的持久层框架,它可以让我们更简单地操作数据库,而不需要写太多的 sql 语句。mybatisplus 提供了一些通用的方法,如 save, update, remove, list 等,可以直接对实体类进行增删改查。同时,它也支持 lambda 表达式和 wrapper 条件构造器,可以灵活地构建复杂的查询条件。druid 是一个数据库连接池组件,它可以管理数据库连接的创建、释放、监控等功能。当我使用 druid 时,只需要在 application.properties 文件中配置一些基本的参数,如 url, username, password 等,就可以自动创建一个 druid 数据源,并注入到 mybatisplus 中。这样,我就可以通过 mybatisplus 来获取数据库连接,并执行 sql 操作。

最后,我学习了 redis 的概念和使用场景。redis 是一个高性能的内存数据库,它可以存储各种类型的数据结构,如字符串、列表、集合、哈希、有序集合等,并提供丰富的操作命令。redis 可以作为缓存中间件来提高系统的性能和并发能力。当我在开发购物系统后端时,我遇到了一个问题:由于商品信息经常变化,每次查询都要从数据库中获取最新的数据,这样会导致查询时间长,并且增加数据库的压力。为了解决这个问题,我引入了 redis 作为缓存层,在第一次查询商品信息时,将结果存储到 redis 中,并设置一个过期时间。当下次查询时,先从 redis 中获取数据,如果存在且未过期,则直接返回;如果不存在或已过期,则从数据库中获取数据,并更新到 redis 中。这样就可以大大减少数据库的访问次数,并且提高查询速度。

通过这门实习课程,我不仅学习了很多后端知识,而且也锻炼了我的动手能力和解决问题的能力。我觉得这对我以后的学习和工作都有很大的帮助。我也感谢老师和同学们的指导和支持,让我在这个过程中收获了很多。提升了独立解决问题的能力。

# 模拟面试总结

第三次实习在寒假,完成了一次模拟面试的实习,感觉收获很大。我在实习中遇到了很多扎实的问题,也学习了很多后端开发的知识。我想在这里和大家分享一下我的实习总结。

模拟面试是一个很好的学习方式,它可以让我提前感受到真实的面试场景,也可以让我发现自己的不足和需要改进的地方。我在模拟面试中被问到了很多问题,有些我能回答得很好,有些我就比较吃力。比如,面试官问我 NULL 可不可以为 hashmap 的 key 和 value,我就答得很流畅,因为我知道 hashmap 是基于散列函数实现的,它可以接受任何对象作为 key 和 value,只要它们实现了 hashCode 和 equals 方法。而 NULL 是一个特殊的对象,它没有任何属性和方法,但是它也有自己的 hashCode 值,就是 0,所以它可以作为 hashmap 的 key 和 value,但是要注意一些细节,比如如果 hashmap 中有多个 NULL 作为 key 或 value,那么它们会被视为同一个对象,只会存储一次。

另外一个问题是抽象类与接口的区别,这个问题我就回答得不太好,因为我对这两个概念还不太熟悉。我只知道抽象类和接口都是一种抽象的类型,它们都不能被实例化,只能被继承或实现。但是它们之间也有一些区别,比如抽象类可以有自己的成员变量和方法,而接口只能有常量和抽象方法;抽象类可以有构造器,而接口不能有;抽象类只能被单继承,而接口可以被多实现;抽象类可以实现接口,而接口不能继承抽象类。这些区别其实反映了它们在设计上的不同目的,抽象类是为了提供一种公共的父类,定义一些共性的属性和行为,让子类继承并扩展;而接口是为了提供一种契约或规范,定义一些必须实现的方法,让实现类遵循并具体化。

还有一个问题是面向对象的特征,这个问题我觉得还可以回答,因为我对面向对象有一定的理解。我认为面向对象有三个主要的特征:封装、继承和多态。封装就是将数据和操作数据的方法封装在一个类中,对外提供简单的接口,隐藏内部的复杂性和细节。这样可以保证数据的安全性和一致性,也可以提高代码的可读性和可维护性。继承就是让一个类从另一个类派生出来,继承其属性和方法,并且可以添加新的属性和方法或者重写父类的方法。这样可以实现代码的复用和扩展,也可以体现出类之间的层次关系和逻辑关系。多态就是让一个对象在不同的情境下表现出不同的行为或状态。这样可以增加代码的灵活性和通用性,也可以实现动态绑定和运行时多态。

最后一个问题是 JDK 动态链接和 cglib 动态链接的区别以及原理。这个问题我前几天正好有所涉及,JDK 动态代理和 CGLib 动态代理是两种常用的动态代理实现方式。它们的主要区别在于实现原理和适用场景。JDK 动态代理是基于接口实现的,它通过实现 InvocationHandler 接口创建自己的调用处理器,然后通过为 Proxy 类指定 ClassLoader 对象和一组 interface 来创建动态代理。JDK 动态代理只能为接口创建代理实例,因此对于没有通过接口定义业务方法的类,无法创建动态代理实例。CGLib 动态代理则是通过继承方式实现代理。它是一个基于 ASM 的字节码生成库,允许我们在运行时对字节码进行修改和动态生成。CGLib 通过继承方式实现代理,在子类中采用方法拦截的技术拦截所有父类方法的调用并顺势织入横切逻辑。

总的来说,这次模拟面试让我感受到了自己的优势和劣势,也让我对后端开发有了更深的认识和兴趣。我觉得这是一个很有价值的实习,它让我学到了很多知识,也锻炼了我的思维和表达能力。我希望以后能有更多这样的机会,让我不断地进步和成长。