2021-4-22 Mr Chang
java
算数运算符
(前)++;先自增1 在进行运算
(后)++;先运算,后自增1
注意点:
short 类型数据 做运算结果要加上强制类型转换符号
例如:
short s1 = 10;
s1 = s1 +1 ;//编译失败
s1 += 2; //运算结果不会改变本身变量的数据类型
s1 = (short)(s1+1);//自增1不会改变本身变量的数据类型正确的
比较运算符
1.比较运算符的结果是boolean类型
2.>,<,>=,<=:只能使用在数值类型的数据之间
3. == : 不仅可以比较数值之间,还可以使用在其他引用类型变量之间
逻辑运算符:& && | || ! ^
逻辑运算 与 位运算的区别 :
1.逻辑运算符执行的就是短路求值
所谓短路,就是当参与运算的一个操作数已经足以推断出这个表达式的值的时候,另外一个操作数(有可能是表达式)就不会执行
2.
位操作没有这一特性,所以不管那边的值是如 何,任何参与运算的表达式都会被执行求值,因此也就产生了你代码之中的结果了。

5.位运算符:<< 向左移(相当于*2) >>向右移(相当于/2) >>>> | || & && | ^ ~
评论(0)
浏览(955)
2021-4-20 Mr Chang
java
00001110 +14 正数的 原码 反码 补码都是一样的
10001110 -14的原码
11110001 -14的反码 -14的反码为原码各位数的相反数
11110010 -14的补码 补码为反码+1
在计算机底层都以补码的方式存储数据
10111010
11000101
评论(0)
浏览(889)
2021-4-20 Mr Chang
java
基本数据类型之间的运算规则
前提:这里讨论只是7种基本数据类型间的运算,不包含boolean类型的。
1. 自动类型提升。
当容量小的数据类型与容量大的数据类型的变量做运算时,结果自动提升为容量大的数据类型。
byte、short、char -> int -> long -> float ->double
特别的:当byte、char、short 三种类型的变量做运算时,结果为int型。
2.强制类型转换
说明:此时的容量大小指的是,表示数的范围的大和小
强制类型转换:自动类型提升运算的逆运算。
1.需要使用强转符:();
2.注意点:强制转换类型,可能导致精度损失。
//编码情况:
long l =12123;
//编译失败:过大的整数
// long l1 = 21321321213213213213213;
long l1 =21321321321321321L;
//***********
//编译失败 double 转float double 转float
// float f1 =12.3;
//2.编码情况2
//整形常量,默认类型为int型
//浮点型常量, 默认类型为double型
byte b = 12;
// byte b1 = b + 1;//编译失败
//float f1 = b + 12.3;//编译失败
String 类型变量的使用
1.String 属于引用数据类型,翻译为:字符串。
2.声明String类型变量时,使用一对“”
3.String 可以和8种基本数据类型变量做运算,且运算只能是连接运算:+
评论(0)
浏览(845)
2021-4-14 Mr Chang
服务器
127.0.0.1,通常被称为本地回环地址(Loopback Address),不属于任何一个有类别地址类。它代表设备的本地虚拟接口,所以默认被看作是永远不会宕掉的接口。在Windows操作系统中也有相似的定义,所以通常在安装网卡前就可以ping通这个本地回环地址。一般都会用来检查本地网络协议、基本数据接口等是否正常的。
评论(0)
浏览(869)
2021-4-14 Mr Chang
java
1 为何配置环境变量 ?
为了在系统的任何位置可以运行java 和javac 和javadoc
2 如何配置
找到 java.exe 文件 运行文件
JAVA_Home = bin 的上一目录
path = %JAVA_HOME%\bin
3 cd cp mv rm
评论(0)
浏览(806)
2021-4-14 Mr Chang
java
一. java 注释规则:
1. 单行注释: 双斜杠 //
作用:
(1)对写的程序进行解释说明,增强可读性,方便自己,方便别人
(2)调试所写的代码
特点:
不参与编译
2. 多行注释:/* */
3. 文档注释 (java 特有)
/** */
注释内容可以被javadoc 所解析生成一套以网页文件形式体现的该程序的文档说明
command 指令
javadoc -d myhello -author -version helloworld.java -docencoding utf-8 -charset utf-8
-d 指定生成文档的名称
-author 文档作者
-version 文档的版本号
-docendcoding doc文档的输出的编码格式
-charset 用于跨平台查看生成的文档的字符集。
多行注释的一个注意点 多行注释不可以嵌套
二. javaApi的文档 (application program interface)程序编程文档
三.对第一个java程序进行总结
1.java程序编写编译和运行的过程
编写:我们将编写的java代码保存在以'.java'结尾的源文件中
编译:使用javac.exe命令编译我们的java源文件。格式:javac 源文件.java
运行。格式java类名
在一个java源文件可以声明多个class。但是至多只有一个类能声明为public
而且要求声明为public的类的类名必须与源文件名相同
程序的入口时main()方法 格式是固定的。
输出语句:
System.out.println 先输出数据然后换行
System.out.print 只输出语句
编译的过程:编译以后会生成一个或多个字节码文件,字节码文件的名称与java源文件的类名相同
评论(0)
浏览(786)
2021-4-13 Mr Chang
java
java 里面配置的环境变量 java javac
java 基本步骤 :
1 将java 代码编写到扩展名为.java 的文件中。
2 通过javac命令对该java文件进行编译。
3 通过java命令对生成的class文件进行运行。
评论(0)
浏览(893)
2021-4-13 Mr Chang
swoole
Swoole 实现协程基本概念和底层原理
协程的概念:
协程可以理解为纯用户态的线程,其通过协作而不是抢占来进行切换,相对于进程或者线程,协程所有的操作都可以在用户态完成,创建和切换的消耗更低,swoole可以根据每一个进程创建一个对应的协程,根据IO的状态合理的调度协程。
在swoole 4.x中 协程取代来异步回调,成为来swoole推荐的编程方式,swoole协好吃呢个解决了异步回调困难的问题,使用协程他是以传统同步编程的方法编写代码,底层自动切换为异步IO,既保证了编程的简单性,又借助异步IO 提升系统的并发能力。
实现原理:
我们先看一段代码:
$server = new Swoole\Http\Server('127.0.0.1', 9501, SWOOLE_BASE);
#1
$server->on('Request', function($request, $response) {
$mysql = new Swoole\Coroutine\MySQL();
#2
$res = $mysql->connect([
'host' => '127.0.0.1',
'user' => 'root',
'password' => 'root',
'database' => 'test',
]);
#3
if ($res == false) {
$response->end("MySQL connect fail!");
return;
}
$ret = $mysql->query('show tables', 2);
$response->end("swoole response is ok, result=".var_export($ret, true));
});
$server->start();
在这段代码中 我们启动了一个基于swoole 实现的http服务器监听客户端请求,如果有onRequest事件发生,则通过基于swoole协程实现的异步mysql 客户端组件对mysql服务器发起联建请求,并执行查询操作,然后将结果以响应方式返回给http客户端
1.
调用 Swoole\Http\Server
的 onRequest
事件回调函数时,底层会调用 C 函数 coro_create
创建一个协程(#1
位置),同时保存这个时间点的 CPU 寄存器状态和 ZendVM 堆栈信息;
2.调用 mysql->connect
时会发生 IO 操作,底层会调用 C 函数 coro_save
保存当前协程的状态,包括 ZendVM 上下文以及协程描述信息,并调用 coro_yield
让出程序控制权,当前的请求会挂起(#2
位置);
3.协程让出程序控制权后,会继续进入http服务器的事件循环处理其他事件,这时swoole可以继续去初六其他客户端发来的请求,
4.当数据库IO事件完成后,mysql连接成功或失败,底层调用C函数 core_resume 恢复对应的协程,恢复zendVM上下文,继续向下执行PHP代码 (#3
位置);
5.mysql->query 的执行过程与mysql->connect 一样 ,也会出发IO事件并运行一次协程切换调度;
6.所有操作完成后,调用end方法返回结果,并销毁此协程。
协程的适用场景:
1 高并发服务,入秒杀系统,高性能API接口 RPC服务器 适用协程模式 服务的容错率会大大增加 某些接口出现故障时 不会导致整个系统崩溃
2 爬虫 可实现非常强大的并发能力,即使时非常慢速的网络环境,也可以高效的利用宽带
3 即时通信服务,如IM聊天,游戏服务器,物联网,消息服务器等等,可以确保消息通信完全无阻塞,每个消息包均可即时的被处理
协程引入的问题:
1.协程需要为每个并发保存栈内存 并维护对应的虚拟机状态,如果程序并发很大可能会占用大量内存。
2.协程调度会增加额外的一些cpu 开销
尽管如此,在处理高并发应用时,使用协程带来的优势还是远远高于 PHP 默认的同步阻塞机制
协程vs 线程
1 Swoole 的协程在底层实现上是单线程的,因此同一时间只有一个协程在工作,协程的执行是串行的,这与线程不同,多个线程会被操作系统调度到多个 CPU 并行执行。
使用时的注意事项
编程范式
-
协程之间通讯不要使用全局变量或者引用外部变量到当前作用域,而要使用
Channel
(后面会介绍具体使用)
-
项目中如果有扩展 hook 了
zend_execute_ex
或者 zend_execute_internal
这两个函数,需要特别注意一下 C 栈,可以使用 co::set
重新设置 C 栈大小
标签: https://zhuanlan.zhihu.com/p/96471009
评论(0)
浏览(1106)
2021-4-8 Mr Chang
java
1 java 语言的特点 : 跨平台性
通过jvm运行在不通的操作系统中执行
java程序还会出现内存泄漏和内存溢出问题么? 当然存在
2 JDK 和 jre 是什么
JDK -> java development kit java 开发工具包
JRE ->
评论(0)
浏览(963)
2021-4-7 Mr Chang
java
1 操作系统 : 用户<->应用程序<->操作系统<->硬件
2 万维网 www 环球信息网 world wide web www可以让web客户端 访问web服务器上的页面 并且由一个“全局统一资源标识符“(URI)标识 这些通过超文本传输协议 HyperText Transfer Protocol 互联网 包含 因特网 包含 万维网
3 b/s 和 c/s 架构区别 b/s : browser / server 浏览器访问 服务 c/s 架构 client / server 客户端访问服务端
4 java 基础是学习javaee 大数据 andriod开发的基石
Java基础课程概述
第一部分 编程语言核心结构 :主要知识点 变量 基本语法 分支 循环 数组
第二部分 java面向对象的核心逻辑 主要知识点:oop 封装 继承 多态 接口
第三部分 开发javase 高级应用程序 主要知识点 :异常 集合 I/O 多线程 反射机制
人机交互方式
(1)图形化界面 Graphical User Interface -- GUI 这种方式简单直观 使用者易于接受 ,容易上手操作
(2)命令行交互方式 Command Line Interface --CLI 需要有一个控制台 输入特定点命令 让计算机完成一些操作
计算机编程语言介绍:
第一代语言
-》 机器语言 指令以二进制代码形式存在
第二代语言
-》 汇编语言 使用助记符表示一条机器指令
第三代语言
java 简史
96年 发布JDK 1.0
04年 发布里程碑版本为 1.5 更名为JDK 5.0
11年 发布 7.0
14年 发布JDK8.0 是继JDK5.0 来变化最大的版本
17年 发布JDK9.0 最大限度实现模块化
18年3月 发布JDK 10.0 版本号也称为18.3
18年9月 发布JDK 11.0 版本号也称为18.9
JAVA SE 主要做 桌面级应用 JAVA EE 企业级应用 Java ME 小型版
(1)java 是一个纯粹的面向对象的程序设计语言, java舍弃来C语言中容易引起错误的指针
(2)java增加来垃圾回收器功能 用于回收不在被引用的对象所占据的内存空间
java语言的特点
特点一 :面向对象 两大基本概念 类对象
特点二: 健壮性 吸收了 C/C++语言的优点 去掉了其影响程序健壮性的部分 (指针和内存的申请与释放)提供相对安全的内存管理和访问机制
特点三 跨平台性 通过java语言编写应用程序可以在不通的系统平台上都可以运行 只需要在需要运行的环境安装一个java虚拟机 JVM java virtual machine 就可以运行
评论(0)
浏览(971)