Other

java流程控制选择结构 if

if 单选择结构 if 双选择结构 if多选择结构 嵌套的if结构   1。if 单选结构  语法  if(布尔表达式){  //如果布尔表达式为true 执行里面的数据  }  2 if 双选结构  语法  if(布尔表达式){  //布尔表达式值为true,进行该逻辑  }else{  //布尔表达式值为false时,进行该逻辑  }   3 if 多选择结构(  if多选择结构至多有有一个else语句,该语句在所有的else if语句后面  if多选结构语句可以有若干个else if的语句 必须在else  其中一个 else if 为true时 其他的else If 以及else 都不会在执行  )  语法  if(布尔表达1){  //布尔表达式1为true时,执行  }else if(布尔表达2){  //布尔表达式2为true时,执行  }else if(布尔表达式3){

实验三 控制语句与组合数据类型综合应用编程

# task1.py import random print('用列表存储随机整数: ') Is = [random.randint(1,100)for i in range(5)] print(Is) print('\n用集合存储随机整数:') s1 = {random.randint(1,100) for i in range(5)} print(s1) print('\n用集合存储随机整数: ') s2 = set() while(len(s2)<5): s2.add(random.randint(1,100)) print(s2) 问题1:范围是1~100,可以取到100 问题2:不包括5;  包括5. 问题3:不一定是5 问题4:一定是5 #task2.py datas = {'2049777001': ['篮球', '羽毛球', '美食', '漫画'], '2049777002': ['音乐', '旅行'], '2049777003': ['马拉松', '健身', '游戏'], '2049777004': [], '2049777005': ['足球', '阅读'], '2049777006': ['发呆', '闲逛'], '2049777007': [], '2049777008': ['书法', '电影'], '2049777009': ['音乐', '阅读', '电影', '漫画'], '2049777010': ['数学', '推理', '音乐', '旅行']} s = {} for i in datas.

python连接redis、redis字符串操作、hash操作、列表操作、其他通用操作、管道、django中使用redis

今日内容概要 python连接redis redis字符串操作 redis之hash操作 redis之列表操作 redis其他 通用操作,管道 django中使用redis 内容详细 1、python连接redis # 安装模块: pip install redis # django中有没有连接池? 没有,django中一个请求就会创建一个mysql连接,django并发量不高,mysql能撑住 想在django中使用连接池,有第三方: https://www.cnblogs.com/wangruixing/p/13030755.html # python实现单例的5种方式 http://liuqingzheng.top/python/%E9%9D%A2%E5%90%91%E5%AF%B9%E8%B1%A1%E9%AB%98%E9%98%B6/19-%E9%9D%A2%E5%90%91%E5%AF%B9%E8%B1%A1%E9%AB%98%E7%BA%A7%E5%AE%9E%E6%88%98%E4%B9%8B%E5%8D%95%E4%BE%8B%E6%A8%A1%E5%BC%8F/ from redis import Redis # 1 普通连接 conn = Redis(host=localhost, port=6379, db=0, password=None) conn.set('name', lqz) # 创建值 res = conn.get('name') print(res) # b'lqz' # 2 连接池连接(以模块导入的方式实现单例) 创建文件redis_pool.py: import redis # 第一步:先要构造一个池 # POOL必须是单例的,全局只有一个实例,无论程序怎么执行,POOL是同一个对象 POOL = redis.ConnectionPool(max_connections=10, host=localhost, port=6379) -------------------------------------------------------------------------------------------------------------- import redis from redis_pool import POOL # 第二步:从池中拿一个连接 conn = redis.

shell基础

1.什么是shell? Shell本身是一个用C语言编写的程序,它是用户使用Unix/Linux的桥梁,用户的大部分工作都是通过Shell完成的。 Shell既是一种命令语言,又是一种程序设计语言。 作为命令语言,它交互式地解释和执行用户输入的命令; 作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支。  2.shell的作用是什么? shell是一个特殊的应用程序,它介于操作系统内核和用户之间,充当了一个“命令解释器”的角色,负责接收用户输入的操作指令并进行解释,将需要执行的操作传递给内核执行,并输出执行结果。  3.linux中包含哪些shell?如何查看? /bin/bash /sbin/nologin /usr/bin/sh /usr/bin/bash /usr/sbin/nologin /bin/tcsh /bin/csh 可以通过cat /etc/shells查看   4.shell编程规范 解释器:在写body之前要对shell脚本进行声明,告诉操作系统,这是一个shell文件,不声明的话系统默认为用bash来执行脚本。  格式如下  #!/bin/bash 脚本注释:注释格式和一般的编程语言类似,为:#+内容 脚本执行:source [文件名]  . [文件名]  ./ [文件名] (注意这种方式文件需要有执行权限)  bash/dash/sh [文件名]   例子:   5.重定向 交互式硬件设备 类型 设备文件 文件描述编号 默认设备标准输入 /dev/stdin 0 键盘标准输出 /dev/stdout 1 显示器标准错误输出 /dev/stderr 2 显示器 重定向操作 类型 操作符 用途重定向输入 < 从指定文件读取数据重定向输出 > 将标准输出结果保存到指定的文件,并且覆盖原有文件 >> 将标准输出追加到指定的文件的尾部,不覆盖原有内容标准错误输出 2> 将错误信息保存到指定文件,并且覆盖原有文件 2>> 将错误信息追加到指定文件的尾部,不覆盖原有内容混合输出 &>和2>&1 将标准输出,标准错误保存到同—文件中

sub-web + subconverter 直接运行在openwrt里面,linux搭建

简介: 这个是订阅转换的东西。 简单说subconverter是一个订阅转换工具,是在URL里面的存放了很多信息,计算后给你反馈,但是需要输入的信息又很多,非常不便。 这就有了sub-web这个项目,也是一个web,但是跟表格似的,把该提交给subconverter的内容填好,会自动生成提交URL。 方便很多。 sub-web,是需要编译的,编译以后据说是静态的,反正看docker也就nginx -g,明天试试,可行就写教程(笔记)。 subconverter更简单,下载对应的release以后,解压,直接运行二进制就好了,subconverter。我试了一下,在openwrt下可以运行,也可以正常使用,只要你写个启动项就可以了。

JavaScript:TimelineJs

<!DOCTYPE html> <html lang=en-GB> <head> <meta charset=utf-8> <meta name=viewport content=width=device-width, initial-scale=1, maximum-scale=1 /> <title>Timeline Prototype</title> <meta name=description content=A JavaScript horizontal / vertical timeline component plugin /> <meta name=Keywords content=geovindu,Geovin Du,涂聚文/> <link href=css/style.min.css rel=stylesheet /> <link href=css/prettyprint.min.css rel=stylesheet /> <link href=css/timeline.min.css rel=stylesheet /> <link href=https://fonts.googleapis.com/css?family=Lato:400,700 rel=stylesheet /> </head> <body> <section class=page-section id=horizontal-demo> <div class=container> <h2>Horizontal timeline demo</h2> <p>A horizontal timeline with 4 visible items, which changes to the vertical mode at an 800px resolution.

4-Java流程控制

Java流程控制 Scanner对象 Java5新特征:java.util.Scanner,我们可以通过Scanner类来获取用户的输入 基本语法: Scanner s = new Scanner(System.in); IDEA中可输入:new Scanner(System.in); 后使用 alt + Enter 补全代码 next(): 一定要读取到有效字符后才可以结束输入 对输入有效字符之前遇到的空白,next()方法会自动将其去掉 只有输入有效字符后才将其后面输入的空白作为分隔符或者结束符 next()不能得到带有空格的字符 nextLine(): 以 Enter 为结束符,既 nextLine() 方法会返回输入回车前的所有字符 可以获取空白 ( 只单独输入空白也可以获取 ) 示例: 算法结构 顺序结构(最简单的算法结构) 选择结构 if 语句的单选、双选、多选使用 if(score == 100){ System.out,println(满分);}else if(score < 100 && score >80){ System.out.println(优秀);}else{ System.out.println(未达优秀);} switch多选择结构 循环结构 while 循环 while(布尔表达式){ //循环体} 只要布尔表达式为 true ,循环就会一直执行下去

5-Java方法

Java方法 何谓方法? 方法是解决一类问题的步骤的有序集合(一段用来完成特定功能的代码片段) 方法包含于类或对象中 设计方法的原则:最好保持方法的原子性 (即是一个方法只用于完成1个功能,这样利于我们后期的发展) 方法的定义 方法包含一个方法头和一个方法体: 修饰符:定义了方法的访问类型(如:public、static……) 返回值类型:returnValueType是方法返回值的数据类型,部分方法执行后没有返回值,这种情况下,returnValueType是关键字void 方法名:方法的实际名称,方法名和参数表共同构成方法签名 注意命名规范,驼峰命名,开头小写,后面首字母大写 参数类型:参数像是一个占位符,当方法被调用时,传递值给参数,这个值被称为实参或者变量,参数列表是指方法的参数类型、顺序和参数的个数。参数是可选的,方法可以不包括 任何参数 形式参数:在方法被调用时用于接收外界输入的数据(即是定义方法时候定义的变量) 实参:调用方法时实际传给方法的数据 方法体:方法体包含具体的语句,定义该方法的功能 修饰符 返回值类型 方法名(参数类型 参数名){ ... 方法体 ... return 返回值;} 方法的调用 调用方法:对象名.方法名(实参列表) Java支持两种调用方法的方式,根据方法是否返回值来选择 当方法返回一个值时候,方法调用通常被当做一个值。如: int larger = max(30,40); 如果方法返回值是 void ,方法调用一定是一条语句 System.out.println(Hello,xuan!) 方法的重载 重载就是在一个类中,有相同的函数名称,但形参不同的参数 方法的重载的规则: 方法名称必须相同 参数列表必须不同(个数不同、类型不同、参数排列顺序不同……) 方法的返回类型可以相同也可以不同 仅仅返回类型不同不足以成为方法的重载 方法名称相同时,编辑器会根据调用方法的参数个数、参数类型等去逐个匹配,以选择对应的方法,如果匹配失败,则编译器报错

处理机管理——进程互斥的软件实现

单标记法: 算法思想:两个进程在访问临界区后会把使用临界区的权限转交给另一个进程。也就是说每个进程进入临界区的权限只能被另一个进程赋予 只有当前允许进入临界区的进程在访问了临界区之后,才会修改当前允许进入临界区的进程号的值。也就是说,对于临界区的访问是轮流访问。这种必须“轮流访问”带来的问题是,如果此时允许进入临界区的进程一直不访问临界区,那么虽然此时临界区空闲,但是并不允许其他进程访问。因此,单标志法存在的主要问题是:违背“空闲让进”原则。 双标志先检查法: 算法思想:设置一个能表示各进程想进入临界区的意愿的标记,意味着某进程现在想要进入临界区。每个进程在进入临界区之前先检查当前有没有别的进程想进入临界区,如果没有,则把自身对应的标志设为进入,之后开始访问临界区。 双标志先检查法的主要问题是:违反“忙则等待”原则。原因在于,进入区的“检查”和“上锁”两个处理不是一气呵成的。“检查”后“上锁”前可能发生进程切换。 双标志后检查法: 算法思想:先“上锁”后“检查”的方法(双标志先检查法的改版。前一个算法的问题是先“检查”后“上锁”,但是这两个操作又无法一气呵成,因此导致了两个进程同时进入临界区的问题) 双标志后检查法虽然解决了“忙则等待”的问题,但是又违背了“空闲让进”和“有限等待”原则,会因各进程都长期无法访问临界资而产生“饥饿”现象。 两个进程都争着想进入临界区,但是谁也不让谁,最后谁都无法进入临界区。 Peterson算法 算法思想:在进入区“主动争取一主动谦让一检查对方是否想进、己方是否谦让“ 解决了进程互斥问题,遵循了空闲让进、忙则等待、有限等待三个原则,但是 依然未遵循让权等待的原则。会发生“忙等“ 忙等状态:当一个进程正处在某临界区内,任何试图进入其临界区的进程都必须进入代码连续循环,陷入忙等状态。连续测试一个变量直到某个值出现为止,称为忙等。(没有进入临界区的正在等待的某进程不断的在测试循环代码段中的变量的值,占着处理机而不释放,这是一种忙等状态) 这个时候应该释放处理机让给其他进程

6-Java数组

Java数组 数组概述 数组是相同类型数据的有序集合 数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成(使得数组下标能够准确定位数组元素) 每一个数据称为一个数组元素,每个数组元素可以通过一个下标来访问它们 数组的声明创建 首先必须先声明数组变量,才能在程序中使用数组。声明数组变量语法如下: dataType[] arrayRefVar; //首选的方法或dataType arrayRefVar[]; //C跟C++风格的,效果相同,但不建议 Java语言使用 new 操作符来创建数组,语法如下: dataType[] arrayRefVar = new dataType[arraySize]; 数组的元素是通过索引访问的,数组索引从 0 开始 获取数组长度:arrays.length Java内存分析: 堆 存放 new 对象和数组 可以被所有的线程共享,不会存放别的对象引用 栈 存放基本变量类型(会包含这个基本类型的具体数值) 引用对象的变量(会存放这个引用在堆里面的具体地址) 方法区 可以被所有的线程共享 包含了所有的 class 和 static 变量 等等…… 图片左上角是数组下标越界异常的报错 三种初始化 静态初始化(创建 + 赋值) int[] a = {1,2,3};Man[] mans = {new Man(1,1),new Man(2,2)}; 动态初始化(包含默认初始化,即是先创建 + 后面手动赋值)