目录
初入门
项目运行
DEBUG步骤
问题排查
IDEA快捷键
部署流程
其他
知识梳理
session有效时间的设置
500 (Internal Server Error)
异常处理方式
日志记录
HttpClient请求接口设置超时时长
http接口与webService接口的区别
vConsole客户端调试
前端相关
其他
模块学习
Git
VUE
Spring Cloud
MQ
其他
1. 前置准备:
1) 安装jdk配置环境 -设置
2) 解压maven配置环境 -修改配置settings.xml
3) 解压Tomcat配置环境-设置容器[配置端口号、应用名(一个容器可配多个应用)
2. 右键工程-Run as-Maven Install/build
可以不用tomcat,用jetty插件[端口号8089](jetty:run)
附-遇到的问题
先找"提交"修改的那个页面
看页面代码看点击后调到后台哪端代码
然后从后台那个位置开始打断点debug
开始找问题
自己点击一下,看是数据乱码还是页面乱码
只起一台服务器,观察日志报错情况
检查是否代码问题
检查是否第三方接口问题(将链接扒出来调)
#*问题解决大法:重启,还原!
Shift+Shift:搜索任何东西
Ctrl + N:查找类
Ctrl + H:显示类结构图
Ctrl + D:复制光标所在行,并把复制内容插入光标位置下面【有些是删除行,看具体设置】
Alt + Enter:根据光标所在问题,提供快速修复选择,光标放在的位置不同提示的结果也不同
Alt + Insert:代码自动生成,如生成对象的set/get方法、构造函数、toString() 等
Ctrl + F12:查找类中所有方法
Ctrl + Alt + H:查看方法的调用链
Ctrl + Alt + L:格式化代码,可以对当前文件和整个包目录使用
Ctrl + Alt + O:优化导入的类,可以对当前文件和整个包目录使用
Ctrl + Shift + F:根据输入内容查找整个项目 或 指定目录内文件
Ctrl + Shirt + R:全局搜索
Ctrl + Shift + V:快速补全
new A().var ==> A a = new A()
fori ==>
list.for ==>
psvm = public static void main(String[] args) {}
sout = System.out.println();
原代码备份
tar -cvf gzzsapi_20190808_v1.20_bak.tar.gz ./gzzsapi(通过Tomcat部署)
新代码打包、上传
解压(通过Tomcat部署的方式则需要解压,通过nohup命令启动则不需要)
赋权:chown -R bizdb:bizdb *
切换用户:su bizdb
查看进程:ps -ef | grep 端口号
结束进程:kill -9 进程号
1) 启动Tomcat方式:./startup.sh
2) war/jar包启动方式:
7. 服务正常,将备份包移至备份文件夹backup
mv *.bak ../backup/
@redis缓存
使用:下载解压,设置密码(redis.windows.conf),工程配置路径、端口号、密码。启动redis,启动工程
附:启动命令(cmd进入相应目录执行) redis-server.exe redis.windows.conf
附清除缓存
1.redis根目录调出命令行(cmd)
2.登录redis:redis-cli -h 127.0.0.1 -p 6379
3.查看所有key值:keys *
4.清空当前库中的所有 key:flushdb
重启: service redis restart
附-Redis管理工具:RedisDesktopManager
@远程连接
Windows:Win+R -> mstsc
Linux:SecureCRT、XShell、WinSCP-PuTTY
1.在web容器中设置(以tomcat为例)
2.在工程的web.xml中设置
15
3.通过java代码设置
session.setMaxInactiveInterval(30*60);//以秒为单位,即在没有活动30分钟后,session将失效
三种方式优先等级:1 < 2 < 3
服务器内部错误-代码未部署完全
捕获后记录日志
抛给调用方,最外层做处理[[提示用户重试等-提升用户体验)
配置方式:1.log4j 2.log4j2 3.logback
日志级别:FATAL > ERROR > WARN > INFO > DEBUG > TRACE
日志规范slf4j
1.SLF4J,即简单日志门面(Simple Logging Facade for Java),不是具体的日志解决方案,它只服务于各种各样的日志系统。按照官方的说法,SLF4J是一个用于日志系统的简单Facade,允许最终用户在部署其应用时使用其所希望的日志系统。
2.实际上,SLF4J所提供的核心API是一些接口以及一个LoggerFactory的工厂类。从某种程度上,SLF4J有点类似JDBC,不过比JDBC更简单,在JDBC中,你需要指定驱动程序,而在使用SLF4J的时候,不需要在代码中或配置文件中指定你打算使用那个具体的日志系统。如同使用JDBC基本不用考虑具体数据库一样,SLF4J提供了统一的记录日志的接口,只要按照其提供的方法记录即可,最终日志的格式、记录级别、输出方式等通过具体日志系统的配置来实现,因此可以在应用中灵活切换日志系统。
RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(5000).
setConnectionRequestTimeout(1000).setSocketTimeout(5000).build();
http接口走http协议,通过路径来区分调用方法,请求报文一般是key-value形式的,返回报文一般是json串,常用的是get和post方法来请求。
webservice接口走soap协议,通过http传输,请求报文和返回报文都是xml格式的
关键字: SOAP (简易对象访问协议)
WSDL (Web services 描述语言)
UDDI (通用描述、发现及整合--由WSDL描述的、用于存储webServices信息的目录)
直接引入js文件即可
手机客户端适配:淘宝的适配脚本
https://www.jianshu.com/p/ab57810709e8?from=singlemessage
https://segmentfault.com/a/1190000015338043
https://www.jianshu.com/p/7f2ccac59fb9
weui使用 应用:客户端分页/下拉加载更多(Swiper控件 或 weui)
https://www.swiper.com.cn/usage/index.html
http://weui.shanliwawa.top/demo/js9.html
http://jqweui.com/components
二维码生成器
https://cli.im/
http://lbsyun.baidu.com/index.php?title=webapi/guide/changeposition
https://lbs.amap.com/api/webservice/guide/api/convert
https://blog.csdn.net/sinat_35241409/article/details/78092985
http://www.toolzl.com/tools/getGpsArea.html
https://tool.lu/coordinate/
0.app如何嵌入H5页面
使用WebView来加载H5页面,也就是使用webview直接打开在线地址
相当于客户端做一个可以扫码、拍照的定制浏览器
Github和Gitee是一类,在云端。区别是Github是国外的;Gitee是国内的。
*代码从远端下载到本地,可以用命令也可以用工具eg.GitHub Desktop
*代码从本地上传到远端,可以用命令也可以用工具eg.GitHub Desktop、IDEA
附:使用命令前,需要 1.安装git 2.添加和配置SSH公钥
##Github入门
##Git 与 SVN
SVN优缺点
优点:
缺点:
Git优缺点 优点:
缺点:
注:系统学习请参考官方等详细资料
##插件:
NPM
NPM是随同NodeJS一起安装的包管理工具,能解决NodeJS代码部署上的很多问题,常见使用场景如下: 允许用户从NPM服务器下载别人编写的第三方包到本地使用。 允许用户从NPM服务器下载并安装别人编写的命令行程序到本地使用。 允许用户将自己编写的包或命令行程序上传到NPM服务器供别人使用。 由于新版nodejs已集成npm,所以之前npm也一并安装好了。同样可通过输入"npm -v" 来测试是否成功安装 更多:https://www.runoob.com/nodejs/nodejs-npm.html
cnpm
镜像
ESLint
ESLint是一个插件化的javascript代码检测工具,它可以用于检查常见的 JavaScript 代码错误,也可以进行代码风格检查,有效控制项目代码的质量。
首先我们需要安装 eslint...
##nodejs
Node.js是用Javascript语言构建的服务平台,是一个Javascript运行环境、可用于后端建立服务器(类比Java中的JVM)
##VUE
vue是一个JavaMVVM库,是一套用于构建用户界面的渐进式框架,是初创项目的首选前端(框架)。
它是轻量级的,它有很多独立的功能或库,我们会根据我们的项目来选用vue的一些功能。它提供了更加简洁、更易于理解的API,使得我们能够快速地上手并使用Vue.js。
优势:轻巧、高性能、可组件化的MVVM库,易上手(响应式编程)
结合element-ui开发效率高,双向数据绑定(减少了dom操作)
@使用步骤:
安装node.js 下载:https://nodejs.org/en/download/ 安装教程:http://www.runoob.com/nodejs/nodejs-install-setup.html (已经顺带安装了npm)
1) 安装淘宝cnpm npm install -g cnpm --registry=https://registry.npm.taobao.org
2) 或者切换淘宝镜像:npm config set registry https://registry.npm.taobao.org
验证:npm config get registry
安装VUE脚手架 cnpm install -g vue-cli
*创建项目 vue init webpack xx
在对应项目目录下执行:
npm install(相当于maven install)
npm run dev / npm run serve(启动)
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
ps最初问题
1.依赖包没instal好
2.nodejs版本太低
附-人人开源vue项目依赖问题解决过程:
解决方式一:
Error: Can't find Python executable "python", you can set the PYTHON env variable.
--> 安装python
MSBUILD : error MSB4132: 无法识别工具版本“2.0”。可用的工具版本为 "4.0"。
--> npm install --global --production windows-build-tools
卡住:Python 2.7.18 is already installed, not installing again.
--> 卸载python
卡住:Successfully installed Python 2.7
--> 再次重新安装python,执行 npm install --> npm run dev
*解决方式二:
降低Node版本,使用稳定版eg.v10.16.3
以管理员身份运行VSCode,执行 npm install
注:系统学习请参考官方等详细资料
##服务提供者与服务消费者
骨架生成:https://start.spring.io/
应用都可打包成war独立启动运行,api应用调用service应用(与"单体服务api+service打包成war启动、内部直接调用"不同)
如果服务单一可直接指定路径,但多个服务则需分布式部署(服务注册、调用)Eureka/zookeeper
附:
JPA (Java Persistence API)Java持久化API。是一套Sun公司Java官方制定的ORM 方案
RestTemplate:Springboot更优雅的方式发HTTP请求
H2(关系内存数据库)
当程序启动的时候,会在内存中创建表,并将数据存储在内存中,当重启程序后,会自动删除内存中的数据,从而可以很好的用来做dao层的单元测试和service层的单元测试,使整个程序不会依赖具体的数据库,同时也提高了单元测试的效率。
##Eureka(服务发现组件)
us-east-1c、us-east-1d等是zone,它们都属于us-east-1这个region(地区);
应用:
Application Service服务提供者
Application Client服务消费者
Eureka包含两个组件:Eureka Server 和 Eureka Client
Eureka Server提供服务注册服务,各个节点启动后,会在Eureka Server中进行注册,这样Eureka Server中的服务注册表中将会存储所有可用服务节点的信息,服务节点的信息可以在界面中直观的看到。
Eureka Client是一个Java客户端,用于简化与Eureka Server的交互,客户端同时也具备一个内置的、使用轮询(round-robin)负载算法的负载均衡器。
在应用启动后,将会向Eureka Server发送心跳(默认周期为30秒)。如果Eureka Server在多个心跳周期内没有接收到某个节点的心跳,Eureka Server将会从服务注册表中把这个服务节点移除(默认90秒)。
Eureka Server之间将会通过复制的方式完成数据的同步。(详见Eureka高可用章节)
Eureka还提供了客户端缓存的机制,即使所有的Eureka Server都挂掉,客户端依然可以利用缓存中的信息消费其他服务的API。
综上,Eureka通过心跳检测、健康检查、客户端缓存等机制,确保了系统的高可用性、灵活性和可伸缩性。
运用:
引入依赖->配置->启动
实现Eureka Server,将Application Service和Application Client注册到Eureka Server上
Q:client如何通过Eureka调service?--见Ribbon
##Ribbon(客户端负载均衡器)
在配置文件中列出Load Balancer后面所有的机器,Ribbon会自动的基于某种规则(如简单轮询,随机连接等)去连接这些机器
Ribbon工作时分为两步:
第一步先选择Eureka Server, 它优先选择在同一个Zone且负载较少的Server;
第二步再根据用户指定的策略,在从Server取到的服务注册列表中选择一个地址。其中Ribbon提供了多种策略,例如轮询round robin、随机Random、根据响应时间加权等。
运用:
PS:与"dubbo+zookeeper"区别与联系:
单独使用dubbo也能实现微服务,但是点对点直连。使用zookeeper作为注册中心可实现分布式
##Feign(通信组件)
声明式的 WEB SERVICE Client,用于调用接口。SpringCloud整合了Eureka与Ribbon,支持SpringmVC注解
运用:
##Hystrix断路器模式
--解决'请求失败、长期等待耗尽资源'的问题
运用:
0.引入依赖 1.添加注解@EnableCircuitBreaker、@HystrixCommand(fallbackMethod = "defaultStores")
附L:
##API Gateway服务网关
--Zuul组件 类似于Nginx请求分发
主要是配置使用,学会看官方文档
##配置中心
Config Server
Config Client
附:运行情况:
@学会阅读官方文档
@通用步骤:
引入依赖->配置->开发(加注解)->启动
注:此处仅为知识简记,系统学习请参考官方等详细资料
##ActiveMQ
ActiveMQ 介绍&开发包下载及运行环境搭建
ActiveMQ 点对点消息实现
直接Receive方式
使用Listener监听方式
ActiveMQ 发布-订阅消息模式实现
区别:创建连接的消息队列
createQueue("xx") and createTopic("xx")
问题:
##RocketMQ
简介
分布式消息中间件v3.2.6 https://github.com/apache/rocketmq
借鉴参考JMS规范的MQ实现,使用的服务发现组件NameServer
专业术语:NameServer、Broker、Producer/Consumer Group、广播消费、集群消费、顺序消息...
环境搭建
集群环境:单击模式、Master-Slave模式、[双Master模式]、双主双从模式..
物理部署结构、逻辑部署结构
双Master模式部署流程:(在两台机器均操作)
hosts添加信息
上传解压、创建存储路径
修改RocketMQ配置文件(根据不同模式修改对应配置文件、在启动时指定配置文件)
修改日志配置文件、修改启动脚本参数
启动NameServer(两台机器)
启动BrokerServer A(第一台机器,指定对应配置文件)
启动BrokerServer B(第二台机器,指定对应配置文件)
将rocketmq-console放在tomcat的webapps下运行,使用控制台(ActiveMQ已包含控制台)
HelloWorld
创建Producer发送/Consumer监听消息,设定NameServerAddr、topic等
注首次先启动Consumer、再启动Producer
ps:Producer执行一次发送一次消息;Consumer随着程序启动(配置好)一直监听Broker
架构设计
9大模块:broker/client/common/filtersrv/namesrv/remoting/srvutil/store/tools
使用NameServer而不用zookeeper原因:更轻量级,只负责请求路由、不做消息位置存储工作(由Broker做)
底层通信:Netty Producer
API详解
NornalProducer普通、OrderProducer顺序(实现MessageQueueSelector接口)、TransactionProducer事务
Consumer API详解
消息重试机制、(补偿机制:当重试到一定次数,记录下来后续处理)
幂等、去重
ps Broker不可避免地发送重复数据到consumer,consumer必须保证处理的消息是唯一的
幂等性:(处理必须唯一)无论这个业务请求被(consumer)执行多少次,数据库结果都需要唯一、不可变
方式:1.primary key唯一id/业务流水号 insert操作;2.业务去重
消息模式:集群模式(负载均衡)、广播模式(所有Consumer均消费)
双主双从、Filtersrv详解、管理员命令
注:此处仅为知识简记,系统学习请参考官方等详细资料
菜鸟教程:https://www.runoob.com/
本地资料:E:\工作项目资料\@Study/I面试/#其他