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.
10.
11. Spring MVC底层原理:Servlet引擎(例如Tomcat),首先根据路由分发请求到controller,然后controller处理请求并创建model,然后将处理好的model(动态数据)返回给front controller (DispatcherServlet),然后将model传给View template(存放静态页面),并生成动态html(model中动态数据替换View中符号)返回给dispatcherServlet,再返回给请求发送端。
12. application.properties是配置文件。 eg: server.port=8900
13. get请求获取参数的两种方式:
1) ?code=123; request.getParameter(“code”) 2)/student/{id}, @PathVariable("id")
14. GET请求也可以发送数据(实现post的功能),但是get请求的参数是放在url里的(是暴露的),而且路径长度有限制,所以提交数据的时候最好还是使用POST方法。
15. MyBatis的核心组件sqlSession
16. 封装Page组件:
属性有current,limit,rows(数据总行数),index(查询路径),方法有getFrom,getTo,getTotal(总页数)getOffset(数据起始行数)
17. 状态码
以2开头的都是成功;200:请求成功
以3开头的代表重定向;301代表永久性转移(比如网站因为某种原因需要移除掉,然后要到新的地址访问,是永久性)
302代表暂时性转移(比如当一个网站或者网页24-48小时内临时移动到一个新的位置,这时候就要进行302跳转)
302:Found(删除之后没有了页面,则返回建议重定向一个网址);或者注册完跳转到登录页面,也可以用重定向。
以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请求之间是没有任何关系的,使用cookies或session可以创建有状态的会话(解决业务连续性问题)。
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生成验证码的功能,并加入到登录页面,点击刷新