编程开发入行学习路线思路分享
2022-10-27 18:07:41 0 举报
AI智能生成
编程开发入行学习路线思路分享
作者其他创作
大纲/内容
学习路线
编程基础
JAVA语言
语言基础
基础语法
面向对象<br>
接口
容器<br>
异常<br>
泛型<br>
反射<br>
注解<br>
I/O
图形化(Swing)<br>
JVM
类加载机制
字节码执行机制
JVM内存模型<br>
GC垃圾回收<br>
JVM性能监控及故障定位<br>
JVM调优
多线程、并发<br>
并发编程基础
线程池
锁
并发容器
原子类
JUC并发工具类
数据接口和算法
数据结构
字符串
数组
链表
堆、栈、队列
二叉树<br>
哈希
图
算法
排序
查找
思想
贪心
分治
动态规划
回溯
计算机网络
数据链路层ARP协议
IP协议、ICMP协议
TCP、UDP协议<br>
DNS/HTTP/HTTPS协议
Session/Cookie<br>
SQL/数据库
SQL语句
SQL语句优化
事务、隔离级别<br>
索引<br>
锁
操作系统<br>
进程、线程<br>
并发、锁<br>
内存管理和调度
I/O原理
设计模式
单例
工厂
代理
模板方法
观察者
适配器
责任链
建造者
研发工具
集成开发环境
Eclipse
IDE
VSCode
Linux系统
常用命令
shell脚本
项目管理/构建工具
Maven
Gradle<br>
代码管理工具
SVN<br>
Git<br>
应用框架
后端
Spring家族框架
Spring
IOC
AOP
SpringMVC
SpringBoot
自动配置、开箱即用
整合WEB
整合数据库
整合权限
Shiro
Spring Security<br>
整合中间件
Redis、MQ、RPC框架、NIO框架<br>
服务器软件
Web服务器
Nginx
应用服务器
Tomcat
Jetty<br>
中间件<br>
缓存
Redis
5大基础数据类型
事务<br>
消息通知
管道
持久化
集群
消息队列
RocketMQ
RabbitMQ
Kafka(大数据)<br>
RPC框架
Dubbo
gRPC(谷歌)<br>
Thirft<br>
SpringCloud
Netty
数据库框架
ORM框架
MyBatis<br>
Hibernate<br>
JPA
连接池
Druid<br>
HikariCP
C3P0
分库分表
MyCat
Sharding-JDBC(沙丁)<br>
Sharding-Sphere<br>
搜索引擎<br>
ElasticSearch<br>
Solr
分布式/微服务
服务发现/注册
Eureka<br>
Consul
Zookeeper
Nacos(阿里)
网关
Zuul
Gateway<br>
服务调用(负载均衡)
Ribbon
Feign
熔断/降级<br>
Hystrix<br>
配置中心
Config
Apollo
Nacos
认证和鉴权<br>
Spring Security
OAuth2<br>
SSO单点登录
分布式事务
JTA接口
Atomikos组件<br>
2PC、3PC
XA模式
TCC模式
tcc-transaction
ByteTCC
EasyTransaction<br>
Seata<br>
SAGA模式
ServiceComb
Seata
LCN模式
tx-lcn
任务调度
Quartz
Elastic-Job<br>
链路追踪和监控
ZipKin
Sleuth
Skywalking
日志分析
ELK
ElasticSearch<br>
Logstash<br>
Kibana<br>
前端
基础套餐
三大件
Html<br>
JavaScript
CSS<br>
基础库
JQuery
Ajax
模板框架
JSP/JSTL
Thymeleaf<br>
Freemarker
Velocity
组件化框架
Vue
React
Angular
Node
运维知识
代码质量检查
sonar<br>
日志分析
ELK
ElasticSearch<br>
Logstash<br>
Kibana<br>
虚拟化/容器化
容器技术<br>
Docker
容器编排技术
Kubernetes<br>
Swarm<br>
CDN加速
持续集成/持续部署(CI/CD)
Jenkins
开发层
dubbo
RPC远程过程调用
zookeeper
rocketMQ
主流MQ:Kafka、RocketMQ、RabbitMQ
安装(单机)
环境:Linux64bit、JDK1.8+、maven3.2.x、free Disk4G
1.下载安装包
2.安装包上传至服务器
解压
unzip rocketmq-all-4.4.0-bin-release.zip<br>
解压文件重名命
mv rocketmq-all-4.4.0-bin-release /usr/local/rocketmq<br>
删除压缩包及旧解压包
3.配置RocketMQ的环境变量(<font color="#ff9999">非必需步骤</font>)<br>
vi /etc/profile
path
NAMESRV_ADDR可以不在此绑定,但必须在启动broker时加上“-n 服务器IP:端口”以绑定nameserver,本次实验就直接绑定以简化操作,9876是nameserver的默认端口<br>
source /etc/profile
4.创建rockeMQ存储文件所需的目录<br>
存储mq日志
mkdir -p /data/rocketmq/logs<br>
存储mq数据文件<br>
mkdir -p /data/rocketmq/store<br>
存储mq消息信息
mkdir -p /data/rocketmq/store/commitlog<br>
存储mq消息的索引数据<br>
mkdir -p /data/rocketmq/store/index<br>
mkdir -p /data/rocketmq/store/consumequeue<br>
存储checkpoint文件
mkdir -p /data/rocketmq/store/checkpoint<br>
5.Broker节点属性配置
Broker节点的配置文件在/rocketmq/conf下面,有三种配置方式
2m-noslave: 多Master模式
2m-2s-sync: 多Master多Slave模式,同步双写
2m-2s-async:多Master多Slave模式,异步复制
单节点配置
进入任意一个配置目录修改broker-a.properties<br>
vi /usr/local/rocketmq/conf/2m-noslave/broker-a.properties<br>
broker-a.properties具体配置
6.日志配置
切换到mq配置目录
cd /usr/local/rocketmq/conf<br>
批量替换日志配置文件中存储路径
sed -i 's#${user.home}/logs/rocketmqlogs#/data/rocketmq/logs#g' *.xml<br>
7.修改启动文件内存配置(rocketMQ对内存要求较高,最少1G)<br>
vi /usr/local/rocketmq/bin/runbroker.sh<br>
JAVA_OPT="${JAVA_OPT} -server -Xms512m -Xmx512m -Xmn512m"<br>
vi /usr/local/rocketmq/bin/runserver.sh<br>
JAVA_OPT="${JAVA_OPT} -server -Xms512m -Xmx512m -Xmn512m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"<br>
8.启动 namesrv<br>
nohup sh ./mqnamesrv &<br>
关闭namesrv
sh ./mqshutdown namesrv<br>
9.启动broker
nohup sh ./mqbroker -c /usr/local/rocketmq/conf/broker.properties &<br>
关闭broker
sh ./mqshutdown broker<br>
10.安装控制台
修改配置<br>
rocketmq.config.namesrvAddr=rocketmq:9876;rocketmq-1:9876
rocketmq.config.isVIPChannel=false
打包,启动服务
nohup java -jar rocketmq-console-ng-1.0.1.jar &<br>
架构集群
nameserver
1.注册中心,最初使用的是zookeeper,后来阿里自己定制的
2.Broker向它注册路由信息,同时Client向其获取路由信息<br>
3.NameServer本身是没有状态的,并且多个NameServer直接并没有通信,可以横向扩展多台,Broker会和每一台NameServer建立长连接
broker
1.Broker是RocketMQ的核心,提供了消息的接收,存储,拉取等功能<br>
2.一般都需要保证Broker的高可用,所以会配置Broker Slave,当Master挂掉之后,Consumer然后可以消费Slave<br>
3.Broker分为Master和Slave,一个Master可以对应多个Slave,Master与Slave的对应关系通过指定相同的BrokerName,不同的BrokerId来定义
4.BrokerId为0表示Master,非0表示Slave
producer
consumer
常用命令
创建topic
sh ./mqadmin updateTopic -t topic_delivery_schedule -c cluster-1 -n localhost:9876
删除topic
sh ./mqadmin deleteTopic -t topic_delivery_schedule -c cluster-1 -n localhost:9876
创建订阅组
子主题
Spring
Spring是一个轻量级的控制反转和面向切面编程的软件设计层面的框架,可以将应用分层,开发者可以自主选择组件<br>
Servlet
DispatcherServlet
IOC(容器 本质是一个map对象 Map iocMap = new HashMap();)
控制反转
依赖注入DI
@Resource 是基于name来判断
@Autowire 是基于类型来判断的
<br>
AOP(动态代理,实现面向切面编程)
作用域
子主题
mysql
安装(Linux环境 CentOS6、mysq-5.6.26)
1.将安装压缩包上传至服务器/usr/local目录下
2.卸载虚拟机自带的mysql相关包
2.1.查找相关包 <br>
rpm -qa | grep mysql
2.2.卸载
rpm -e --nodeps 包名<br>
2.3.查找之前老版本mysql的目录
find / -name mysql<br>
2.4.删除相关目录
3.新增mysql 用户组添加mysql用户,并将mysql用户添加至用户组
groupadd mysql<br>
useradd -r -g mysql mysql<br>
4.创建数据库所需目录
mkdir -p /data/mysql/data<br>
mkdir -p /data/mysql/logs<br>
mkdir -p /data/mysql/temp<br>
5.添加环境变量使mysql命令生效(非必须项)
编辑环境变量
vi /etc/profile<br>
刷新文件<br>
source /etc/profile<br>
6.安装mysql依赖包(防止编译安装mysql是报错)安装依赖包时如有询问 ,一直 y<br>
yum install make cmake gcc gcc-c++ bison bison-devel ncurses ncurses-devel antoconf automake<br>
7.解压
tar -zxvf mysql-5.6.26.tar.gz<br>
8.mysql安装前的属性设置
8.1.进入解压后目录
cd mysql-5.6.26<br>
8.2.执行检查命令
9.编译
make<br>
10.安装
make install<br>
11.清除安装文件
make clean<br>
12.将 /usr/local/mysql 目录 和 /data/mysql 目录的权限设为 mysql用户所有<br>
chown -Rf mysql:mysql /usr/local/mysql<br>
chown -Rf mysql:mysql /data/mysql<br>
<span style="font-size: inherit;">13.进入mysql安装/usr/local/mysql 目录执行数据库的 初始化脚本 并生成my.cnf文件。<br></span><span style="font-size: inherit;"> 用于mysql自带的 数据库 和 表的初始化 。</span>此时将/data/mysql/data目录 作为数据存放的目录<br>
cd /usr/local/mysql<br>
scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql/data<br>
14.将my.cnf 文件的所属权限改成 mysql用户
chown -Rf mysql:mysql /usr/local/mysql/my.cnf<br>
<font color="#ff9999">在默认系统中 etc/目录下也会有一个 my.cnf文件 ,当mysql服务启动时会默认 先读取/etc/my.cnf 文件 ,如果/etc/my.cnf 不存在则会到 mysql的安装目录下读取 my.cnf文件 ,因此需将 /etc/my.cnf 文件 改成其他名字 ,否则会干扰到mysql安装目录下的 my.cnf文件,但是在生产环境上 建议使用 /etc/my.cnf 文件 , 这里也是用 /etc/my.cnf 步骤如下:</font><br>
(1)编辑my.cnf文件 将所有内容删除
(2)my.cnf内容
(3)复制my.cnf到 /etc目录下
cp /usr/local/mysql/my.cnf /etc<br>
15.复制mysql启动服务脚本 至 /etc/init.d目录下
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql<br>
17.启动mysql 服务
service mysql start<br>
16.设置mysql数据库root用户本地登录密码
cd /usr/local/mysql/bin<br>
./mysqladmin -u root password '111' <br>
18.用户名密码登录<br>
mysql -uroot -p111<br>
19.设置mysql 服务开机自动开启(非必要项)
chkconfig mysql on<br>
20.三方客户端无法连接mysql原因
检查mysql是否启动
netstat -nalp | grep "3306"<br>
检查防火墙是否关闭
永久关闭
chkconfig iptables off
临时关闭
service iptables stop<br>
<span style="font-size: inherit;">登录mysql,在mysql下输入如下命令(二选一)</span><br>
用密码111从任何主机连接到MYSQL服务器
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '111' WITH GRANT OPTION;<br>
用户root从指定IP为10.1.1.123的主机连接到MYSQL服务器,并使用111作为登录密码
主从复制(数据同步)
1.修改master的my.ini配置文件
67行mysql后
子主题
读写分离
存储过程
存储过程
含义
存储过程和函数(类似于JAVA中的方法)
存储过程是一组预先编译好的SQL语句集合,可以理解成批处理语句但要比批处理语句功能要强。
提高代码代码的重用性,简化操作,减少编译次数和服务器的连接次数,提高了效率
创建语法
1.参数列表包含三部分 举例: IN stuname VARCHAR(20)
1.参数模式
IN:表示该参数可以作为入参(形参)
OUT:该参数可以作为返参(返回值)
INOUT:该参数既可以作为形参又可以作为返回值
2.参数名
3.参数类型
2.如果存储过程体仅仅只有一条SQL语句,BEGIN END 可以省略
存储过程体中的每条SQL语句必须加分号,存储过程的结尾可以使用<font color="#f15a23">DELIMITER</font>重新设置
语法:DELIMITER 结束标记(例:DELIMITER $)
使用DELIMITER创建结束标记必须要在mysql客户端使用,sqlyong。。。之类的可视化客户端创建仅支持当前存过使用
调用语法
1.空参列表存储过程 CALL 存储过程名();
/*创建结束标识*/<br>DELIMITER $<br>/*创建空参存储过程*/<br>CREATE PROCEDURE test1()<br>BEGIN<br> INSERT INTO admin(username,PASSWORD) VALUES('name1','pass1'),('name2','pass2'),('name3','pass3');<br>END $<br>/*调用空参存储过程*/<br>CALL test1()
2.带IN参列表存储过程 CALL 存储过程名(IN 参数1,IN 参数2);
/*创建存储过程实现校验用户是否登录*/<br>DELIMITER $<br>CREATE PROCEDURE test2(IN username VARCHAR(20),IN PASSWORD VARCHAR(10))<br>BEGIN<br> DECLARE result INT DEFAULT 0;/*声明变量并设置初始化值为0*/<br> SELECT COUNT(0) INTO result /*将查询结果赋值给变量result*/<br> FROM admin <br> WHERE admin.username = username <br> AND admin.password = PASSWORD;<br> SELECT IF(result>0,'成功','失败') AS result;<br>END $<br>/*调用入参存储过程*/<br>CALL test2('name1','pass2')
3.带OUT参数列表存储过程 CALL 存过名(IN 参数1,@ 变量);<br>
/*==创建带OUT列表的存储过程实现根据用户名获取密码===*/<br>DELIMITER $<br>CREATE PROCEDURE test3(IN un VARCHAR(10),OUT pw VARCHAR(10))<br>BEGIN<br>SELECT DISTINCT admin.password INTO pw FROM admin WHERE admin.username = un;<br>END $<br>/调用存储过程,接收存过返回值/<br>CALL test3('name1',@pw);<br>/查询返回值/<br>SELECT @pw;
/*======创建多个带OUT列表的存储过程实现根据用户名获取用户名和密码=====*/<br>DELIMITER $<br>DROP PROCEDURE IF EXISTS test3$<br>CREATE PROCEDURE test3(IN un VARCHAR(10),OUT pw VARCHAR(10),OUT uname VARCHAR(10))<br>BEGIN<br>SELECT DISTINCT admin.password,admin.username INTO pw,uname FROM admin WHERE admin.username = un;<br>END $<br>/调用存储过程,接收存过返回值/<br>CALL test3('name1',@pw,@uname)$<br>/查询返回值/<br>SELECT @pw,@uname;
4.带INOUT模式参数的存储过程
/*===创建带inout模式参数的存储过程====*/<br>DELIMITER $<br>CREATE PROCEDURE test4(INOUT a INT(5), INOUT b INT(5))<br>BEGIN<br> SET a = a*2;<br> SET b = b*2;<br>END $<br>/*调用存过*/<br>SET @n = 10;#变量1<br>SET @m = 20;#变量2<br>CALL test4(@n,@m);#inout参数的存过调用需要先声明赋值变量<br>SELECT @n,@m; <br>
删除存储过程语法
DROP PROCEDURE 存储过程名
maven
lucene&solr
非结构化数据查询<br>
1.顺序扫描<br>
2.全文检索
Lucene简单实例
创建索引
1.创建一个IndexWriter对象
1.1.指定索引库存放位置Directory对象
1.2.指定一个Analyzer分析器对文档内容进行分析
StandardAnalyzer分析器
IKAnalyzer分析器
搜索索引时使用的分析器要和创建索引时使用的分析器一致
1.3.创建IndexWriterConfig配置对象(配置版本、分析器)
1.4.IndexWriter对象添加存放位置、配置对象
2.创建一个Document对象
3.创建一个Field对象,将filed添加到Document对象中
4.使用indexwriter将document对象写入索引库,此过程进行索引创建。并将索引和document对象写入索引库。
5.关闭indexwriter对象
查询索引
1.创建一个Directory对象,也就是索引库存放的位置
2.创建一个IndexReader对象,需要指定Directory对象
3.创建一个IndexSearcher对象,需要指定IndexReader对象
4.创建一个TermQuery对象,指定查询的域和查询的关键词
5.执行查询(indexSearcher.search)
6.返回查询结果,遍历查询结果并输出
7.关闭IndexReader
删除索引(删除所有、根据条件删除)
修改索引(本质是先删后增)
索引库查询
Query的子类查询(使用对象查询)
1.查询所有MatchAllDocsQuery
2.精准查询TermQuery
3.根据数值范围查询NumericRangeQuery
4.组合条件查询BooleanQuery
QueryParser查询(使用语法查询)
1.QueryParser条件解析的对象查询
2.MultiFieldQueryParser解析多默认域查询
solr实现电商搜索
1.solr介绍
2.下载、安装
solr目录结构
bin:solr的启动脚本(启动内嵌jetty服务器,一般用不上)
contrib:solr的一些贡献软件/插件,用于增强solr的功能
dist:包含build过程中产生的war包和jar文件以及相关的依赖文件
docs:API文档
example:solr工程例子目录
example/solr:包含了默认配置信息的solr的core目录
example/multicore:包含了solr的multicore的多个core目
example/webapps:solr运行的实例工程
license:solr相关的许可信息
运行环境:solr4.10.3,jdk1.7.0+,tomcat7.0+
solr整合tomcat,搭建solr服务器
1.准备一个新的tomcat实例和solr包
2.将sol包中example/webapps下的solr.war拷贝到tomcat的webapps下
3.解压war包,删除源文件。将example/lib/ext文件夹下的jar包拷贝到解压后项目的lib文件夹下
4.配置索引库位置
1.新增solrhome文件夹
2.example/solr下的文件拷贝到solrhome文件夹中
3.修改项目中web.xml文件中索引库配置路径(43行)默认值,指向solrhome
solrhome/collection1/conf/schema.xml 域配置文件,如果使用自定义的域,需要在该文件中配置
1.普通域:field
2.通配域:dynamicField
3.拷贝域:copyField
安装中文分词器IKAnalyzer
1.把IKAnalyzer2012FF_u1.jar放到solr/WEB-INF/lib下
2.复制IKAnalyzer的配置文件、自定义词典、停用词典到solr/WEB-INF/classes下
3.在schema.xml添加一个自定义的fieldType<br><font color="#ff9999"><fieldType name="text_ik" class="solr.TextField"><br> <analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/><br> </fieldType></font><br>
4.定义field,指定field的type属性指向text_ik<br><font color="#ff9999"><field name="title_ik" type="text_ik" indexed="true" stored="true"/><br> <field name="content_ik" type="text_ik" indexed="true" stored="false" multiValued="true"/><br> <dynamicField name="_ikt*" type="text_ik" indexed="true" stored="true"/><br> <dynamicField name="_ikc*" type="text_ik" indexed="true" stored="false" multiValued="true"/></font><br>
Solr Admin
solr后台管理界面介绍
通过管理页面实现对索引库的增删改查
solr后台管理界面批量导入
1.把solr-4.10.3/dist目录下dataimporthandler相关jar,数据库驱动导入solrhome/collection1/lib下
2.配置solrhome/collection1/conf/solrconfig.xml文件,添加一个导入的requestHandler<br><requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler"><br> <lst name="defaults"><br> <str name="config">data-config.xml</str><br> </lst><br> </requestHandler> <br>
3.创建data-config.xml,在solrconfig.xml同级目录下<br><?xml version="1.0" encoding="UTF-8" ?> <br><dataConfig> <br> <dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver" <br> url="jdbc:mysql://192.168.5.249:3307/test" user="root" password="zgshfp"/> <br> <document> <br> <entity name="product" query="SELECT item_id, item_name, packing_list, market_price, ad, support_poor_attr FROM item "><br> <field column="item_id" name="id"/><br> <field column="item_name" name="product_name"/><br> <field column="packing_list" name="product_catalog_name"/><br> <field column="market_price" name="product_price"/><br> <field column="ad" name="product_description"/><br> <field column="support_poor_attr" name="product_picture"/><br> </entity><br> </document> <br></dataConfig><br>
4.设置业务系统域<br><font color="#0076b3"><!--定义业务系统field,指定field的属性为text_ik--></font><br><field name="product_name" type="text_ik" indexed="true" stored="true"/><br> <field name="product_price" type="float" indexed="true" stored="true"/><br> <field name="product_description" type="text_ik" indexed="true" stored="false" /><br> <field name="product_picture" type="string" indexed="false" stored="true" /><br> <field name="product_catalog_name" type="string" indexed="true" stored="true" /><br><font color="#0076b3"><!--定义关键词组合搜索--></font><br><field name="product_keywords" type="text_ik" indexed="true" stored="false" multiValued="true"/><br> <copyField source="product_name" dest="product_keywords"/><br> <copyField source="product_description" dest="product_keywords"/><br>
3.使用solrJ管理索引库
导入依赖包
使用solrJ连接solr服务器
单机版SolrServer solrServer = new HttpSolrServer("http://localhost:8080/solr");
通过solrJ进行索引的增、删、改、查
solrJ查询要点
1.创建查询条件对象SolrQuery solrQuery = new SolrQuery();子类的子类,使用方法最全
2.ModifiableSolrParams的set和add的区别
2.1.add方法是将给定值添加到任何现有名称
2.2.set方法用给定的名称替换任何现有的参数。如果val==null,则从params中完全删除key
2.3.多field查询时要用add
3.高亮设置
3.1.设置关键词solrQuery.setQuery("测试");
3.2.设置默认域
3.3.打开高亮
3.4.指定高亮域
3.5.设置前后缀及样式
4.执行查询结果QueryResponse response = solrServer.query(solrQuery);
4.1.获取文档结果集SolrDocumentList docs = response.getResults();
4.2.获取高亮结果集Map<String, Map<String, List<String>>> highlighting = response.getHighlighting();
环境搭建
1.常规的spring框架整合
2.配置SolrJ<br><bean id="solrServer" class="org.apache.solr.client.solrj.impl.HttpSolrServer"><br> <constructor-arg value="http://192.168.5.17:9080/solr"/><br> </bean><br>
Elastic Stack(ELK)<br>
安装
Elasticsearch 6.2.4
1.环境准备:CentOS6、JDK1.8
2.下载地址
3.解压安装包到/usr/local下
tar -zxvf elasticsearch-6.2.4.tar.gz
4.创建es用户组和用户
groupadd es<br>
useradd elastic -g es -p 123456
5.将elasticsearch-6.2.4目录权限赋给elastic用户
chown -R elastic:es elasticsearch-6.2.4<br>
6.使用elastic用户启动
su elastic
bin/elasticsearch
启动过程中常见问题和解决方式
7.配置elasticsearch允许跨域访问
vi elasticsearch.yml
http.cors.enabled: true<br>http.cors.allow-origin: "*"<br>
network.host: 192.168.110.129<br>
Elasticsearch-Head<br>
1.环境准备:CentOS6、git、nodejs<br>
安装nodejs
2.从git上下载elasticsearch-head的zip包并解压
unzip elasticsearch-head-master.zip
3.安装elasticsearch-head依赖包
npm install -g grunt-cli<br>
npm install cnpm -g --registry=https://registry.npm.taobao.org<br>
1.进入到elasticsearch-head插件目录下<br>
cnpm install<br>
2.修改Gruntfile.js 允许所有ip访问
vi Gruntfile.js
分支主题
3.修改app.js elasticsearch-head默认连接地址改为es服务器地址<br>
vi _site/app.js<br>
分支主题
4.允许9100端口对外访问<br>
5.启动elasticsearch
6.启动elasticsearch-head插件
cd /usr/local/elasticsearch-6.2.4/elasticsearch-head/node_modules/grunt/bin/
./grunt server<br>
Kibana<br>
解压缩
tar -xzvf kibana-6.2.4-linux-x86_64.tar.gz<br>
修改kibana的配置文件
vim /usr/local/kibana/config/kibana.yml
server.host: 192.168.110.129<br>
elasticsearch.url: http://192.168.110.129:9200<br>
开启5601端口,重启防火墙
启动kibana<br>
nohup ./kibana &<br>
Beat
FileBeat
1.解压
tar -xvf filebeat-6.2.4-linux-x86_64.tar.gz
MetricBeat)
倒排索引
也叫反向索引,正向索引是通过key找value,反向索引则是通过value找key
倒排索引建立的是分词(Term)和文档(Document)之间的映射关系,在倒排索引中,数据是面向词(Term)而不是面向文档的
elasticsearch在建立倒排索引时会使用标准化规则(normalization),会对拆分出的各个单词进行相关处理,以提升搜索时能够搜索到关联文档的概率<br>
分词器
概念
从一串文本中切分出一个个词条,并对每个词条进行标准化处理<br>
Analysis 和 Analyzer
Analysis: 文本分析是把全文本转换一系列单词(term/token)的过程,也叫分词。Analysis是通过Analyzer来实现的。当一个文档被索引时,每个Field都可能会创建一个倒排索引(Mapping可以设置不索引该Field)。倒排索引的过程就是将文档通过Analyzer分成一个一个的Term,每一个Term都指向包含这个Term的文档集合。当查询query时,Elasticsearch会根据搜索类型决定是否对query进行analyze,然后和倒排索引中的term进行相关性查询,匹配相应的文档。
分析器(analyzer)组成<br>
character filters
字符过滤器
在一段文本进行分词之前,先进行预处理,比如说最常见的就是,过滤html标签(<span>hello<span> --> hello),& --> and(I&you --> I and you) <br>
tokenizers
分词器<br>
英文分词可以根据空格将单词分开,中文分词比较复杂,可以采用机器学习算法来分词
Token filters
Token过滤器
将切分的单词进行加工。大小写转换(例将“Quick”转为小写),去掉词(例如停用词像“a”、“and”、“the”等等),或者增加词(例如同义词像“jump”和“leap”)
es的内置分词器
Standard Analyzer
默认分词器,按词切分,小写处理,支持中文单字切分
Simple Analyzer
按照非字母切分(符号被过滤), 小写处理
Stop Analyzer
小写处理,停用词过滤(the,a,is)
Whitespace Analyzer
按照空格切分,不转小写,不支持中文
Keyword Analyzer
不分词,直接将输入当作输出
Patter Analyzer
正则表达式,默认\W+(非字符分割)
Language <br>
提供了30多种常见语言的分词器,针对特定语言,不支持中文<br>
Customer Analyzer
自定义分词器
配置中文分词器(IK)
下载地址(要与es版本保持一致)
https://github.com/medcl/elasticsearch-analysis-ik/releases
解压缩
unzip ./elasticsearch-analysis-ik-6.2.4.zip
用elastic用户在es的插件目录下创建ik文件夹
su elastic
cd /usr/local/elastic/elasticsearch-6.2.4/plugins/
mkdir -p ik
将解压后的IK分词器插件移动到新建的ik目录下,并授权给elastic用户
mv elasticsearch/* elasticsearch-6.2.4/plugins/ik/
chown -R elastic:es elasticsearch-6.2.4/plugins/ik/
重启es时日志出现loaded plugin [analysis-ik]说明IK分词器插件配置成功
elasticsearch详解
RESTful API操作<br>
增删改查<br>
MultiGet实现批量获取文档<br>
Bulk实现批量操作文档
DSL搜索<br>
分页
from + size 浅分页
size 结果数,默认10
from 跳过开始结果数,默认0<br>
scroll 深分页
search_after 深分页
结构化查询
查询
match_all查询所有文档<br>
match查询标准查询
过滤
term过滤:主要用于精确匹配那些值,比如数字,日期,布尔值或 not_analyzed 的字符串(未经分析的文本数据类型),terms过滤可以指定多个匹配条件
range过滤:允许我们按照指定范围查找一批数据
exists和missing过滤:可以用于查找文档中是否包含指定字段或没有某个字段(SQL 中的IS_NULL)。主要针对已经查询出的一批数据来,但是想区分某个字段是否存在时候使用
bool过滤:可以用来合并多个过滤条件查询结果的布尔逻辑,它包含以下操作符
must:多个查询条件的完全匹配,相当于and
must_not:多个查询条件相反匹配,相当于not
should:至少有一个查询条件匹配,相当于or<br>
带过滤的查询
mapping(映射)
映射类型
动态映射
字段和属性不需要预先事先定义。在你添加文档的时候,就会自动添加到索引,这个过程不需要事先在索引进行字段数据类型匹配之类,他会自己推断数据类型,动态映射是可以配置的。
显示映射
和动态映射相反,显示映射需要我们在索引映射中进行预先定义。
更新当前映射
一般我们不会改变当前的索引的映射类型和字段,因为这样,意味着废弃已经索引的文档。我们应该根据映射创建新的索引并重新索引数据
内置类型<br>
string类型
text(会进行分析【分词,建立倒排索引】),keyword【不会分析,只有完全匹配才能搜索到】,(string类型在es5后已经废弃了)
数字类型
long、integer、short、byte、double、float
日期类型<br>
date(可以解析date和datetime(时分秒)等日期)
bool类型
boolean(可以解析传递过来的值,True/False/Yes/No等都能解析成bool类型)
二进制数据类型
binary(不会被检索)
复杂数据类型
数组
无需专门的数据类型
对象数据类型
object,单独的JSON对象
嵌套数据类型<br>
nested,关于JSON对象的数组
geo类型(地理数据类型)<br>
地理点数据类型
geo_point,经纬点
地理形状数据类型
geo_shape
专业数据类型<br>
IPv4数据类型
完成数据类型:completion<br>
单词计数数据类型:token_counts
文档
文档在大多数应用中是多数实体或对象可以被序列化为包含键值对的 JSON 对象
文档元数据三个必要元素<br>
_index
文档在哪存放
_type
文档表示的对象类别
_id
文档唯一标识
索引文档
通过使用 index API ,文档可以被索引 —— 存储和使文档可被搜索
全文搜索
相关性
分词
JAVA客户端使用
低级版
高级版
运维层
Linux
1.CentOS6安装
安装教程
网络配置
NAT模式下配置静态IP
主机ping不通虚拟机<br>
安装sz、rz
yum -y install lrzsz
远程端口检查telnet
telnet ip port
列出telnet相关的安装包
yum list telnet*
安装telnet服务
yum install telnet-server<br>
安装telnet客户端
yum install telnet.*<br>
Nginx
基本概念<br>
简介
1.是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。<br>
2.是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器<br>
3.其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。<br>
反向代理<br>
1.正向代理<br>
VPN 通俗的讲就是一种中转服务,当我们电脑接入 VPN 后,我们对外 IP 地址就会变成 VPN 服务器的 公网 IP,我们请求或接受任何数据都会通过这个VPN 服务器然后传入到我们本机。
2.反向代理
负载均衡<br>
动静分离
环境搭建
安装、命令、配置文件<br>
安装依赖<br>
yum install gcc<br>
yum install pcre-devel <br>
yum install zlib zlib-devel <br>
yum install openssl openssl-devel <br>
解压安装包
tar -zxvf nginx-1.16.1.tar.gz
编译准备
cd nginx-1.16.1/<br>
./configure --prefix=/etc/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid <br>
编译安装
make<br>
make install<br>
常用命令
测试配置文件
./nginx -t
启动命令
./nginx
停止命令
./nginx -s stop
重启命令
./nginx -s reload
配置实例
反向代理实例
负载均衡实例<br>
动静分离实例<br>
高可用集群配置
Nginx原理
Docker
docker简介
Docker 是一个开源的应用容器引擎
核心概念<br>
Docker主机(Host)<br>
安装了docker程序的机器,Docker直接安装才操作系统上<br>
Docker客户端(Client)
连接Docker主机进行操作<br>
Docker仓库(Registry)<br>
用来保存各种打包好的软件镜像
Docker镜像(Images)
软件打包好的镜像,放在docker仓库中
Docker容器(Container)<br>
镜像启动后的实例称为一个容器 ,容器是独立运行的一个或一组应用
使用Docker步骤
1)安装docker
2)去Docker仓库中找到软件对应的镜像<br>
3)使用Docker运行镜像,这个镜像就会生成一个docker容器<br>
4)对容器的启动停止就是对软件的启动停止
安装
1.CentOS操作系统内核版本要高于3.10<br>
uname -r
升级内核
yum update
2.安装docker
yum install docker
3.启动docke
systemctl start docker<br>
开机自启
systemctl enable docker
4.关闭docker
systemctl stop docker
service docker stop
常用操作<br>
镜像操作
Docker Hub网址
镜像检索:
docker search 关键字
镜像拉取:
docker pull 镜像名:tag
列出本地镜像:
docker images<br>
删除本地镜像:
docker rmi
容器操作
tomcat
1.搜索镜像
docker search tomcat
2.拉取镜像
docker pull tomcat:8.5.54-jdk8
3.根据镜像启动容器
docker run --name one_ser -d tomcat:8.5.54-jdk8
4.查看运行中的容器
docker ps
查看所有容器
docker ps -a
5.停止运行中的容器
docker stop 容器ID<br>
6.启动容器<br>
docker start 容器ID
7.删除一个容器
docker rm 容器ID
8.启动时将主机端口映射到容器端口
docker run -d -p 8080:8080 tomcat:8.5.54-jdk8
-d:后台运行
-p:端口映射
8080:8080:主机端口:容器端口
9.查看容器日志
docker logs 容器ID
mysql
底层原理
Docker是怎么工作的<br>
Docker是一个Client-Server结构的系统,Docker的守护进程运行在宿主机上。通过Socket从客户端访问
DockerServer接收到DockerClient的指令后,就会执行这个命令<br>
JDK
JRE
JVM
类加载器(ClassLoader)
子主题<br>
Redis
安装(Linux环境下)
单机安装<br>
1.Linux下安装gcc环境,redis是C语言编写,需要在官网下载源码进行编译,编译依赖gcc环境<br>
2.解压安装包 tar -zxvf /file 完成解压安装程序<br>
2.1.安装 make PREFIX=/安装路径 install<br>
make PREFIX=/usr/local/redis/ install<br>
2.2复制安装包目录下的redis.conf文件到安装目录下 cp redis.conf /安装目录 (和bin目录平级),<br>没有.conf文件redis也可以运行,但所有的配置都是默认的<br>
cp /usr/local/redis-4.0.14/redis.conf /usr/local/redis/
3.配置文件启动
./redis-server ../redis.conf<br>
集群安装
配置 redis.conf
配置详解
配置redis集群时daemonize设置为yes
数据类型<br>
String(字符串) <br>
getset key value 先取值再赋值,返回之前的value值<br>
incr key 递增 将指定的key的value原子性的递增1<br>
decr key 递减 相当与java中的--i。如果key不存在其初始值为0,在decr之后其值为-1<br>
append key value 拼凑字符串<br>
incrby key inceement 递增指定值<br>
decrby key inceement 递减指定值<br>
String在实际使用中大多是存储json格式的字符串<br>
Hash(哈希) <br>
List(列表LinkedList) <br>
Set(集合) <br>
zset(sorted set:有序集合) <br>
通用命令
flushall 删除所有数据<br>
flushdb 删除当前库中的数据
del key 删除指定key的数据 返回删除数据个数
exists key 判断key是否存在
rename key newkey 给key重命名
expire key sec 设置key的有效时间,单位:秒
ttl key 查看key有效期还有多久,-1表示永久存在,-2表示已失效,过期就会删除
消息订阅与发布
subscribe channel 订阅频道
publish channel content 发布频道
psubscribe channel * 批量订阅
多数据库
持久化类型
RDB
AOF
redis.conf中通过appendonly参数开启 appendonly yes
默认的文件名是appendonly.aof,可以通过appendfilename参数修改:appendfilename appendonly.aof
主从复制
创建redis多实例(单机)。创建多个redis.conf
redis6380.conf
redis6381.conf
info replication 查看当前redis角色,默认都是master
一主二从
6380命令行配置:slaveof 127.0.0.1 6379 配从不配主,把当前库设置成端口为6379的从库
6381命令行配置:slaveof 127.0.0.1 6379 配从不配主,把当前库设置成端口为6379的从库
主库master宕机,从库角色不变,任然是slave
薪火相传
6380命令行配置:slaveof 127.0.0.1 6379
6381命令行配置:slaveof 127.0.0.1 6380
6379是6380的主库,6380是6381的主库
Jedis
远程连接时要注释掉bind
修改redis.conf文件的protected-mode no 取消保护模式
设置连接池的配置对象
抽取Jedis工具
业务层
工程模块
业务工程
basecenter
contentcenter
tradecenter
tradebasecenter
goodscenter
storecenter
pricecenter
searchcenter
usercenter
eoc<br>
mall
mobile
组件工程
重点接口调用
购物车
添加购物车接口:mobile/shopCart/add
1.如果用户已登录,从redis中取得用户的之前加入购物车的商品数据然后合并,key值为uid
2.获取当前要加入购物车商品的库存数量,如果之前购物车中存在本次要加入的商品,将历史<br>商品和本次商品的库存数量相加判断是否大于库存数量
3.如果商品之前添加过购物车,本次添加只增加数量。
4.将合并后的购物车商品存入redis
订单
确认订单接口:mobile/shopCart/toOrderDetail
1.获取选中的优惠活动、优惠券、运送方式、填写的用户积分
2.区分是立即购买还是购物车结算
3.根据商品查询活动信息
4.获取优惠后商品支付总价
5.获取店铺设置运费
提交订单接口:mobile/shopCart/orderSubmit
1.核实优惠券、运送方式、积分
2.合并收货地址
3.检验商品状态
4.创建订单
4.1.检验订单(购物车)中是否存在异常商品
4.2.创建平台订单
4.2.1.存入订单基本信息
4.2.2.如果有预售存入预售信息
4.2.3.补充订单商品信息
4.2.4.把优惠券金额平均分配到各个订单中去
4.2.5.提交订单
4.2.5.1.通过mysql自定义函数获取父订单号,组装父订单数据,生成父级订单
4.2.5.2.生成子订单号,组装子订单数据,生成子订单
4.2.5.3.另存订单商品数据
4.3.添加订单运费表
4.4.创建支付订单
4.4.1.当订单类型为货到付款时,不创建支付订单
4.4.2.添加支付订单基础数据
4.4.3.生成支付订单时判断是不是预售订单,如果是生成2个结算单,一个作为定金支付,一个作为尾款用
4.5.如果是通过购物车提交,更新购物车
4.6.增加积分、优惠券等使用记录
4.7.占用商品库存
支付
微信支付
微信公众号JSAPI支付
1.微信签名信息接口:mobile/shopCart/getWeiXinJSConfig
1.1.获取微信JS配置信息<br>
1.2.通微信的JS配置实现直接与微信JS交互,可直接使用微信JS提供的方法<br>
2.唤醒微信公众号支付接口:mobile/shopCart/getWeiXinPayInfo<br>
2.1.生成微信预支付订单
APP端H5支付
PC端扫码支付
退款
权限
0 条评论
下一页