Spring boot项目(问答网站)之Python学习基础篇

简介

当问答网站基本框架搭建完毕之后需要一些初始的数据来进行填充,因此选用Python爬虫的方式,从网上截取一些资料信息(当然是自己做项目使用,非商用)放入到项目网站上面。这篇主要是关于Python基础知识的学习笔记。
Python是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。它具有以下特点:

  1. 语法简单:便于初学者学习,易于理解,同时也方便维护。
  2. 广泛的标准库:具有丰富的库,跨平台性,兼容性好。
  3. 可移植性:基于开放源代码的特性,可以移植到多种平台。
  4. 可拓展性:可以用其他方式编写代码,比如c++等,然后在Python中调用。
  5. 数据库: 提供了所有的商业数据库。

当然还会有一些其他特性,这些特性也不是我自己总结的,详细的内容你可以参照下面链接进行深入学习。

Python3教程 | 菜鸟教程 https://www.runoob.com/python3/python3-intro.html

Python环境搭建及IDE安装

  • 要学习Python,首先应该在你的操作系统上面搭建python的运行环境,对于本项目我们选用了安装windows版Python3,当然Python3和之前的Python2.x版本相比发生了一些变化,比如print函数、除法运算、异常等,如果您想深入了解可以通过下面链接深入学习:Python3与Python2.x的区别
    你可以通过下面链接直接通过Python官网下载:Python官网
    具体的Python安装步骤以及环境搭建教程可以参考:Python安装教程
    当你参照上面教程安装好Python之后,打开cmd,输入:
python

会显示你安装Python的版本号等一些信息,如果显示Python为外部命令说明你并没有安装成功,那么请检查你是否是不是将Python添加到环境变量当中或者你下载的是否版本与你的操作系统是否匹配,从网上你会找到相应的解决方案。
在这里插入图片描述

  • 当然,你可以通过命令行的形式编译运行Python程序,但有时候并不是很方便,因此我们可以通过通过一些集成开发环境来运行Python程序,在本项目中我选用了PyCharm,因为我在编写java程序时就选用了同一家公司生产的IntelliJ IDEA 感觉比较好用。下面是是PyCharm的下载地址以及安装教程地址:
    PyCharm下载地址:PyCharm下载链接
    PyCharm安装教程:PyCharm安装教程链接
    安装完毕之后,如果你没有使用正版,你可以从网上查找最近的密钥完成激活,当你这些步骤都操作完毕之后,你就可以使用PyCharm,然后尝试建立自己第一个Python项目了。

可以仿照下面的顺序建立自己的第一个Python项目:New Project ->编写项目路径 -> New -> Python File
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
另外,当你编写Python代码时,可能每次都需要写下它的解释器路径信息以及字符集,即是:

#!/usr/bin/env python
#-*- coding:utf-8 -*-

比较麻烦,你可以将它们放到模板当中,这样每次它都会自己加上,不需要自己在加上:
File -> Settings -> Editor -> File and Code Templates -> Python Script -> 添加上面两句代码即可
在这里插入图片描述
做完这些你就可以我们就开始python学习了。

Python基础语法

中文编码

Python默认的编码是ASCII编码,因此中文无法进行正常打印,读取中文时会发生错误,因此需要修改编码格式,采用通用的utf-8编码,只需要在开头加入

#-*- coding:utf-8 -*-

我们在上面模板已经加入,因此不需要再添加。

标识符

Python的标识符是由字母、数字、下划线组成,不能以数字开始,同时严格区分大小写。而以下划线开始结尾的在Python都具有特殊的含义:

  • 以单下划线开头的代表不能直接访问的类属性,需要通过类提供的接口访问,类似于java中的getter方法。
  • 以双下划线开始的代表类的私有成员。
  • 以双下划线开始同时双下划线结尾的代表Python的特殊方法的标识,比如类的构造函数:__init__().

保留字

Python的保留字代表语言中已经定义使用的,用户不能再使用的标识符,所有的Python关键字只包含小写字母。

import keyword
print(keyword.kwlist)

可以通过上面的代码打印Python的关键字。

['False', 'None', 'True', 'and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 
'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 
'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']

空行与缩进

刚开始学习写Python代码时感觉有些不适用,Python不需要通过大括号来控制类、函数、以及一些逻辑判断,仅仅通过缩进类进行操作。相同的代码块必须使用相同的缩进尺寸,否则将会报错,或者得到想象不到的结果。
Python通过空行来区分函数或者类,但是空行并不是Python的语法,因此不加空行也不会报错,加空行是为了后期维护。

print("hello Python 1")print("hello Python2")

将会出现下面的错误:

  File "F:/pythonstudy/test1.py", line 4print("hello Python2")^
IndentationError: unexpected indent

多行语句及一行多条语句

Python是以一个新行作为一条语句的结束,但是当你的一条语句过长时想使用另起一行书写时,应该使用反斜杠( \ ) 连接,如果你想换行书写的内容在括号内那么久不需要添加反斜杠进行连接了。
另外,当一行需要书写多条语句时,可以通过分号进行分割。

注释

Python的注释有三种:

  • 单行注释: 以 # 开始这一行就会被注释。
  • 多行注释: 可以使用6个双引号""“注释内容”"" 或者6个单引号’’’ 注释内容’’’
# 单行注释
"""
多行注释1
"""
'''
多行注释2
'''

引号

Python可以使用单引号、双引号、三引号("""或者’’’)表示字符串,但是引号开始和结束的必须是相同的数据类型,三引号可以表示多行字符串,而且使用三引号输出与你输入的格式一样,可以用来写一些html程序文本。

str1 = 'hello Python'
str2 = "hello Python"
str3 = """hello 
Python"""
str4 = '''hello 
Python
hello Python
hello Python
'''
print(str4)

结果为:

hello 
Python
hello Python
hello Python

print函数

感觉Python的print函数很强大,它会自己识别你要打印的变量类型,进而选择对应的print重载函数进行打印操作。另外,print函数默认输出换行,如果你不想换行,那么你需要在变量末尾添加end=""。

print("hello Python 1")
h1 = 10
h2 = True
print(h1, h2)
print(h1, end="")
list1 = ["hello", 1, "Python"]
print(list1)

输出结果为:

hello Python 1
10 True
10['hello', 1, 'Python']

import 及 from … import

在Python中引入某个模板使用import和java中一致,不同的是,Python中还有from…import的用法:

  • 导入整个模板:import 模板名
  • 导入某个模板中的某个函数:from 模板名 import 函数名
  • 导入某个模板中多个函数: from 模板名 import 函数1名,函数2名
  • 导入某个模板中全部函数,可以使用通配符:from 模板名 import *

Python基本数据类型

变量赋值

与java或者c++不同,Python的变量不需要声明,但是在使用前必须赋值,这有些像Matlab语言的使用,变量赋值之后才会被创建,而且对于Python来说,变量没有类型,也即是在内存中的对象的类型。

  • 使用等号(=)对变量赋值。
  • 可以使用连等号对多个变量赋值,同时也可以使用一个等号对多个变量赋值。
h = 0
h1 = h2 = h3 = 1
h4, h5, h6 = 2, True, "hello Python"

标准数据类型

Python共有六个标准数据类型:

  • Number 数字
  • String 字符串
  • List 列表
  • Tuple 元组
  • Set 集合
  • Dictionary 字典
    同时这六种标准数据类型又可以分成两大类:
  • 不可变数据:Number、String、Tuple
  • 可变数据:List、Set、Dictionary

顾名思义,不可变数据就是一旦创建,你不可以修改其中的元素,而可变数据,你可以修改变动其中的元素。

Number

Python共支持四种数字类型变量:

  • int 整型
  • float 浮点型
  • bool 布尔型
  • complex 复数型
    看到复数型再次感到Python的便捷,你可以通过type()函数进行判断一个变量的数据类型,或者通过isinstance来判断:
print(type(h))
print(isinstance(h, int))

区别在于:

  • type() 判定子类不属于父类型
  • ininstance() 判定子类是父类型

需要注意的是:

  • Python3中bool型数据也是一种数字,True和False代表着1和0,可以进行数字运算
  • 你可以使用 del 删除单个或者多个变量, del 变量名1, 变量名2
  • 一个变量可以使用赋值指向不同类型的变量,因为没有声明,所以不会出现向java或者c++中的类型错误
  • Python的除法,/ 返回一个浮点型, // 返回一个整型
  • 混合运算时,Python会把整型变成浮点型

常用的函数:
用于数学计算的:

函数返回值(描述)
abs(x)返回数字x的绝对值
ceil(x)返回数字x的的上入整数
exp(x)返回e的x的次幂
fabs(x)返回数字x的绝对值,返回浮点值
floor(x)返回数字x的下舍整数
log(x)返回数字x的对数,可以添加底的值,e或者10,log(x,e)或者log(x,10)
log10(x)返回数字x的以10 为底的对数
max(x)返回序列x的最大值
min(x)返回序列x的最小值
modf(x)返回数字x的整数部分和小数部分,整数部分为浮点值
pow(x,y)返回数字x的y次幂
round(x,n)返回数字x的四舍五入n位
sqrt(x)返回数字x的开根号

用于随机函数的:

函数返回值(描述)
choice(seq)从seq序列中随机挑选出来一个
randrange(start,stop,step)从指定范围内,按照指定基数递增的集合中随机选取一个数
random(x)在 (0,1) 之间随机生成一个数
seed(x)改变随机数生成器的种子seed
shuffle(x)将序列中的元素随机排序
uniform(x,y)在 [x,y] 之间随机生成一个数

用于三角函数:

函数返回值(描述)
cos(x)返回x的余弦值
sin(x)返回x的正弦值
tan(x)返回x的正切值
asin(x)返回x的反正弦弧度值
acos(x)返回x的反余弦弧度值
atan(x)返回x的反正切弧度值
degrees(x)返回弧度x的角度值
radians(x)返回角度x的弧度值

另外,还有一些常量值:

常量描述
pi圆周率
e自然常量

String

Python只用单引号或者双引号,或者 \ 进行转义特殊字符。
Python中字符串的索引值采用两种:

  • 从前面开始为:0 1 2 3…
  • 从后面开始为:-length,…, -2, -1

另外,可以使用中括号进行字符串的截取:

str = 'helloPython'
print(str)       # 打印整个字符串
print(str[0:-1])  # 打印第一个到倒数第二个
print(str[0])     # 打印第一个
print(str[2:5])   # 打印第三个到第五个
print(str[2:])    # 打印第二个之后的包含第二个
print(str * 2)    # 重复打印字符串
print(str + "nihao")   # 字符串的连接

对于特殊字符的转义,可以采用反斜杠,如果你不想进行转义,可以在字符串前面添加字母r:

print("hello\nrunoob")
print(r"hello\nrunoob")

Python的一些转义字符:

转义字符描述
\ (在行尾)续行符
\ \反斜杠
\ ’单引号
\ "双引号
\ n换行
\ r回车
\ f换页
\000
\oyy八进制数,yy代表字符
\ xyy十六进制数,yy代表字符

例如:

print('\o12')
print('\x0a')

另外,Python可以进行格式化输出,类似java中的String.format函数。下面列举了一些常用的格式化符号:

符号描述
%c格式化字符及其ASCII码
%s格式化字符串
%d格式化整数
%u格式化无符号整数
%f格式化浮点数,可以指定小数点后的精度

例如:

ee = 11.55555
print("ee 的数值为:%.2f" % ee)

结果为:

ee 的数值为:11.56

Python中String还有一些常见的内建函数:
在这里列举几种常用的:

序号方法及描述
1count(str, start, end) 返回在指定范围内,str重复的次数
2find(str, start, end) 返回在指定范围内,str是否存在,若存在返回索引值,否则返回-1
3index(str, start, end) 与find一样,但是如果str不存在会报异常
4len(str) 返回字符串的长度
5lower(str) 将str都变为小写
6rstrip(str) 删除字符串末尾的空格
7split(s, str) 将s以str切割
8upper(str) 将str变成大写
9join(seq) 将序列seq以指定的符号连接变成大写
10lstrip(str) 删除字符串开始的空格
import keyword
print("\n".join(keyword.kwlist))

List

类似于java中的List或者c++中的vector,不同的是Python中的List不存在类型检查,你可以在一个列表中添加不同类型的数据,甚至添加另一个列表,列表的元素可以修改变化。它的索引值定义和String一样,索引值以0位开始值,-1位末尾的开始位置,同样可以使用中括号来获取变量:

# 和String的含义一样
list1 = [1, 2, 3]
list2 = [6, 7, 8]
list = ["abc", 1, 2, 3, 4, list1, True]
print(list)
print(list[0]) 
print(list[0:3])
print(list[3:])
print(list * 2)
print(list + list2)
print(list[1:6:2]) # 从第2个元素开始到第7个元素,以步长为2选择,不包含第7个元素

结果为:

['abc', 1, 2, 3, 4, [1, 2, 3], True]
abc
['abc', 1, 2]
[3, 4, [1, 2, 3], True]
['abc', 1, 2, 3, 4, [1, 2, 3], True, 'abc', 1, 2, 3, 4, [1, 2, 3], True]
['abc', 1, 2, 3, 4, [1, 2, 3], True, 6, 7, 8]
[1, 3, [1, 2, 3]]

Python中List函数:

序号函数
1len(list) 列表的元素个数
2max(list) 列表的元素最大值
3min(list) 列表的元素最小值
4list(seq) 将元组转化为列表
5list.append() 在列表最后添加一个元素
6list.count() 列表元素的个数
7list.extent(seq) 在列表最后添加一个序列
8list.index(obj) 返回obj的索引
9list.insert(index, obj) 在列表index插入一个元素
10list.pop() 弹出列表最后位置的元素
11list.remove(obj) 将obj从列表中移除
12list.reverse() 反转列表
13list.sort() 排序
14list.clear() 清空列表
15list.copy() 复制列表

Tuple

可以看做是元素不可以变化的List,有以下几点区别:

  • 元素不可以修改
  • 元素写在小括号中
  • 构造空元组或者一个元素的元组需要注意特殊写法
tuple1 = ()  # 空元组
tuple2 = (1,)   # 一个元素元组
tuple3 = (1, 2, "hello", True, tuple1)
tuple4 = tuple2 + tuple3

Set

Python中的Set是由一个或者多个形态各异的大小整体组成,构成了集合的事物或者对象被称为元素或者成员。可以进行成员的关系测试或者删除重复的元素。使用大括号或者set() 函数创建,需要注意的是:创建一个空集合必须用set函数,因为{ }是创建一个空字典。

set1 = {"hello", "Python", 1, True, "Hi"}
# 关系测试
if "hello" in set1:print("Yes")
else:print("No")# 集合运算
setA = set("abcd")
setB = set("cdef")
print(setA - setB) # 差集
print(setA | setB) # 并集
print(setA & setB) # 交集
print(setA ^ setB) # 两个集合不同时存在的元素

结果是:

Yes
{'b', 'a'}
{'d', 'f', 'b', 'a', 'e', 'c'}
{'d', 'c'}
{'f', 'a', 'e', 'b'}

Python中Set的内置函数:

序号函数
1add() 添加一个元素
2clear() 清空所有元素
3discard() 删除指定元素
4difference() 返回多个集合的差集
5intersection() 返回集合的交集
6issubset() 判断是不是子集
7symmetric_difference() 返回两个集合不重复的元素
8remove() 删除指定元素,若不存在发生错误
9pop() 随机删除一个元素
10update() 添加元素

Dictionary

Dictionary(字典)是一种无序的对象集合,它保存的是键值对,通过键来取值,和java中的map有些类似。

  • key必须是不可变类型变量
  • 大括号进行标识
  • 同一个字典中键需要唯一
  • 创造空字典使用 { }

其中key必须是不可变类型变量,通过大括号进行标识,同一个字典中键需要唯一。

dictionary1 = {"key1": "hello1", 1:"hello2", "key3":"hello3"}
print(dictionary1["key1"])
print(dictionary1[1])
print(dictionary1)
print(dictionary1.keys())
print(dictionary1.values())
print(dictionary1.__len__())
dictionary1["key4"] = 4  # 为字典添加新的元素

可以使用dict() 直接根据键值对序列构造字典:

dictionary2 = dict([("key1", 1), ("key2", 2), ("key3", 3)])
print(dictionary2)

Python中Dictionary的内置函数:

序号函数
1dic.clear() 清空字典中元素
2dic.get(key) 获得键为key的value
3dic.items() 返回字典的键元组数组
4dic.keys() 返回一个迭代器,可以用list() 来转化列表
5dic.updata(dict) 将键值对更新到字典中
6dic.values() 返回一个迭代器,可以用list() 来转化列表
7pop(key) 删除字典给定key对应的值,返回被删除的value

Python数据类型转换

当需要将一个数据类型转化为另一个数据类型时,只需要将你要转化的数据类型当做函数名就好:

函数描述
int(x)将x转化为一个整数
float(x)将x转化为一个浮点数
complex(real,imag)创建一个复数
str(x)将x转化为字符串
eval(x)计算字符串中有效的Python表达式
repr(str)计算字符串中有效Python表达式,返回一个对象
tuple(x)将x转化为一个元组
list(x)将x转化为一个列表
set(x)将x转化为一个可变集合
dict(x)创建一个字典,其中x必须是(key,value) 的元组
frozenset(s)将s转化不可变集合
chr(x)将整数x转化为一个字符
ord(x)将字符x转化为一个整数
hex(x)将整数x转化为它的十六进制字符串
oct(x)将整数x转化为它的八进制字符串
x = 3
print(eval("x + 4"))
>>  7

Python运算符

Python支持以下几种运算符:

  • 算术运算符
运算符描述
+加法
-减法
*乘法
/除法,返回浮点型
%取模
**幂,x**y,返回x的y次幂
//取除法结果的整数部分,若分子分母有一个是浮点数,则结果也为浮点数
  • 比较运算符
运算符描述
==比较两个对象是否相同
!=比较两个对象是否不相同
>是否大于,返回True或者False
<是否小于,返回True或者False
>=是否大于等于,返回True或者False
<=是否小于等于,返回True或者False
  • 赋值运算符
运算符描述
算术运算符=(比如+=、-=等)表示先进行算术运算,然后把结果返回给变量
:=海象运算符,用于表达式内部为变量赋值。Python3.8增加
  • 逻辑运算符
运算符描述
and逻辑与,返回True或者False
or逻辑或,返回True或者False
not逻辑非,返回True或者False
  • 位运算符
运算符描述
&按位与
|按位或
^按位异或
~按位取反 ,这是一个单元运算符
<<左移运算符,高位丢弃,低位补0
>>右移运算符,低位丢弃,高位补0,符号位不变
  • 成员运算符
运算符描述
in如果在指定的序列中返回True,否则返回False,包括字符串、列表或元组
not in如果不在指定的序列中返回False,否则返回True,包括字符串、列表或元组
  • 身份运算符
运算符描述
is判断两个标识符是不是引用同一个对象
is not判断两个标识符是不是引用不同对象

另外,需要注意的是id() 函数用于获取对象的内存地址。

def isSame(aa, bb):if aa is bb:print("aa is bb")else:print("aa is not bb")if id(aa) == id(bb):print("id(aa) == id(bb)")else:print("id(aa) != id(bb)")aa = 10
bb = 10
isSame(aa, bb)
bb = 20
isSame(aa, bb)

结果为:

aa is bb
id(aa) == id(bb)
aa is not bb
id(aa) != id(bb)

运算优先级

Python运算符优先级与其他语言相似,由高到低:

运算符描述
**
~ - +按位取反, 一元加法减法
* / % //乘、除、取模、整除
+ -加减
>> <<右移 左移
&位与
^ |位异或,或
<= >= < >比较运算符
== !=等于运算符
= 算术运算符=赋值运算符
is is not身份运算符
in not in成员运算符
not and or逻辑运算符

Python语句

条件控制

与java或者c++中一样,就是需要注意if-elif-else之间的匹配,还有就是各个语句之间的缩进:

mn = 10
if mn < 100:print(mn)if mn < 20:print(mn)elif mn < 30:print(mn)else:print(mn)
elif mn < 200:print(mn)
else:print(mn)

循环语句

  • while-else循环语句
num = 1
while num < 10:-num
else:print(num)
  • for-else循环语句
listS = ["A", "B", "C"]
for num1 in listS:print(num1)
else:print("Have null")

同时,for可以与range() 函数结合使用:

for ii in range(5):print(ii, end=" ")

结果是:

0 1 2 3 4 

需要注意的是,continue和break的使用,与java和c++一样:

  • continue跳出本次循环,执行下一次循环
  • break直接跳出循环

还有一个pass() 函数,用来占位使用,是空语句,是为了保证代码的完整性。

总结

这是一篇关于Python的学习笔记,许多内容都是借鉴别人的,都比较简单的只是,好多内容和java或者c++都有重叠,还有好多深入的东西没有介绍,以后会补充。最后,感谢菜鸟教程提供的学习资料。

Python3 教程 | 菜鸟教程 https://www.runoob.com/python3/python3-tutorial.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/544352.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring Boot Admin,贼好使!

作者 | 磊哥来源 | Java中文社群&#xff08;ID&#xff1a;javacn666&#xff09;转载请联系授权&#xff08;微信ID&#xff1a;GG_Stone&#xff09;Spring Boot Admin&#xff08;SBA&#xff09;是一个开源的社区项目&#xff0c;用于管理和监控 Spring Boot 应用程序。应…

JAVA基础之容器基础内容

Java Collections框架 Java Collections框架中包含了大量的集合接口以及这些接口的实现类和操作它们的方法&#xff0c;具体包含了Set(集合&#xff09;、List(列表)、Map(键值对)、Queue(队列)、Stack(栈)等&#xff0c;其中List、Set、Queue、Stack都继承了Collection接口。…

更快的Maven构建工具mvnd和Gradle哪个性能更好?

作者 | 磊哥来源 | Java中文社群&#xff08;ID&#xff1a;javacn666&#xff09;转载请联系授权&#xff08;微信ID&#xff1a;GG_Stone&#xff09;Maven 作为经典的项目构建工具相信很多人已经用很久了&#xff0c;但如果体验过 Gradle&#xff0c;那感觉只有两个字“真香…

SpringBoot + ShardingSphere 秒级分库分表!

Spring Boot 作为主流微服务框架&#xff0c;拥有成熟的社区生态。市场应用广泛&#xff0c;为了方便大家&#xff0c;整理了一个基于spring boot的常用中间件快速集成入门系列手册&#xff0c;涉及RPC、缓存、消息队列、分库分表、注册中心、分布式配置等常用开源组件&#xf…

git reset, git checkout, git revert 区别 (译)

博客原文地址: http://blog.mexiqq.com/index.php/archives/3/题记&#xff1a;团队中大多数成员使用 sourceTree 和 github 两款 git 工具&#xff0c;然而大家对于图形化工具提供的 reset,checkout,revert 功能点并不是很了解&#xff0c;甚至于混淆,然后凭借猜测去使用。功夫…

Redis笔记之基本数据结构 动态字符串SDS

简单动态字符串 传统上的C语言的字符串表示是以空字符结尾的字符数组&#xff08;C字符串&#xff09;&#xff0c;redis自己实现一个动态字符串&#xff08;SDS&#xff09;&#xff0c;两者之间的区别以及使用SDS的好处有&#xff1a; 结构不同。C字符串以空字符结尾的字符…

扯一把 Spring 的三种注入方式,到底哪种注入方式最佳?

1. 实例的注入方式首先来看看 Spring 中的实例该如何注入&#xff0c;总结起来&#xff0c;无非三种&#xff1a;属性注入set 方法注入构造方法注入我们分别来看下。1.1 属性注入属性注入是大家最为常见也是使用最多的一种注入方式了&#xff0c;代码如下&#xff1a;Service p…

Redis笔记之基本数据结构 链表

链表 链表具有空间存储不连续&#xff0c;增删节点快的优点&#xff0c;因此redis在列表键、发布与订阅、慢查询、监视器等使用了链表作为底层实现。由于C语言中没有内置的链表实现&#xff0c;因此redis自己进行了实现。 双向链表。每个listtNode都有perv和next指针&#x…

SpringCloud组件:Ribbon负载均衡策略及执行原理!

大家好&#xff0c;我是磊哥。今天我们来看下微服务中非常重要的一个组件&#xff1a;Ribbon。它作为负载均衡器在分布式网络中扮演着非常重要的角色。本篇主要内容如下&#xff1a;在介绍 Ribbon 之前&#xff0c;不得不说下负载均衡这个比较偏僻的名词。为什么说它偏僻了&…

Redis笔记之基本数据结构 字典

字典 符号表、关联数组或者映射&#xff0c;有点类似于java中的map&#xff0c;用于保存键值对key-value。字典中的键key是独一无二的。底层实现为哈希表。下面进行简述&#xff1a; 哈希表。哈希表主要包含table数组、size、sizemask以及used。table用于保存哈希表节点&…

【零基础学习iOS开发】【02-C语言】02-第一个C语言程序

本文目录 前言一、编写第一个C语言程序-Hello World二、编译程序三、链接程序四、运行程序五、总结六、学习建议七、clang指令汇总回到顶部前言 前面已经唠叨了这么多理论知识&#xff0c;从这讲开始&#xff0c;就要通过接触代码来学习C语言的语法。学习任何一门语言&#xff…

安卓平板体验Java开发,还能白嫖一年阿里无影云,真香!(内含白嫖方法,人人可领)...

作者 | 磊哥来源 | Java中文社群&#xff08;ID&#xff1a;javacn666&#xff09;转载请联系授权&#xff08;微信ID&#xff1a;GG_Stone&#xff09;阿里无影云早有耳闻&#xff0c;前两天看朋友发体验照片&#xff0c;可能是程序员天生爱折腾的特性又发挥作用了&#xff0c…

你知道group by的工作原理和优化思路吗?

前言 日常开发中&#xff0c;我们经常会使用到group by。亲爱的小伙伴&#xff0c;你是否知道group by的工作原理呢&#xff1f;group by和having有什么区别呢&#xff1f;group by的优化思路是怎样的呢&#xff1f;使用group by有哪些需要注意的问题呢&#xff1f;本文将跟大家…

关Jquery判断input type=checkbox元素是否被选中的判断

2019独角兽企业重金招聘Python工程师标准>>> 在用到复选框的时候&#xff0c;想在js中判断chekbox是否被选中 <input name"isPermit" id"isPermit" type"checkbox"> 百度了很多的判断方法 1、 if($("#isPermit").att…

Redis夺命十二问,你能扛到第几问?

Redis是面试中绕不过的槛&#xff0c;只要在简历中写了用过Redis&#xff0c;肯定逃不过。今天我们就来模拟一下面试官在Redis这个话题上是如何一步一步深入&#xff0c;全面考察候选人对于Redis的掌握情况。小张&#xff1a;面试官&#xff0c;你好。我是来参加面试的。面试官…

bzoj 1192

http://www.lydsy.com/JudgeOnline/problem.php?id1192 好像学过一个东西&#xff1a; [0..2^(N1)-1]内的数都的都可以由2^0,2^1,...,2^N这N1个数中若干个相加得到。 #include<cstdio> #include<cstdlib> #include<iostream> #include<fstream> #incl…

Spring Boot Admin 报警提醒和登录验证功能实现!

作者 | 磊哥来源 | Java中文社群&#xff08;ID&#xff1a;javacn666&#xff09;转载请联系授权&#xff08;微信ID&#xff1a;GG_Stone&#xff09;Spring Boot Admin&#xff08;SBA&#xff09;是一个开源的社区项目&#xff0c;用于管理和监控 Spring Boot 应用程序&…

企业Shell面试题18:单词及字母去重排序案例

1、按单词出现频率降序排序&#xff01; 2、按字母出现频率降序排序&#xff01; the squid project provides a number of resources to assist users design,implement and support squid installations. Please browse the documentation and support sections for more inf…

5种高大上的yml读取方式,你知道几种?

我们今天就来点实战&#xff0c;总结一下除了烂大街的Value和ConfigurationProperties外&#xff0c;还有哪些读取yml配置文件的方法&#xff1f;1、Environment在Spring中有一个类Environment&#xff0c;它可以被认为是当前应用程序正在运行的环境&#xff0c;它继承了Proper…

为什么ConcurrentHashMap不允许插入null值?

作者&#xff1a;磊哥来源 | Java面试真题解析&#xff08;ID&#xff1a;aimianshi666&#xff09;转载请联系授权&#xff08;微信ID&#xff1a;GG_Stone&#xff09;在 Java 语言中&#xff0c;ConcurrentHashMap 和 Hashtable 这些线程安全的集合是不允许 key 或 value 插…