Java编程学习知识点分享 入门必看
Java编程学习知识点分享 入门必看
阿尔法颜色组成(alpha color component):颜色组成用来描述颜色的透明度或不透明度。阿尔法组成越高,颜色越不透明。
API:应用编程接口。针对软件包或“工具箱”的接口说明。API包含了工具箱中所有类或子程序及其使用说明。
Applet:与可以单独运行的应用程序不同,Applet是一种在Web浏览器中运行在Web页面上的Java程序。
动画(animation):由一组静态图片快速显示展示出动态效果。每一幅静态图片叫做帧。在Java中,动画通常由 Timer 对象驱动。每次定时器触发时,会显示动画的下一帧。
反锯齿(antialiasing):当图形和文本以像素方式显示时,可以通过调整像素的颜色减轻“锯齿”效应。反锯齿画图时,图形只覆盖像素的一部分,图形的颜色与该像素之前的颜色混合而成。混合的程度由覆盖像素的多少决定。
数组(array):一个顺序排列的元素列表。列表中,每个元素都可以由自己的索引标识,即序号。在Java中,数组里所有元素必须类型相同,该类型也称作数组的基类型。数组是一种可随机访问的数据结构,也就是说,你可以随时直接访问数组中的任意元素。
数组类型(array type):这种数据类型的值是数组。比如类型的名字为 Type,那么 Type[] 就是数组类型,基类型为 Type。
赋值语句(assignment statement):计算机程序中的一种语句,可以读取或计算数值,并将其存储到变量中。Java中的赋值语句形式为:变量名 = 表达式。
异步事件(asynchronous event):异步事件指发生时间不可预料的事件,计算机程序无法对其控制。像点击鼠标、按键这样的用户输入事件都是异步的。
ASCII码:美国信息交换标准码。这种编码使用7个比特对字符编码。ASCII码只支持128个字符,不支持重音字符、非英语字符、特殊符号或非字符化语言的表意符号,比如中文。Java采用了容量更大、更加完整的Unicode编码处理字符。 基线条件(base case):在递归算法中,基线条件可以直接处理不需要继续递归。
二进制数(binary number):数值被编码为一组0、1序列。一般数字以“10为基数”,二进制数与其类似,只是以“2为基数”。
二叉树(binary tree):二叉树是一种链式数据结构。可以为空树,或者由两棵更小的二叉树(可能为空树)与根节点组成。根节点包含了指向两棵子树的指针。这两棵更小的二叉树被称作左子树和右子树。
比特(bit):一位二进制数,可能是0或1。
黑盒(black box):指系统或组件在使用时无需关心内部结构。黑盒包括接口和实现。在系统中,被当做组件使用的黑盒叫做模块。
块(block):在Java编程中,被花括号({})包围的一组语句称为块。(代码)块用来将一组语句组合成一条语句。块可以为空,表示不包含任何语句,即一对空的花括号。
阻塞操作(blocking operation):一个操作如果需要等待某些事件发生就称为“阻塞”操作,比如从网络连接读取数据。执行阻塞操作的线程会一直处在“阻塞”状态,直到事件发生。处于阻塞状态时,线程不能执行任何指令。而程序中的其它线程可以继续执行。
阻塞队列(blocking queue):当阻塞队列为空时,出队操作会引发阻塞,直到队列中有新成员加入。如果阻塞队列有大小限制,当队列填满时,入队操作也会引起阻塞。
自底向上设计(bottom-up design):自底向上设计是一种软件设计方法。从系统的基础组件开始设计,然后将它们组合成更复杂的组件,诸如此类。1.基本硬件准备,以windows server 2008 为例
//1台主机
//1个万维网域名
//域名通过ssl认证
//--服务器端安装以下--
//------nginx
//------wampserver
//----------Apache
//----------Mysql
//----------PHP
//------node
//---------express
//------pm2
1.以腾讯云为例 服务器搭建
1.主机与域名DNS解析
1.购买云主机,购买成功以后,如图:
2.购买域名,购买成功并认证,如图:
3.添加域名解析规则:
4.SSL 认证:
5.ssl 认证
认证成功,就可以下载证书配置自己服务器了。
不同服务器具体配置如下:
参考https://www.qcloud.com/document/product/400/4143
2. 笔者使用的是 Nginx 证书部署
2.1 获取证书
Nginx文件夹内获得SSL证书文件 1www.domain.com_bundle.crt 和私钥文件 2www.domain.com.key, 1_www.domain.com_bundle.crt 文件包括两段证书代码 “-----BEGIN CERTIFICATE-----”和“-----END CERTIFICATE-----”, 2_www.domain.com.key 文件包括一段私钥代码“-----BEGIN RSA PRIVATE KEY-----”和“-----END RSA PRIVATE KEY-----”。
2.2 证书安装
将域名 www.domain.com 的证书文件1www.domain.com_bundle.crt 、私钥文件2www.domain.com.key保存到同一个目录,例如/usr/local/nginx/conf目录下。 更新Nginx根目录下 conf/nginx.conf 文件如下:
server {
listen 443;
server_name www.domain.com; #填写绑定证书的域名
ssl on;
ssl_certificate 1_www.domain.com_bundle.crt;
ssl_certificate_key 2_www.domain.com.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #按照这个协议配置
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;#按照这个套件配置
ssl_prefer_server_ciphers on;
location / {
root html; #站点目录
index index.html index.htm;
}
}
配置完成后,先用bin/nginx –t来测试下配置是否有误,正确无误的话,重启nginx。就可以使 https://www.domain.com 来访问了。
注:
配置文件参数 |
说明 |
listen 443 |
SSL访问端口号为443 |
ssl on |
启用SSL功能 |
ssl_certificate |
证书文件 |
ssl_certificate_key |
私钥文件 |
ssl_protocols |
使用的协议 |
ssl_ciphers |
配置加密套件,写法遵循openssl标准 |
2.3 使用全站加密,http自动跳转https(可选)
对于用户不知道网站可以进行https访问的情况下,让服务器自动把http的请求重定向到https。 在服务器这边的话配置的话,可以在页面里加js脚本,也可以在后端程序里写重定向,当然也可以在web服务器来实现跳转。Nginx是支持rewrite的(只要在编译的时候没有去掉pcre) 在http的server里增加rewrite ^(.*) https://$host$1 permanent; 这样就可以实现80进来的请求,重定向为https了。
服务器配置
参考文档:https://github.com/tencentyun/wafer
后台服务原理:
2.接下来配置服务器(以官方三木聊天室demo为例)
2.1 nginx 配置
server {
listen 443;
server_name www.lovmin.cn; #填写绑定证书的域名
ssl on;
ssl_certificate 1_www.lovmin.cn_bundle.crt;#下载好的证书文件
ssl_certificate_key 2_www.lovmin.cn.key;#下载好的证书文件
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #按照这个协议配置
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;#按照这个套件配置
ssl_prefer_server_ciphers on;
location / {
proxy_pass localhost:5757;#node服务器地址与端口,因为同一台服务器故使用localhost
}
}
2.2 聊天室 server服务配置
注意:window server 配置文件需要手动 sdk.config 创建到 C:\qcloud\sdk.config
{
"serverHost": "www.zhangximufeng.com",//服务器域名
"authServerUrl": "http://10.141.19.17:8000/",//鉴证服务器地址(其实就是apache服务器地址)
"tunnelServerUrl": "https://ws.qcloud.com",//这个可以不改,信道服务器地址
"tunnelSignatureKey": "7fb7d1c161b7ca52d73cce0f1d833f9f5b5ec89",//随机码
"networkTimeout":30000//可不改
}
参考文档地址:
https://github.com/tencentyun/wafer-node-server-sdk
demo 源码
https://github.com/tencentyun/wafer-node-server-demo
2.3 apache 服务器(鉴证服务器)配置及数据库设计
鉴证服务器
下载官方 会话服务器源码
会话服务器的源码
https://github.com/tencentyun/wafer-session-server
选择合适的方式部署 Wafer 服务后,按照部署类型:
· 自动部署 - 无需进行任何操作,会话服务器已经可以使用
· 镜像部署 - 按照下面步骤进行初始化工作
· 自行部署 - 按照下面步骤进行初始化工作
环境准备
确保机器中已安装 WAMP 环境。Linux server 可以选择安装LAMP 环境
代码部署
把本项目代码部署到 /opt/lampp/htdocs/mina_auth 目录中。
自动建表
执行下面命令创建运行时所需表:
/opt/lampp/bin/mysql -u root -p mypassword < /opt/lampp/htdocs/mina_auth/system/db/db.sql
初始化 appId 和 appSecret
登录到 MySql 后,手动插入配置到 cAuth 表中。
/opt/lampp/bin/mysql -u root -p root #登录本地mysql
use cAuth;
insert into cAppinfo set appid='Your appid',secret='Your secret';
测试服务可用性
curl -i -d'{"version":1,"componentName":"MA","interface":{"interfaceName":"qcloud.cam.id_skey","para":{"code":"001EWYiD1CVtKg0jXGjD1e6WiD1EWYiC","encrypt_data":"DNlJKYA0mJ3+RDXD/syznaLVLlaF4drGzeZvJFmjnEKtOAi37kAzC/1tCBr7KqGX8EpiLuWl8qt/kcH9a4LxDC5LQvlRLJlDogTEIwtlT/2jBWBuWwBC3vWFhm7Uuq5AOLZV+xG9UmWPKECDZX9UZpWcPRGQpiY8OOUNBAywVniJv6rC2eADFimdRR2qPiebdC3cry7QAvgvttt1Wk56Nb/1TmIbtJRTay5wb+6AY1H7AT1xPoB6XAXW3RqODXtRR0hZT1s/o5y209Vcc6EBal5QdsbJroXa020ZSD62EnlrOwgYnXy5c8SO+bzNAfRw59SVbI4wUNYz6kJb4NDn+y9dlASRjlt8Rau4xTQS+fZSi8HHUwkwE6RRak3qo8YZ7FWWbN2uwUKgQNlc/MfAfLRcfQw4XUqIdn9lxtRblaY="}}}' http://127.0.0.1/mina_auth/
按照源码 db.sql 文件 建立数据库
数据库设计
全局信息表 cAppInfo 保存会话服务所需要的配置项。
Field
Type
Null
key
Extra
appid
varchar(200)
NO
PRI
申请微信小程序开发者时,微信分配的 appId
secret
varchar(300)
NO
申请微信小程序开发者时,微信分配的 appSecret
login_duration
int(11)
NO
登录过期时间,单位为天,默认 30 天
session_duration
int(11)
NO
会话过期时间,单位为秒,默认为 2592000 秒(即30天) |
会话记录 cSessionInfo 保存每个会话的数据。
Field
Type
Null
key
Extra
id
int(11)
NO
MUL
uuid
varchar(100)
NO
会话 uuid
skey
varchar(100)
NO
会话 Skey
create_time
datetime
NO
last_visit_time
datetime
NO
open_id
varchar(100)
NO
MUL
session_key
varchar(100)
NO
微信服务端返回的 `session_key` 值
user_info
varchar(2048)
YES
已解密的用户数据
会话 ID(自增长) |
会话创建时间,用于判断会话对应的 open_id 和 session_key 是否过期(是否超过 cAppInfo 表中字段login_duration 配置的天数) |
最近访问时间,用于判断会话是否过期(是否超过 cAppInfo 表中字段 session_duration 的配置的秒数) |
微信服务端返回的 open_id 值 |
建数据库的详细 SQL 脚本请参考 db.sql
搭建会话管理服务器
服务器配置注意:
1、会话服务器源码中连接mysql数据库的用户名密码确保与数据库保持一致
2、sdk.config文件在不同server系统中位置不同,具体位置请阅读sdk源码config.js文件
3、sdk.config文件中不能有注释(后面会把字符串转对象)
小程序客户端配置
参考文档:https://github.com/tencentyun/wafer-client-sdk
demo 地址:https://github.com/tencentyun/wafer-client-demo
/**
* 小程序配置文件
* config.js
*/
// 此处主机域名修改成腾讯云解决方案分配的域名
var host = 'www.lovmin.com';
var config = {
// 下面的地址配合云端 Demo 工作
service: {
host,
// 登录地址,用于建立会话
loginUrl: `https://${host}/login`,
// 测试的请求地址,用于测试会话
requestUrl: `https://${host}/user`,
// 测试的信道服务地址
tunnelUrl: `https://${host}/tunnel`,
}
};
module.exports = config;
开发者设置
Java编程学习知识点分享 入门必看的更多相关文章
- 1.16 Linux该如何学习(新手入门必看)
本节旨在介绍对于初学者如何学习 Linux 的建议.如果你已经确定对 Linux 产生了兴趣,那么接下来我们介绍一下学习 Linux 的方法. 如何去学习 学习大多类似庖丁解牛,对事物的认识一般都是由 ...
- Java程序设计学习知识点总结
Java程序设计学习知识点总结 Java语言简单,面向对象,分布式,解释性,健壮,安全与系统无关,可移植,高性能,多线程,动态语言. 什么是框架 可以认为是某种应用的半成品,就是一组组件用来完善自己的 ...
- Liunx新手入门必看
安装CentOS(Linux的一个常用发行版本,互联网公司经常使用这个发行版)用到的软件: VMware_workstation_full_12.5.2.exe 虚拟机软件,虚拟机由这个软件安装.管理 ...
- Java工程师学习指南(入门篇)
Java工程师学习指南 入门篇 最近有很多小伙伴来问我,Java小白如何入门,如何安排学习路线,每一步应该怎么走比较好.原本我以为之前的几篇文章已经可以解决大家的问题了,其实不然,因为我之前写的文章都 ...
- 盘点一下Github上开源的Java面试/学习相关的仓库,看完弄懂薪资至少增加10k
最近浏览 Github ,收藏了一些还算不错的 Java面试/学习相关的仓库,分享给大家,希望对你有帮助.我暂且按照目前的 Star 数量来排序. 本文由 SnailClimb 整理,如需转载请联系作 ...
- Java编程学习技巧和方法总结
干货:必须要有反馈,不断调整,多读书,多些笔记. 解释:不练习你以为你能掌握?笑话,只有自己根据一个个小目标不断的敲,运行,给予你反馈,这样才会真的进步. 纸上谈Java,是永远停止在口. 关于笔 ...
- STM32环境搭建/学习观点/自学方法 入门必看
文章转自armfly开发板V4软件开发手册,分享学习~ 今天有幸看到armfly的开发板软件开发手册,开头的基础知识,真的很有用,还好有看到,一切都不迟,感悟很多,摘抄部分,学习分享~ 关于开发环境的 ...
- Java基础学习经验分享
很多人学习Java,尤其是自学的人,在学习的过程中会遇到各种各样的问题以及难点,有时候卡在一个点上可能需要很长时间,因为你在自学的过程中不知道如何去掌握和灵活运用以及该注意的点.下面我整理了新手学习可 ...
- JVM入门必看——JVM结构
转载自:http://blog.csdn.net/yfqnihao 这一节,主要来学习jvm的基本结构,也就是概述.说是概述,内容很多,而且概念量也很大,不过关于概念方面,你不用担心,我完全有信心,让 ...
随机推荐
- java.lang.ClassCastException: com.sun.proxy.$Proxy2 cannot be cast to...异常
异常: Exception in thread "main" java.lang.ClassCastException: com.sun.proxy.$Proxy2 cannot ...
- accept 文件描述符用尽处理
if (events[i].data.fd == listenfd) { peerlen = sizeof(peeraddr); connfd = ::accept4(listenfd, (struc ...
- Intellij自动下载导入框架包和常用快捷键
忽然发现intellij尽然可以自动导入 框架所需的包,而且可以选择jar包版本,瞬间发现Maven,gradle管理jar包还得写配置文件弱爆了. 以Hibernate为例: 1.ProjectSt ...
- TeamTalk安装测试
TeamTalk介绍 项目框架 TeamTalk是蘑菇街的开源项目,github维护的最后时间是2015但是仍然是一款值得学习的好项目,麻雀虽小五脏俱全,本项目涉及到多个平台.多种语言,简单关系如下图 ...
- 智能合约语言Solidity教程系列2 - 地址类型介绍
智能合约语言Solidity教程系列第二篇 - Solidity地址类型介绍. 写在前面 Solidity是以太坊智能合约编程语言,阅读本文前,你应该对以太坊.智能合约有所了解,如果你还不了解,建议你 ...
- java学习笔记之集合家族1
集合 集合介绍: 由于数组中存放对象,对对象操作起来不方便.java中有一类容器,专门用来存储对象. 集合与数组的区别: 1.数组的长度固定的,而集合长度时可变的 2.数组只能储存同一类型的元素,而且 ...
- 如何设置html中img宽高相同-css
最近项目中有一个问题,做一个响应式的盒子,随着屏幕的变化, 宽高一直保持相等,之前一直使用js动态设置,获取盒子的宽度来设置盒子高度. 但是加载时样式显示不是很好,后来直接用css实现. html部分 ...
- JSON数据解析及gson.jar包
从服务器端接收数据的时候,那些数据必须以浏览器能够理解的格式来发送. 服务器端的编程语言只能以如下 3 种格式返回数据: HTML XML JSON JSON一种简单的数据格式,比xml更轻巧. JS ...
- FPGA编程基础(一)--參数传递与寄存器使用
一.參数映射 參数映射的功能就是实现參数化元件.所谓的"參数化元件"就是指元件的某些參数是可调的,通过调整这些參数从而可实现一类结构类似而功能不同的电路.在应用中.非常多电路都可採 ...
- 卡尔曼滤波(Kalman Filter)
一.引言 以下我们引用文献[1]中的一段话作为本文的開始: 想象你在黄昏时分看着一仅仅小鸟飞行穿过浓密的丛林.你仅仅能隐隐约约.断断续续地瞥见小鸟运动的闪现.你试图努力地猜測小鸟在哪里以及下一时刻它会 ...