【实习记录】第2周 2023.07.03-2023.07.07

实习记录:

1. Kafka【入门】就这一篇! Kafka【入门】就这一篇! - 知乎

2. 开发工具都应放到英文的、没有空格的目录下;

        IDEA的import:从Eclipse开发的项目用import;

        IDEA的open:之前用IDEA打开过的项目

3. mvnrepository(Maven中常用的依赖): https://mvnrepository.com/search?q=mysql

4. Spring项目初始化Spring Initializr: Spring Initializr

5. Spring全家桶:Spring framework、Spring Boot、Spring Cloud、Spring Cloud Data Flow

6.启动类中的注解@SpringBootApplication中包含了@SpringBootConfiguration和@EnableAutoConfiguration注解,使得在启动时可以自动配置,会扫描启动类(配置类)所在的包下的文件和子包的所有文件,然后自动装配为bean(Spring容器管理的对象)。但是bean上有@Controller、@Service、@Repository、@Configuration、@Component(前面三个也是因为由它组成才会被扫描)才会被扫描。

7. Spring framework是所有Spring组件的基石;

        Spring容器(context)是自动创建的;

        成员变量、set方法,构造器,都可以应用@Autowired注解;

        @Bean 可以装配任何Bean(第三方或者自定义的bean);

        @Qualifier用于声明Bean的名称,既能引用Bean的自定义名称也能引用默认名称的bean;

8. Spring MVC的核心组件是dispatcherServlet

        Thymeleaf是Web开发模板引擎,生成动态的HTML;

9.

【实习记录】第2周 2023.07.03-2023.07.07_第1张图片

10.

【实习记录】第2周 2023.07.03-2023.07.07_第2张图片

11. Spring MVC底层原理:Servlet引擎(例如Tomcat),首先根据路由分发请求到controller,然后controller处理请求并创建model,然后将处理好的model(动态数据)返回给front controller (DispatcherServlet),然后将model传给View template(存放静态页面),并生成动态html(model中动态数据替换View中符号)返回给dispatcherServlet,再返回给请求发送端。

【实习记录】第2周 2023.07.03-2023.07.07_第3张图片

12. application.properties是配置文件。 eg: server.port=8900

【实习记录】第2周 2023.07.03-2023.07.07_第4张图片

13. get请求获取参数的两种方式:

1) ?code=123; request.getParameter(“code”)   2)/student/{id}, @PathVariable("id")

14. GET请求也可以发送数据(实现post的功能),但是get请求的参数是放在url里的(是暴露的),而且路径长度有限制,所以提交数据的时候最好还是使用POST方法。

15. MyBatis的核心组件sqlSession

【实习记录】第2周 2023.07.03-2023.07.07_第5张图片

16. 封装Page组件:

        属性有current,limit,rows(数据总行数),index(查询路径),方法有getFrom,getTo,getTotal(总页数)getOffset(数据起始行数)

17. 状态码

        以2开头的都是成功;200:请求成功

        以3开头的代表重定向;301代表永久性转移(比如网站因为某种原因需要移除掉,然后要到新的地址访问,是永久性)

        302代表暂时性转移(比如当一个网站或者网页24-48小时内临时移动到一个新的位置,这时候就要进行302跳转)

        302:Found(删除之后没有了页面,则返回建议重定向一个网址);或者注册完跳转到登录页面,也可以用重定向。

【实习记录】第2周 2023.07.03-2023.07.07_第6张图片

        以4开头的都是客户端响应错误,404:Not Found(地址路径写错,超链接写错,请求路径写错)

        以5开头的是服务端响应错误,代表服务器接收到了客户端的请求,但是在处理过程中发生了问题,所以遇到这种问题一般要去检查服务端的问题。502:Bad Gateway

18. 断点调试:F8执行下一行(F7进入之后,再按F8为跳出该方法)、F7 进入该方法内部、F9 执行到下一个断点为止。

        客户端(浏览器)也可以打断点调试,F12->source(源代码)->找到js,打断点->debug(step over、step into、step out)->选中某个元素,右键加入watches,可以看到这个元素的值的变化。

19. logback日志框架,等级有trace, debug, info, warn, error。从左到右,等级越高,打印的信息越少,开发时可以用debug级别,上线后可以用info或者warn级别。

        打印日志到文件,在properties文件里进行文件目录配置

        企业级项目中,日志十分重要。可以info、warn、error分别存在不同的文件中,当一个文件大小超过5M时,再创建一个新文件来存储。(logger-spring.xml配置文件,文件名不能改动,且应该在resources根目录,这时SpringBoot会自动检测到)

        最好的写法(使用占位符)

        Object entry = new SomeObject();

        logger.debug("The entry is {}.", entry);

        logger.debug("The new entry is {}. It replaces {}.", entry, oldEntry);

20. LoggerFactory和BeanFactory都使用到了工厂模式

21. 分布式版本管理工具Git,远程仓库和本地仓库

22. Git命令

        cd 到项目路径

        git init

        git status  (红的为只在本地,不在本地仓库)

        git add *

        git commit –m ‘介绍’ (添加到本地仓库)

        ssh-keygen –t rsa –C “[email protected]”   ;  把id_rsa.pub生成的private key加入到github的ssh中

        github创建仓库community

        git remote add origin https://github.com/Wang-Lei-2020/community.git

        git push –u origin master  ; 输入github的账号密码  (添加到远程仓库)

23. 注册账号的逻辑

        注册账号(判断用户名和邮件是否已被注册,密码+salt后再进行md5加密,生成激活码,发送邮件),用户在邮件中点击激活地址后(get方法从路由中读取参数),用户才可以登录。

24. htttp是无状态的,有会话的

        两次http请求之间是没有任何关系的,使用cookiessession可以创建有状态的会话(解决业务连续性问题)。

        cookies是服务器发送到用户浏览器并保存在浏览器的一小块数据,浏览器下次发送请求的时候会自动携带cookies并发送给服务器。

        cookies存在客户端,可以被更改,是不安全的,不能存储隐私信息;另外每次发请求的时候都会带有cookies,会占用流量,对性能有一些影响。

25. cookie是http标准,session是JavaEE标准。

        session存放在服务端的内存中更安全,但同时增加了服务端的内存压力。

        浏览器向服务器发送请求,服务器创建session并生成对应的cookie(之后浏览器通过发送cookie来确定服务器中的哪一个session),并返回给浏览器cookie(sessionId),之后浏览器每次请求都携带cookie(sessionId),浏览器再根据sessionId查找对应的session。

        session可以存任何数据(也可以存很多数据,因为只是保存在服务器,不会传输给浏览器),而cookie只能存字符串。

26. 在如今分布式的场景下,session逐渐用得少了。

        第一次请求,通过nginx负载均衡,将请求交给了服务器1处理,这样这个session就存储在了1里面,第二次请求可能会通过nginx转发到服务器3,这时3里面没有这个session,所以就会创建一个新的session,导致之前存储在服务器1上的session数据不可用。

解决方案

        1)粘性session:配置nginx,根据请求ip来确定将请求分配给哪一个服务器,这样同一个ip的所有请求只会由一个服务器处理。但这样的话就不是负载均衡了。

        2)同步session:将session同步给每一个服务器,这样哪一个服务器处理这个请求的时候都有对应的session。缺点是增加了服务器之间的耦合程度,,也存储了大量的冗余数据。

        3)共享session:有一个服务器专门存储session,每次处理请求的服务器都向session服务器访问数据。缺点是session服务器是单点的,挂掉之后正给系统都会不能运行;而将session服务器变为集群,就又和同步session差不多了(session集群之间还得共享)。

        4)Redis + cookie:能存到cookie的数据就存到cookie,不能存的就存到数据库集群中(其中关系型数据库的数据存储在硬盘里,读写性能差一点;所以采用Redis数据库存储,存储在内存中,读写速度很快)

27. 后端主动向前端发送消息:1. websocket(较复杂) 2. server—sent event

28. 元注解(注解的注解):@Target(ElementType.TYPE)(自定义的注解只能用于指定的类型)  @Retention(RetentionPolicy.RUNTIME)(在程序运行时,也能够获取到这些注解)      @Documented、@Inherited、@Repeatable(允许一个注解可以被使用一次或者多次(Java 8))

        Java注解详解和自定义注解实战,用代码讲解

29. AOP:Aspect就是找茬(pointcut)揍你(target)一顿(advice),一群欠揍的的人(join point)

        AOP解释:

        细说Spring——AOP详解(AOP概览)

        10分钟入门SpringAOP

日报:

2023.07.03

1. 看kafaka相关文章

2. 看牛客论坛第一章视频,并跟着敲代码(Maven, Spring Initializr)

3. (IoC思想)Spring容器管理bean的方式,并写代码测试、验证(Spring context就是Spring容器,@PostConstruct,@PreDestroy,@Scope("prototype/默认singleton"))

4. Spring MVC

2023.07.04

1. SpringMVC入门,熟悉get(两种,?和/)和post请求的写法,返回String、html和JSON,利用Thymeleaf模板引擎编写前端页面

2. MyBatis入门,user表中salt列用于拼接到密码后边(加盐),在加密存储到password列;编写User,UserMapper,user-mapper.xml,并实现xml与mapper、entity的对应;新建测试类测试对数据库操作的接口

3. 开发社区首页,帖子表中,冗余了评论数量,避免了每次都从评论表中查浪费时间,提高了系统性能

2023.07.05

1. 写科左后旗暑期实践的目的与意义

2. 实现首页显示帖子功能(了解Thymeleaf如何使用),封装Page组件(属性有current,limit,rows(数据总行数),index(查询路径),方法有getFrom,getTo,getTotal(总页数)getOffset(数据起始行数))

3. 项目调试技巧(状态码,服务端/客户端打断点调试,日志工具logback(按info、warn、error配置日志的输出文件))

4. 版本控制(Git)

2023.07.06

1. git命令,将项目放到远程仓库中

2. 借助JavaMailSender发送邮件

3. 开发注册功能(判断用户名和邮箱是否已被注册,密码加salt和md5加密,uuid激活码,新注册的用户用userId和激活码访问特定路径时(get方法从url中读取参数)激活账号)

4. 看合作伙伴管理平台的产品研发需求书

2023.07.07

1. 申请内网VPN,看 合作伙伴管理平台 代码

2. 解决 私域包在maven中无法导入 的问题:setting.xml暂时删掉aliyun镜像,删除repository文件夹中lyzd等私域包内的_remote.repositories文件(使得解析时直接从本地解析,而不从远程仓库下载(无VPN下载不了))

3. 后端生成cookie,返回给前端。(设置cookie的生效范围,生存时间)

4. 后端session生成与获取,分布式场景下同步session的几种解决方案(粘性session、同步session、共享session、Redis + cookie)

5. 看 合作伙伴管理平台 代码结构

6. 用kaptcha工具生成验证码

2023.07.08

1. 完善kaptcha生成验证码的功能,并加入到登录页面,点击刷新

你可能感兴趣的:(spring,java,spring,boot,mybatis)