csworkman

个人博客

服务器配置码云免密拉取

2021-5-6 Mr Chang 服务器

一 生成ssh公钥 下面换成自己的邮箱 执行命令
ssh-keygen -t rsa -C"736369907@qq.com"
回车三次即可生成sshkey
二 查看public key
cat ~/.ssh/id_ras.pub
将ssh-rsa到邮箱部分的内容复制出来,全部复制,ssh-ras头也不能少

三 添加用户sshkey
登陆马云平台 在设置中添加sshkey

评论(0) 浏览(873)

java学习 2021-04-22~2021-09-23

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.位操作没有这一特性,所以不管那边的值是如 何,任何参与运算的表达式都会被执行求值,因此也就产生了你代码之中的结果了。

截屏2021-09-23 上午10.45.01.png
5.位运算符:<< 向左移(相当于*2)   >>向右移(相当于/2)  >>>>  |  ||  & &&  | ^ ~


评论(0) 浏览(956)

二进制 负数的原码 反码 补码

2021-4-20 Mr Chang java


00001110      +14     正数的 原码 反码  补码都是一样的

10001110      -14的原码

11110001      -14的反码    -14的反码为原码各位数的相反数

11110010       -14的补码  补码为反码+1

在计算机底层都以补码的方式存储数据

10111010

11000101

评论(0) 浏览(890)

java学习 2021-04-20

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) 浏览(846)

本地回环地址

2021-4-14 Mr Chang 服务器

127.0.0.1,通常被称为本地回环地址(Loopback Address),不属于任何一个有类别地址类。它代表设备的本地虚拟接口,所以默认被看作是永远不会宕掉的接口。在Windows操作系统中也有相似的定义,所以通常在安装网卡前就可以ping通这个本地回环地址。一般都会用来检查本地网络协议、基本数据接口等是否正常的。

评论(0) 浏览(870)

java习题

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) 浏览(807)

java学习 2021-04-14

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) 浏览(787)

java学习 2021-04-13

2021-4-13 Mr Chang java

java 里面配置的环境变量  java  javac  

java 基本步骤 :
   1 将java 代码编写到扩展名为.java 的文件中。
   2 通过javac命令对该java文件进行编译。
   3 通过java命令对生成的class文件进行运行。

评论(0) 浏览(894)

swoole-协程

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) 浏览(1107)

java学习2021-04-08

2021-4-8 Mr Chang java

1 java 语言的特点  : 跨平台性 
通过jvm运行在不通的操作系统中执行
java程序还会出现内存泄漏和内存溢出问题么?  当然存在

2 JDK   和 jre 是什么 
JDK ->  java development kit  java 开发工具包 
JRE -> 


评论(0) 浏览(964)