limit M:返回 M 条记录 limit N,M : 从第 N 条记录开始, 返回 M 条记录
mybatis查询没有数据时返回的list是空集合,即size=0, 并不是null
聚合函数针对组进行操作,没有group就把所有数据当成一个大组. mysql中,
SELECT id, policy_no, supplier_code, batch_no, premium FROM renewal_details WHERE channel_code = 'T00_A' AND city_com_code = 'T0101_A' 会查出100条数据;但在select后面加上一个SUM(premium),变为
SELECT id, policy_no, supplier_code, batch_no, premium, SUM(premium) FROM renewal_details WHERE channel_code = 'T00_A' AND city_com_code = 'T0101_A' 就只有一条数据。count同理。
数据库索引,由关键字KEY或INDEX定义。 普通索引(由关键字KEY或INDEX定义的索引)的唯一任务是加快对数据的访问速度。因此,应该只为那些最经常出现在查询条件(WHERE column = ...)或排序条件(ORDER BY column)中的数据列创建索引。
多表关联时,用了一个允许为空的字段去关联其他表,导致报错
CSS aspect-ratio All In One <div class=row> <div style=--ratio: 4 / 3; class=item>4:3</div> <div style=--ratio: 2 / 3; class=item>2:3</div> </div> .row { display: flex; gap: 1rem; } .item { flex-basis: 0; aspect-ratio: var(--ratio); flex-grow: calc(var(--ratio)); } <iframe allowfullscreen=true allowtransparency=true frameborder=no height=300 loading=lazy scrolling=no src=https://codepen.io/xgqfrms/embed/XWVwObj?default-tab=result&theme-id=dark style=width: 100% title=CSS aspect-ratio All In One> See the Pen CSS aspect-ratio All In One by xgqfrms (@xgqfrms) on CodePen. </iframe> refs ©xgqfrms 2012-2020 www.
ASP.NET Core应用程序提供了处理每个请求的完整控制。在这个请求管道中,我们可以动态配置各种业务逻辑对应的中间件(middleware),从而达到服务端可以针对不同用户做出不同的请求响应。
一、管道 ASP.NET Core应用程序在创建程序宿主之前需要构建一个管道。而IApplicationBuilder 是用来构建请求管道的.而请求管道,本质上就是对 HttpContext 的一系列操作,即通过对 Request 的处理,来生成 Reponse。
namespace Microsoft.AspNetCore.Builder { // // 摘要: // Defines a class that provides the mechanisms to configure an application's request // pipeline. public interface IApplicationBuilder { // // 摘要: // Gets or sets the System.IServiceProvider that provides access to the application's // service container. IServiceProvider ApplicationServices { get; set; } // // 摘要: // Gets the set of HTTP features the application's server provides.
#! /bin/bashecho -e 主机名 : `hostname`echo -e IPv4地址 :`ifconfig | sed -n 2p |tr -s | cut -d -f 3`echo -e 操作系统版本 : `cat /etc/redhat-release`echo -e 内核版本: `uname -r`echo -e CPU型号: `lscpu|sed -n 13p | tr -s |cut -d -f2-`echo -e 内存大小 : `cat /proc/meminfo | grep MemTotal`echo -e 硬盘大小: `lsblk | grep -E '^sda' | grep -Eo [0-9]+[[:upper:]]`
获取java版本号
$ java -version 2>&1 | sed '1!d' | sed -e 's///g' | awk '{print $3}' 1.8.0_222 获取java类型(openjdk)及版本号
$ java -version 2>&1 | sed '1!d' | sed -e 's///g' -e 's/version//' openjdk 1.8.0_222 说明: 在shell中要获取java版本号最基本的思路就是从java -version 的输出内容中解析出版本号,但是java -version 的输出并不是输出到默认的stdout,而是stderr,所以要想从java -version 的输出解析出java版本号,就要将java -version 的输出重定向,上面脚本中2>&1就是将原本输出到stderr中的内容重定向输出到stdout,这样就可以将java -version的输出通过管道|输入到sed,awk这些工具去处理了.
代码中sed '1!d'的含义是删除除第一行外的所有内容,在这里就是只保留java -version输出的第一行内容java version 1.8.0_111 接下来 sed -e 's///g'就简单了,就是删除字符串中的号,所以上面的第一行内容进一步被处理成openjdk version 1.8.0_222(同理's/version//'是删除字符串中的version)
接下来的awk '{print $3}'就是输出空格分隔的第三段,就是最终的版本号1.8.0_222
1 表示stdout标准输出 2 表示stderr标准错误
import numbers class IntFiled: def __get__(self, instance, owner): return self.value # 对age的类型做限制 def __set__(self, instance, value): if not isinstance(value, numbers.Integral): raise ValueError(int value need) self.value = value class User: age = IntFiled() # 关键点,变量名要和__init__中的属性一致 def __init__(self, age): self.age = age if __name__ == '__main__': user = User(18) print(user.age) Debug 看下 instance 和 value 的值:
使用多线程交替打印t1t2:
package com.lizhenxin.java0422.b3; import lombok.extern.java.Log; import lombok.extern.slf4j.Slf4j; /** * @author lizhenxin * @create 2022-04-25-23:34 */ @Slf4j public class Wait1 { static boolean isLock = false; public static void main(String[] args) { Thread t1 = new Thread(() -> { while (true){ synchronized (Wait1.class){ while (!isLock){ try { Wait1.class.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } isLock = false; Wait1.class.notify(); log.debug(t1); } } }, t1); Thread t2 = new Thread(() -> { while (true){ synchronized (Wait1.
循环结构
while循环
while是最基本的循环,它的结构为:
while(布尔表达式){ //循环内容} 只要布尔表达式为true,循环就会一直执行下去
我们大多数情况是会让循环停止下来的,我们需要一个让表达式失效的方式来结束循环
少部分情况需要循环一直执行,比如服务器的请求响应监听等
循环条件一直为true就会造成无限循环【死循环】,我们正常的业务编程中应该尽量避免死循环;会影响程序性能或者造成程序卡死崩溃!
*思考:计算1+2+3+...+100=?
do...while循环
对于while语句而言,如果不满足条件,则不能进入循环,但有时候我们需要即使不满足条件,也至少执行一次
do...while循环和while循环相似,不同的是,do...while循环至少会执行一次
do{ //代码语句}while(布尔表达式); While和do-While的区别:
while先判断后执行,dowhlie是先执行后判断!
Do...while总是保证循环体会被至少执行一次!这是他们的主要差别
for循环(更新中)
在java5中引入了一种主要用于数组的增强型for循环
2.1、什么是编程语言 编程语言是用来控制计算机的一系列指令(Instruction),它有固定的格式和词汇(不同编程语言的格式和词汇不一样)。就像我们中国人之间沟通需要汉语,英国人沟通需要英语一样,人与计算机之间进行沟通需要一门语言作为介质,即编程语言。
编程语言的发展经历了机器语言(指令系统)=>汇编语言=>高级语言(C、java、Go等)。
计算机在设计中规定了一组指令(二级制代码),这组指令的集和就是所谓的机器指令系统,用机器指令形式编写的程序称为机器语言。 但由于机器语言的千上万条指令难以记忆,并且维护性和移植性都很差,所以在机器语言的基础上,人们提出了采用字符和十进制数代替二进制代码,于是产生了将机器语言符号化的汇编语言。 虽然汇编语言相较于机器语言简单了很多,但是汇编语言是机器指令的符号化,与机器指令存在着直接的对应关系,无论是学习还是开发,难度依然很大。所以更加接近人类语言,也更容易理解和修改的高级语言就应运而生了,高级语言的一条语法往往可以代替几条、几十条甚至几百条汇编语言的指令。因此,高级语言易学易用,通用性强,应用广泛。 2.2、编译型语言与解释性语言 计算机是不能理解高级语言的,更不能直接执行高级语言,它只能直接理解机器语言,所以使用任何高级语言编写的程序若想被计算机运行,都必须将其转换成计算机语言,也就是机器码。而这种转换的方式分为编译和解释两种。由此高级语言也分为编译型语言和解释型语言。
编译型语言 使用专门的编译器,针对特定的平台,将高级语言源代码一次性的编译成可被该平台硬件执行的机器码,并包装成该平台所能识别的可执行性程序的格式。
编译型语言写的程序执行之前,需要一个专门的编译过程,把源代码编译成机器语言的文件,如exe格式的文件,以后要再运行时,直接使用编译结果即可,如直接运行exe文件。因为只需编译一次,以后运行时不需要编译,所以编译型语言执行效率高。
1、一次性的编译成平台相关的机器语言文件,运行时脱离开发环境,运行效率高;
2、与特定平台相关,一般无法移植到其他平台;
解释型语言 使用专门的解释器对源程序逐行解释成特定平台的机器码并立即执行。是代码在执行时才被解释器一行行动态翻译和执行,而不是在执行之前就完成翻译。
1.解释型语言每次运行都需要将源代码解释称机器码并执行,执行效率低;
2.只要平台提供相应的解释器,就可以运行源代码,所以可以方便源程序移植;
三、Python语言介绍 3.1、了解Python语言 Python 是1989 年荷兰人 Guido van Rossum (简称 Guido)在圣诞节期间为了打发时间,发明的一门面向对象的解释性编程语言。Python来自Guido所挚爱的电视剧Monty Python’s Flying Circus。
Guido对于Python的设计理念就是一门介于shell和C之间的语言。可以像shell那样,轻松高效编程,也可以像C语言那样,能够全面调用计算机的功能接口。
python的设计哲学:优雅、明确、简洁。
3.2、Python解释器下载与安装 3.2.1、python解释器的分类 CPython:官方版本的解释器。这个解释器是用C语言开发的,所以叫CPython。CPython是使用最广的Python解释器。我们通常说的、下载的、讨论的、使用的都是这个解释器。
Ipython:基于CPython之上的一个交互式解释器,在交互方式上有所增强,执行Python代码的功能和CPython是完全一样的。CPython用»>作为提示符,而IPython用In [序号]:作为提示符。
PyPy:一个追求执行速度的Python解释器。采用JIT技术,对Python代码进行动态编译(注意,不是解释),可以显著提高Python代码的执行速度。绝大部分CPython代码都可以在PyPy下运行,但还是有一些不同的,这就导致相同的Python代码在两种解释器下执行可能会有不同的结果。
Jython:运行在Java平台上的Python解释器,可以直接把Python代码编译成Java字节码执行。
IronPython:和Jython类似,只不过IronPython是运行在微软.Net平台上的Python解释器,可以直接把Python代码编译成.Net的字节码。
3.2.2、python解释器的版本 Python主要有三个版本:1994年发布的Python 1.0版本(淘汰)、2000年的2.0版本、以及08年发布的3.0版本。
Python 1.
启动nginx出现:
[root@WALKER sbin]# ./nginx nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)nginx: [emerg] still could not bind()
错误原因:
出现这种情况一般是80端口被占用了
解决方法:
关闭80端口
[root@WALKER sbin]# fuser -k 80/tcp80/tcp: 71622 71623