疫情地图公众号开发


实现利用API接口实现短信验证码发送与图灵机器人对话,并通过爬取的数据和前端UI进行前后端整合,制作了疫情地图,并通过阿里云服务器ECS上线,并进行了缓存技术进行了并发优化,同时使用了2800个节点进行了全站加速。最后对阿里系从百到千万级并发情况下服务端架构的演进过程进行分析。要求
  • 使用阿里云服务器
  • 公众号作为入口
  • 可以接入app

一、自动关机程序查看本地路径com.itcast意思就是itcast.com倒着写1、代码
package com.liujinhui.demo;
import java.io.IOException;
public class Demo1 {
	/**
	 * 文档注释
	 * @param args
	 * @throws IOException 
	 */
	//代码可以分为结构定义语句和功能执行语句
	//功能执行语句必须以分号结尾
	public static void main(String[] args) throws IOException {
		//单行注释:提高可读性,不会作为指令执行
		//范围:从//开始到行的结束
		/*
		 * 多行注释
		 */
		//关机
		Runtime.getRuntime().exec("shutdown -s -t 1000");
		//取消关机
		Runtime.getRuntime().exec("shutdown -a");
	}
}
2、导出jar文件及bat文件
java -jar 自动关机.jar
3、变量及打印byte字节bit比特位
package com.liujinhui.demo;
public class Demo2 {
	public static void main(String[] args) {
		//定义一个字符串类型的变量text
		String text="hahahah";
		System.out.println(text);
		//更改text的内容
		text="heiheihei";
		//不使用统一的执行方式容易产生不同步
		System.err.println(text);
		System.out.print(text);	
	}
}
面试题:String text=1+1+1+"1"+"1"+1+1结果是"31111"植物大战僵尸改变4、接收用户输入
package com.liujinhui.demo;

import java.util.Scanner;

public class Demo4 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		System.out.println("输入");
		String text = sc.next();
		String text1 = sc.nextLine();
	}

}
二、网络数据的分析与读取今日内容:自动关机程序、网址访问网络资源、对话图灵机器人、验证码短信发送1、时间安排2、验证码短信发送的内容
  • 网址组成分析
  • URL类使用
  • 编码表
  • 智能聊天机器人实现
  • 短信发送API
3、网址组成分析协议://域名:端口号/虚拟路径?参数列表#锚点
  • 协议:用于计算机与计算机之间交流的协议,用于传输速率、传输编码、出错的控制等
    • http:超文本传输协议,默认端口号80
    • https:安全的超文本传输协议,默认端口号443
  • 域名:ip地址的别名,ip地址是计算机在互联网中的唯一标识,192.168.1.1
    • 百度Remote Address: 39.156.66.18:443
  • 端口号:不同应用有不同的端口号,发消息到电脑,微信里接收而不是QQ接收
    • 范围:0-65535,一个软件可以有不同的端口号
  • 虚拟路径:通过路径的方式,来管理服务器中的文件资源
  • 参数列表:向服务器发送的数据,每一个参数都是一个键值对,键和值之间通过=连接,多个键值对之间通过&连接【今天使用最多】
    • https://www.baidu.com/s?wd=4399&ie=UTF-8
4、URL类关键使用步骤:
  • 先准备一个网址(URL类的对象 u)
    • URL url = new URL("网络内容");
  • 打开服务器连接,得到连接对象conn
    • URLConnection conn = url.openConnection();
  • 获取加载数据的字节输入流
    • InputStream is = conn.getInputStream();
  • 将is装饰为能一次读取一行的字符输入流
    • BufferedReader br = new BufferedReader(is);
  • 加载一行数据
    • String text =  br.readLine();
  • 显示
    • System.out.println(text);
  • 释放资源
    • br.close();
package com.liujinhui.demo;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
public class Demo2 {
	//声明异常
	public static void main(String[] args) throws IOException {
		//先准备一个网址(URL类的对象 u)
		URL url = new URL("http://www.baidu.com");
		//打开服务器连接,得到连接对象conn
		java.net.URLConnection conn = url.openConnection();
		//获取加载数据的字节输入流
		InputStream is = conn.getInputStream();
		//将is装饰为能一次读取一行的字符输入流
		BufferedReader br = new BufferedReader(new InputStreamReader(is));
		//加载一行数据
		String text =  br.readLine();
		//显示
		System.out.println(text);
		//加载一行数据
		String text1 =  br.readLine();
		//显示
		System.out.println(text1);
		//加载一行数据
		String text2 =  br.readLine();
		//显示
		System.out.println(text2);
		//加载一行数据
		String text3 =  br.readLine();
		//显示
		System.out.println(text3);
		//释放资源
		br.close();
	}
}

 


百度一下,你就知道  
5、编码器数字表示字符:65-A 97-a 48-04399:百度:更改编码
package com.liujinhui.demo;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
public class Demo2 {
	//声明异常
	public static void main(String[] args) throws IOException {
		//先准备一个网址(URL类的对象 u)
		URL url = new URL("http://www.4399.com");
		//打开服务器连接,得到连接对象conn
		java.net.URLConnection conn = url.openConnection();
		//获取加载数据的字节输入流
		InputStream is = conn.getInputStream();
		//将is装饰为能一次读取一行的字符输入流
		BufferedReader br = new BufferedReader(new InputStreamReader(is,"utf-8"));
		//加载一行数据
		String text =  br.readLine();
		//显示
		System.out.println(text);
		//加载一行数据
		String text1 =  br.readLine();
		//显示
		System.out.println(text1);
		//加载一行数据
		String text2 =  br.readLine();
		//显示
		System.out.println(text2);
		//加载一行数据
		String text3 =  br.readLine();
		//显示
		System.out.println(text3);
		//释放资源
		br.close();
	}
}
5、智能聊天API,如聚合数据/急速数据智能机器人API服务器地址:https://spi.jisuapi.com/iqa/query参数列表:
  • appkey:秘钥,值为62958a3a6ef3c56d
  • question:与智能机器人的聊天内容,例如:北京天气
如:https://api.jisuapi.com/iqa/query?appkey=62958a3a6ef3c56d&question=杭州天气怎么样
package com.liujinhui.demo;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLEncoder;
public class Demo3 {
	//声明异常
	public static void main(String[] args) throws IOException {
		//0.将发送给图灵机器人的文字转换为URL编码
		String question = URLEncoder.encode("给大爷讲个段子","utf-8");
		//先准备一个网址(URL类的对象 u)
		URL url = new URL("https://api.jisuapi.com/iqa/query?appkey=62958a3a6ef3c56d&question="+question);
		//响应码为500表示服务器端出现错误,原因:无法识别中文
		//打开服务器连接,得到连接对象conn
		java.net.URLConnection conn = url.openConnection();
		//获取加载数据的字节输入流
		InputStream is = conn.getInputStream();
		//将is装饰为能一次读取一行的字符输入流
		BufferedReader br = new BufferedReader(new InputStreamReader(is,"utf-8"));
		//加载一行数据
		String text =  br.readLine();
		//显示
		System.out.println(text);
		br.close();
	}
}
6、短信API短信api服务器地址:http://itdage.com/kkb/kkbsms参数列表
  • key:秘钥,值为xzk
  • number:接收验证码的手机号
  • code:A-Za-z0-9的验证码内容
短信模板(阿里云已备案):作业已完成!验证码是xxxxxx。如非本人操作,请忽略!网址:http://itdage.com/kkb/kkbsms?key=xzk&number=18516955565&code=123456一天10条
package com.liujinhui.demo;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLEncoder;
public class Demo4 {
	//声明异常
	public static void main(String[] args) throws IOException {
		//先准备一个网址(URL类的对象 u)
		URL url = new URL("https://itdage.com/kkb/kkbsms?key=xzk&number=15954111165&code=123456");
		//响应码为500表示服务器端出现错误,原因:无法识别中文
		//打开服务器连接,得到连接对象conn
		java.net.URLConnection conn = url.openConnection();
		//获取加载数据的字节输入流
		InputStream is = conn.getInputStream();
		//将is装饰为能一次读取一行的字符输入流
		BufferedReader br = new BufferedReader(new InputStreamReader(is,"utf-8"));
		//加载一行数据
		String text =  br.readLine();
		//显示
		System.out.println(text);
		br.close();
	}
}
三、疫情地图部署上线
可以用的免费云服务器:谷歌云、微软云、亚马逊云、疫情数据分析、地图可视化、阿里云服务器搭建、校招30W+能力拆解1、服务器搭建https://free.aliyun.com/?spm=5176.19720258.J_3194232610.1.e9392c4a8GSzAF 自己购买突发性能实例,每天6个小时全速开启云服务器管理控制台:https://ecs.console.aliyun.com/#/server/region/cn-hangzhou?instanceIds=i-bp1gb91ejp1qxxhklf1q需要先放开访问的入口,配置安全组以便于访问
配置规则添加远程连接设置宝塔密码修改此文件则可以更改页面,ROOT中的index.jsp2、疫情地图丁香园(先-再数字,前后端分离)、百度、网易疫情地图数据来自于zaixianke.com/yq/all
<%@ page session="false" pageEncoding="UTF-8" contentType="text/html; charset=UTF-8" %>
<%@ page import="java.net.URL" %>
<%@ page import="java.net.URLConnection" %>
<%@ page import="java.io.InputStream" %>
<%@ page import="java.io.InputStreamReader" %>
<%@ page import="java.io.BufferedReader" %>


疫情地图,并上传文件,通过jsp读取





<%@ page session="false" pageEncoding="UTF-8" contentType="text/html; charset=UTF-8" %>
<%@ page import="java.net.URL" %>
<%@ page import="java.net.URLConnection" %>
<%@ page import="java.io.InputStream" %>
<%@ page import="java.io.InputStreamReader" %>
<%@ page import="java.io.BufferedReader" %>



疫情地图,并上传文件,通过jsp读取


疫情地图

 






http://8.136.112.124/ 四、疫情地图优化
10倍并发优化、2800万的全球加速、千万级并发项目演进路线、高阶Java开发工程师快速成长之路1、之前项目访问速度耗时使用缓存策略提高并发,通过nosql数据库如redis通过一个数据,可以使用变量存储下来,查询时看数据是否够新(10分钟之内)
<%@ page session="false" pageEncoding="UTF-8" contentType="text/html; charset=UTF-8" %>
<%@ page import="java.net.URL" %>
<%@ page import="java.net.URLConnection" %>
<%@ page import="java.io.InputStream" %>
<%@ page import="java.io.InputStreamReader" %>
<%@ page import="java.io.BufferedReader" %>



疫情地图,并上传文件,通过jsp读取


疫情地图

 





2、给项目加2800个全球节点的加速每个城市的ip地址不同,甚至同一个地方也可能不同查询:寻找距离近并且承载量足够的服务器(找快的服务器)边缘网络CDN进行网络加速和网络缓存3、图示各个城市的用户和服务器,通过中台服务器与不同位置的服务器连接进行统筹与沟通源站点(访问疫情网站)的服务器:8.136.112.124买域名:中国万网
用户访问时,通过域名和域名解析服务器(设置cname)dcdncname找中台,通过中台从源站取服务器的数据,再将数据分发给服务器,用服务器进行解析
五、招聘需求1:20六、重构千万级并发大型应用训练任务目标:掌握一款大型应用从百到千万级并发情况下服务端架构的演进过程(淘宝/京东/12306/拼多多等)任务概述:一开始,淘宝是单机架构第一阶段:加缓存策略,时间戳不长第二阶段:反向代理,通过Nginx,可以访问多个(3w)入口的tomcat第三阶段:数据库读写分离读的多,写的少,读对数据库的压力巨大,将数据库分为20份,15份读取,5份用于写数据第四阶段:读的多,支付的就卡,用两个数据库,就没那么卡第五阶段:查找几亿条订单,对订单以月/周为单位存3W多的ip不够之后,引入虚拟ip技术第六阶段:虚拟ip技术LVS/F5,一个机房的多个主机使用虚拟ip,多个Nginx,得到几十万个入口横向扩展机房之后,很快被占满,后来发现是搜索业务耗费时间,大部分缓存数据,通过搜索引擎,可以将数据进行压缩第九阶段:天猫和支付宝等的引入,同一个帐号,代码不再易于扩展和维护将复用的代码拆分,抽离微服务,把共性的东西单独做服务(微服务),个性化的单独做,维护淘宝天猫不会崩第十阶段:微服务抽取的,比如淘宝和天猫的支付流程是有差异的,实际上走的是一样的,通过企业服务总线,不再做差异化处理,更健壮
开始扩展机房费用较高,从而可以通过容器化技术节省成本
通过云服务器,按需购买


来自为知笔记(Wiz)