初汇总

目录

初入门

项目运行

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)

附-遇到的问题

  • Q:缺失包
  • A1:这次直接将现有的包拷过去update project,如果需要网上下载呢?
  • A2:直接去maven中央仓库手动对应版本的jar,放到本地仓库对应位置,删除文件夹内不相关文件,重新项目右键-->maven -->update project或者update 依赖
  • Q: mysql-connector-java5.1.33缺失
  • A:库里没用(缺失)的包删掉,重新下载(Install) 附:导入jar包 -右键项目-build path-configure build path..-Add JARs-选(有其他方法)
  • Q: admin找不到config.properties
  • A:重新build
  • Q: Cannot resolve symbol
  • A:重新checkout打开运行

DEBUG步骤

  1. 先找"提交"修改的那个页面

  2. 看页面代码看点击后调到后台哪端代码

  3. 然后从后台那个位置开始打断点debug

  4. 开始找问题

  5. 自己点击一下,看是数据乱码还是页面乱码

问题排查

  1. 只起一台服务器,观察日志报错情况

  2. 检查是否代码问题

  3. 检查是否第三方接口问题(将链接扒出来调)

    #*问题解决大法:重启,还原!

IDEA快捷键

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();

部署流程

  1. 原代码备份

    tar -cvf gzzsapi_20190808_v1.20_bak.tar.gz ./gzzsapi(通过Tomcat部署)

  2. 新代码打包、上传

  3. 解压(通过Tomcat部署的方式则需要解压,通过nohup命令启动则不需要)

  4. 赋权:chown -R bizdb:bizdb *

  5. 切换用户:su bizdb

  6. kill进程,重启服务

查看进程:ps -ef | grep 端口号

结束进程:kill -9 进程号

    1) 启动Tomcat方式:./startup.sh

     2) war/jar包启动方式:

  •          java -jar eshore-workassistant-timer.jar & ​
  •          nohup java -jar jj-api-1.0.0.jar > nohup.out & ​
  •          nohup java -jar -Xmx1024M jj-api-1.0.0.jar >logs/jj-api.log & ​
  •          nohup java -jar -Xmx1024M jj-api-1.0.0.jar --server.port=8060 --spring.profiles.active=prod >x.log & ​
  •          nohup java -jar installMainDemo-1.0.0.war > /dev/null 2>&1 &

    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

 

知识梳理

session有效时间的设置

1.在web容器中设置(以tomcat为例)
2.在工程的web.xml中设置
    
    
        15
    
3.通过java代码设置
    session.setMaxInactiveInterval(30*60);//以秒为单位,即在没有活动30分钟后,session将失效
三种方式优先等级:1 < 2 < 3

500 (Internal Server Error)

服务器内部错误-代码未部署完全

异常处理方式

  1. 捕获后记录日志

  2. 抛给调用方,最外层做处理[[提示用户重试等-提升用户体验)

日志记录

配置方式: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提供了统一的记录日志的接口,只要按照其提供的方法记录即可,最终日志的格式、记录级别、输出方式等通过具体日志系统的配置来实现,因此可以在应用中灵活切换日志系统。

HttpClient请求接口设置超时时长

RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(5000).
    setConnectionRequestTimeout(1000).setSocketTimeout(5000).build(); 

http接口与webService接口的区别

  1. http接口走http协议,通过路径来区分调用方法,请求报文一般是key-value形式的,返回报文一般是json串,常用的是get和post方法来请求。

  2. webservice接口走soap协议,通过http传输,请求报文和返回报文都是xml格式的

关键字: SOAP (简易对象访问协议)

        WSDL (Web services 描述语言)

        UDDI (通用描述、发现及整合--由WSDL描述的、用于存储webServices信息的目录)

vConsole客户端调试

直接引入js文件即可

前端相关

  1. js元素隐藏/显示,绑定点击/移开/失焦..事件
  2. css画三角形(利用边框等实现border-style、border-width、border-color)
  3. iframe子页面(开发使用、父子页互控、页面样式等)
  4. css样式排位(position:relative相对定位/absolute绝对定位)
  • 手机客户端适配:淘宝的适配脚本

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/

其他

  • 二维码生成方式:ZXing/QRCode
  • 图片绘制工具类:Graphics2D
  • 在线调测、文档生成:swagger
  • ##百度/高德地图SDK,距离计算

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直接打开在线地址

相当于客户端做一个可以扫码、拍照的定制浏览器

  1. 对外接口提供
  2. 图片上传接口调用(还是使用得少)
  3. 页面读取配置文件
  4. 客户端沟通确定方案 *还是得做交互主要是确定好方案 附-原始表单使用
  5. 扫码打开页面解析--爬虫
  6. 网络相关 eg.Nginx转发、内网外网...
  7. sessionStrong缓存
  8. 地图坐标转换,距离计算
  9. 文件上传下载 *
  10. Ftp的基础操作和配置 *

 

模块学习

Git

  • Git 是一种版本控制系统,是一个命令,是一种工具,有点像cmd(命令行工具)。
  • Github 是一个基于git实现在线代码托管的仓库,向互联网开放,企业版要收钱。
  • Gitlab 类似 github,一般用于在企业内搭建git私服,要自己搭环境。
  • Gitee 即码云,是oschina免费给企业用的,不用自己搭建环境,可以建立自己的私有仓库。

Github和Gitee是一类,在云端。区别是Github是国外的;Gitee是国内的。

*代码从远端下载到本地,可以用命令也可以用工具eg.GitHub Desktop

*代码从本地上传到远端,可以用命令也可以用工具eg.GitHub Desktop、IDEA

附:使用命令前,需要 1.安装git 2.添加和配置SSH公钥

##Github入门

  1. Step 1. Create a Repository 存储库
  2. Step 2. Create a Branch 分支
  3. Step 3. Make and commit changes 提交
  4. Step 4. Open a Pull Request pull请求
  5. Step 5. Merge your Pull Request 合并

##Git 与 SVN

SVN优缺点

优点:

  1. 管理方便,逻辑明确,符合一般人思维习惯。
  2. 易于管理,集中式服务器更能保证安全性。
  3. 代码一致性非常高。
  4. 适合开发人数不多的项目开发。

缺点:

  1. 服务器压力太大,数据库容量暴增。
  2. 如果不能连接到服务器上,基本上不可以工作,看上面第二步,如果服务器不能连接上,就不能提交,还原,对比等等。
  3. 不适合开源开发(开发人数非常非常多,但是Google app engine就是用svn的)。但是一般集中式管理的有非常明确的权限管理机制(例如分支访问限制),可以实现分层管理,从而很好的解决开发人数众多的问题。

Git优缺点 优点:

  1. 适合分布式开发,强调个体。
  2. 公共服务器压力和数据量都不会太大。
  3. 速度快、灵活。
  4. 任意两个开发者之间可以很容易的解决冲突。
  5. 离线工作。

缺点:

  1. 学习周期相对而言比较长。
  2. 不符合常规思维。
  3. 代码保密性差,一旦开发者把整个库克隆下来就可以完全公开所有代码和版本信息。

注:系统学习请参考官方等详细资料

VUE

##插件:

  • 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操作)


@使用步骤:

  1. 安装node.js 下载:https://nodejs.org/en/download/     安装教程:http://www.runoob.com/nodejs/nodejs-install-setup.html (已经顺带安装了npm)

  2. 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

  3. 安装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

注:系统学习请参考官方等详细资料

Spring Cloud

##服务提供者与服务消费者

骨架生成: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、根据响应时间加权等。

运用

  • 基本使用:
  1. 可不再引入依赖,因为spring-cloud-starter-eureka已包含
  2. 添加@LoadBalanced注解,使RestTemplate具备负载均衡能力
  3. 访问URL使用virtual IP
  • Java代码自定义配置:@RibbonClient+@Configuration、@ComponentScan
  • 配置文件自定义配置:users.ribbon.NFLoadBalancerRuleClassName:..(eg.com.netflix.loadbalancer.RandomRule)
  • 脱离Eureka使用...

PS:与"dubbo+zookeeper"区别与联系:

单独使用dubbo也能实现微服务,但是点对点直连。使用zookeeper作为注册中心可实现分布式

##Feign(通信组件)

声明式的 WEB SERVICE Client,用于调用接口。SpringCloud整合了Eureka与Ribbon,支持SpringmVC注解

运用

  • 基本使用:添加@EnableFeignClients、@FeignClient注解
  • 覆写Feign的默认配置:@Configuration
  • Fegion的日志...

##Hystrix断路器模式

--解决'请求失败、长期等待耗尽资源'的问题

运用

  • 基本使用:

0.引入依赖 1.添加注解@EnableCircuitBreaker、@HystrixCommand(fallbackMethod = "defaultStores")

  • 断路器状态:Health Indicator '/health'
  • 监控:Hystrix Metrics Stream '/hystrix.stream'

附L:

  • Feign的支持:@FeignClient(name = "microservice-provider-user", fallback = XXXFallback.class)
  • Hystrix Dashboard:显示每个断路器运行状况 的 可视化仪表盘(http://127.0.0.1:8030/hystrix)
  • Turbine:监控数据聚合(http://127.0.0.1:8031/turbine.stream) 主要是配置使用,学会看官方文档

##API Gateway服务网关

--Zuul组件 类似于Nginx请求分发

主要是配置使用,学会看官方文档

##配置中心

Config Server

Config Client


附:运行情况

  • 起Eureka、起各个微服务Server
  • 起断路器可视化仪表盘Dashboard
  • 起服务网关Zuul、起sidecar
  • 起Config Server、Config Client

@学会阅读官方文档

@通用步骤:

引入依赖->配置->开发(加注解)->启动

注:此处仅为知识简记,系统学习请参考官方等详细资料

MQ

##ActiveMQ

ActiveMQ 介绍&开发包下载及运行环境搭建

ActiveMQ 点对点消息实现

直接Receive方式

使用Listener监听方式

ActiveMQ 发布-订阅消息模式实现

区别:创建连接的消息队列

createQueue("xx") and createTopic("xx")

问题:

  • Q:.bat脚本启动后访问MQ控制台异常
  • A:jdk版本问题
  • Q:怎么定义往哪个MQ发消息?哪里配置?
  • A:代码里定义了ConnectionConstants.BROKENURL= 用springBoot直接pom引入后应该可以通过.yml配置去定义
  • Q:初级版,消费者的创建与队列有关,那如果我想订阅多个主题怎么破?messageConsumer = session.createConsumer(destination);
  • A:发布-订阅模式 一般是多个消费者订阅一个主题 但也可以实现一个消费者订阅多个主题,可通过配置去实现 【尝试在IDEA上使用springboot整合activeMQ(注意版本)

##RocketMQ

简介

分布式消息中间件v3.2.6 https://github.com/apache/rocketmq

借鉴参考JMS规范的MQ实现,使用的服务发现组件NameServer

专业术语:NameServer、Broker、Producer/Consumer Group、广播消费、集群消费、顺序消息...

环境搭建

集群环境:单击模式、Master-Slave模式、[双Master模式]、双主双从模式..

                 物理部署结构、逻辑部署结构

双Master模式部署流程:(在两台机器均操作)

  1. hosts添加信息

  2. 上传解压、创建存储路径

  3. 修改RocketMQ配置文件(根据不同模式修改对应配置文件、在启动时指定配置文件)

  4. 修改日志配置文件、修改启动脚本参数

  5. 启动NameServer(两台机器)

  6. 启动BrokerServer A(第一台机器,指定对应配置文件)

  7. 启动BrokerServer B(第二台机器,指定对应配置文件)

  8. 将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面试/#其他

 

你可能感兴趣的:(原创,java)