首页
关于
留言
Search
1
红米 AX3000 (AX6) 路由器解锁 SSH 教程
6,676 阅读
2
网盘挂载程序sharelist美化教程
4,216 阅读
3
小米路由器 AX3600 开启SSH教程,官方固件即可安装 ShellClash开启科学上网
2,168 阅读
4
Oracle 甲骨文 ARM VPS 自动抢购脚本
1,819 阅读
5
编译带PassWall和SSR-plus插件的Openwrt系统
1,393 阅读
前端
Vue
React
后端
Java
Python
PHP
数据库
运维
杂谈
小程序
影视资源
登录
Search
标签搜索
Java
Linux
Mysql
IDEA
Debian
Docker
Springboot
CentOS
Cloudflare
Maven
JavaScript
SQL
Wordpress
宝塔
Nginx
Windows
MacBook
JS
CSS
Openwrt
William
累计撰写
144
篇文章
累计收到
702
条评论
首页
栏目
前端
Vue
React
后端
Java
Python
PHP
数据库
运维
杂谈
小程序
影视资源
页面
关于
留言
搜索到
40
篇与
的结果
2021-01-29
Debian 10 安装 Python 3.9 教程
在 Debian 10 上安装 Python 3.9在 Debian 上构建 Python 3.9 是一个相对简单的过程,只需几分钟。1、首先安装构建 Python 源代码所需的软件包:sudo apt update sudo apt install build-essential zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libreadline-dev libffi-dev wget2、使用 wget 或 curl 从 Python下载页面 下载最新版本的源代码 。在撰写本文时,最新版本是 3.9.1 :curl -O https://www.python.org/ftp/python/3.9.1/Python-3.9.1.tar.xz3、下载完成后, 解压缩 tar 文件 :tar -xf Python-3.9.1.tar.xz4、进入到 Python 源目录并运行 configure 脚本:cd Python-3.9.1 ./configure --enable-optimizations //该脚本执行许多检查,以确保系统上的所有依赖项都存在。该 `--enable-optimizations` 选项将通过运行多个测试来优化 Python 二进制文件,这将使构建过程变慢。5、运行 make 开始构建过程make -j 4修改 -j 使其与处理器中的内核数量相对应。您可以通过键入 nproc 内核数。6、构建完成后,以具有 sudo 访问权限的用户身份(博主直接用root用户)运行以下命令来安装 Python 二进制文件:sudo make altinstall不要使用标准 make install ,因为它将覆盖默认的系统 python3 二进制文件。7、至此,Python 3.9 已安装在您的 Debian 系统上并可以使用。您可以通过键入以下内容进行验证:python3 --version 终端输出 Python 3.9.1创建虚拟环境Python 虚拟环境是一个独立的目录树,其中包括 Python 和许多其他软件包。它允许您将 Python 模块安装在特定项目的隔离位置,而不是全局安装。这样,您不必担心会影响其他 Python 项目。在此示例中,我们将在用户主目录中创建一个新的 Python 3.9 项目 my_app 。首先,创建项目目录并切换到该目录:mkdir ~/my_app && cd ~/my_app在项目根目录内部,运行以下命令以创建一个名为 my_app_venv 的虚拟环境:python3 -m venv my_app_venv激活环境:source my_app_venv/bin/activate激活后, shell 提示符将以环境名称为前缀。从 Python 3.4 开始,在创建虚拟环境时, Python 的 软件包管理器 pip 会被默认安装。在虚拟环境中,可以使用 pip 代替 pip3.9,同样使用 python 代替 python3.9 :完成虚拟环境的工作后,键入 deactivate 停用,然后将返回到常规 shell 。
2021年01月29日
63 阅读
0 评论
2 点赞
2020-12-24
二、八、十、十六进制相互转换(图解篇)
下文会分4个部分对这个图进行分解,针对每个部分会以图文的形式进行讲解:(二、八、十六进制) → (十进制);(十进制) → (二、八、十六进制);(二进制) ↔ (八、十六进制);(八进制) ↔ (十六进制);一、进制转换算法(Convert)在数字后面加上不同的字母来表示不同的进位制。B(Binary)表示二进制,O(Octal)表示八进制,D(Decimal)或不加表示十进制,H(Hexadecimal)表示十六进制。例如:(101011)B=(53)O=(43)D=(2B)H(一) (二、八、十六进制) → (十进制)A. 二进制 → 十进制 方法:二进制数从低位到高位(即从右往左)计算,第0位的权值是2的0次方,第1位的权值是2的1次方,第2位的权值是2的2次方,依次递增下去,把最后的结果相加的值就是十进制的值了。 例:将二进制的(101011)B转换为十进制的步骤如下:第0位 1 x 2^0 = 1;第1位 1 x 2^1 = 2;第2位 0 x 2^2 = 0;第3位 1 x 2^3 = 8;第4位 0 x 2^4 = 0;第5位 1 x 2^5 = 32;读数,把结果值相加,1+2+0+8+0+32=43,即(101011)B=(43)D。B. 八进制 → 十进制 方法:八进制数从低位到高位(即从右往左)计算,第0位的权值是8的0次方,第1位的权值是8的1次方,第2位的权值是8的2次方,依次递增下去,把最后的结果相加的值就是十进制的值了。 八进制就是逢8进1,八进制数采用 0~7这八数来表达一个数。 例:将八进制的(53)O转换为十进制的步骤如下:第0位 3 x 8^0 = 3;第1位 5 x 8^1 = 40;读数,把结果值相加,3+40=43,即(53)O=(43)D。C. 十六进制 → 十进制 方法:十六进制数从低位到高位(即从右往左)计算,第0位的权值是16的0次方,第1位的权值是16的1次方,第2位的权值是16的2次方,依次递增下去,把最后的结果相加的值就是十进制的值了。 十六进制就是逢16进1,十六进制的16个数为0123456789ABCDEF。 例:将十六进制的(2B)H转换为十进制的步骤如下:第0位 B x 16^0 = 11;第1位 2 x 16^1 = 32;读数,把结果值相加,11+32=43,即(2B)H=(43)D。(二)(十进制) → (二、八、十六进制)A. 十进制 → 二进制 方法:除2取余法,即每次将整数部分除以2,余数为该位权上的数,而商继续除以2,余数又为上一个位权上的数,这个步骤一直持续下去,直到商为0为止,最后读数时候,从最后一个余数读起,一直到最前面的一个余数。 例:将十进进制(43)D转换为二进制的步骤如下:将商43除以2,商21余数为1;将商21除以2,商10余数为1;将商10除以2,商5余数为0;将商5除以2,商2余数为1;将商2除以2,商1余数为0;将商1除以2,商0余数为1;读数,因为最后一位是经过多次除以2才得到的,因此它是最高位,读数字从最后的余数向前读,101011,即(43)D=(101011)B。B. 十进制 → 八进制方法1:除8取余法,即每次将整数部分除以8,余数为该位权上的数,而商继续除以8,余数又为上一个位权上的数,这个步骤一直持续下去,直到商为0为止,最后读数时候,从最后一个余数起,一直到最前面的一个余数。 例:将十进制的(796)D转换为八进制的步骤如下:将商796除以8,商99余数为4;将商99除以8,商12余数为3;将商12除以8,商1余数为4;将商1除以8,商0余数为1;读数,因为最后一位是经过多次除以8才得到的,因此它是最高位,读数字从最后的余数向前读,1434,即(796)D=(1434)O。方法2:使用间接法,先将十进制转换成二进制,然后将二进制又转换成八进制;C. 十进制 → 十六进制方法1:除16取余法,即每次将整数部分除以16,余数为该位权上的数,而商继续除以16,余数又为上一个位权上的数,这个步骤一直持续下去,直到商为0为止,最后读数时候,从最后一个余数起,一直到最前面的一个余数。 例:将十进制的(796)D转换为十六进制的步骤如下:将商796除以16,商49余数为12,对应十六进制的C;将商49除以16,商3余数为1;将商3除以16,商0余数为3;读数,因为最后一位是经过多次除以16才得到的,因此它是最高位,读数字从最后的余数向前读,31C,即(796)D=(31C)H。方法2:使用间接法,先将十进制转换成二进制,然后将二进制又转换成十六进制;(三) (二进制) ↔ (八、十六进制)A. 二进制 → 八进制 方法:取三合一法,即以二进制的小数点为分界点,向左(向右)每三位取成一位,接着将这三位二进制按权相加,然后,按顺序进行排列,小数点的位置不变,得到的数字就是我们所求的八进制数。如果向左(向右)取三位后,取到最高(最低)位时候,如果无法凑足三位,可以在小数点最左边(最右边),即整数的最高位(最低位)添0,凑足三位。 例:将二进制的(11010111.0100111)B转换为八进制的步骤如下:小数点前111 = 7;010 = 2;11补全为011,011 = 3;小数点后010 = 2;011 = 3;1补全为100,100 = 4;读数,读数从高位到低位,即(11010111.0100111)B=(327.234)O。二进制与八进制编码对应表:二进制八进制00000011010201131004101511061117B. 八进制 → 二进制方法:取一分三法,即将一位八进制数分解成三位二进制数,用三位二进制按权相加去凑这位八进制数,小数点位置照旧。 例:将八进制的(327)O转换为二进制的步骤如下:3 = 011;2 = 010;7 = 111;读数,读数从高位到低位,011010111,即(327)O=(11010111)B。C. 二进制 → 十六进制方法:取四合一法,即从二进制的小数点为分界点,向左(向右)每四位取成一位,接着将这四位二进制按权相加,然后,按顺序进行排列,小数点的位置不变,得到的数字就是我们所求的十六进制数。如果向左(向右)取四位后,取到最高(最低)位时候,如果无法凑足四位,可以在小数点最左边(最右边),即整数的最高位(最低位)添0,凑足四位。 例:将二进制的(11010111)B转换为十六进制的步骤如下:0111 = 7;1101 = D;读数,读数从高位到低位,即(11010111)B=(D7)H。D. 十六进制 → 二进制方法:取一分四法,即将一位十六进制数分解成四位二进制数,用四位二进制按权相加去凑这位十六进制数,小数点位置照旧。 例:将十六进制的(D7)H转换为二进制的步骤如下:D = 1101;7 = 0111;读数,读数从高位到低位,即(D7)H=(11010111)B。(四) (八进制) ↔ (十六进制)A. 八进制 → 十六进制方法:将八进制转换为二进制,然后再将二进制转换为十六进制,小数点位置不变。例:将八进制的(327)O转换为十六进制的步骤如下:3 = 011;2 = 010;7 = 111;0111 = 7;1101 = D;读数,读数从高位到低位,D7,即(327)O=(D7)H。B. 十六进制 → 八进制方法:将十六进制转换为二进制,然后再将二进制转换为八进制,小数点位置不变。例:将十六进制的(D7)H转换为八进制的步骤如下:7 = 0111;D = 1101;0111 = 7;010 = 2;011 = 3;读数,读数从高位到低位,327,即(D7)H=(327)O。二、扩展阅读包含小数的进制换算:(ABC.8C)H=10x16^2+11x16^1+12x16^0+8x16^-1+12x16^-2 =2560+176+12+0.5+0.046875 =(2748.546875)D负次幂的计算:2^-5=2^(0-5)=2^0/2^5=1/2^5同底数幂相除,底数不变,指数相减,反过来我们需要了解一个数学关系,即23=8,24=16,而八进制和十六进制是用这关系衍而来的,即用三位二进制表示一位八进制,用四位二进制表示一位十六进制数。接着,记住4个数字8、4、2、1(23=8、22=4、21=2、20=1)。
2020年12月24日
80 阅读
0 评论
0 点赞
2020-08-19
在SpringBoot的application.yaml文件配置schema却无法执行sql
William看的教程里面用的是1.5.1的springboot,但是William自己用的是2.3.3的。教程里是没有这种问题的,但是我这个高版本有这个问题。在application.yml中加入:schema - classpath:sql/department.sql - classpath:sql/employee.sql将sql文件统一放在resources文件夹下的sql文件夹中。不执行的原因是少了这一句:initialization-mode: always 要把它添加在application.yml中
2020年08月19日
44 阅读
0 评论
0 点赞
2020-07-30
使用fastjson进行Map与JSONObject以及List与JSONArray进行转换
1、Map转换成JSONObjectJSONObject object = JSONObject.parseObject(JSON.toJSONString(map));2、JSONObject转换成MapMap<string, object=""> itemMap = JSONObject.toJavaObject(itemJSONObject, Map.class);3、List转换成JSONArrayJSONArray array = JSONArray.parseArray(JSON.toJSONString(itemList));4、JSON转换成对象List<string> itemListString = JSON.parseArray(itemJsonString, String.class);
2020年07月30日
63 阅读
0 评论
0 点赞
2020-06-03
IDEA自动生成serialVersionUID
在IDEA中打开Preferrences->Editor->Inspectations,在右侧输入框中,输入UID进行搜索(人工找太慢了)。然后勾选 Serializable class without 'serialVersionUID'。此时,右侧的 Security处应该是 Warning 和 In All Scopes。回到编辑器中,新建一个实体类,将光标移动到实体类名上,macOS系统按 option+enter, Windows系统按 alt+enter,部分快捷键可能不一样,按实际情况。然后选择 add 'serialVersionUID' field
2020年06月03日
32 阅读
0 评论
0 点赞
2020-05-27
JAVA时间的12小时与24小时制
问题场景:由于业务需要,需要转换北京时间与UTC时间,两者相差8小时差,也就是比如现在是北京时间上午8点,那么UTC时间就是午夜12点。从中国联通泰利特平台接口获取数据时需要使用的是UTC时间,测试时能够获取,但是过了一会以后无法获取时间,接口返回数据为空。问题分析:编码的时候是有两台电脑,一台MacBook和一台Windows10系统的,测试的时候是用的windows电脑,正式代码是迁移到MacBook上面跑的。因为我自己将windows电脑的时间个性化了(也就是在时间那里加入中文)导致原本是24小时制的,显示的时候是12小时制。刚好在windows上测试的时候,用来转换的时间是没有考虑到不是24小时制的情况,就出现了如下情况:泰利特平台数据库是每1分钟更新一次数据,现在是北京时间上午9点,当非24小时制转换时,java代码获取到的是9:00,减去8小时时差就是同一天的凌晨1就会请求获取非合适时间获取数据。解决方案:Date date=new Date(); //转换成时间格式12小时制 SimpleDateFormat df_12=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); //转换成时间格式24小时制 SimpleDateFormat df_24=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); System.out.println("12小时制时间::"+df_12.format(date)); System.out.println("24小时制时间::"+df_24.format(date));输出结果为:12小时制时间::2017-12-07 03:55:04 24小时制时间::2017-12-07 15:55:04
2020年05月27日
41 阅读
0 评论
0 点赞
2020-04-21
request.getcontextPath()详解
request.getContextPath():是在开发Web项目时,经常用到的方法,是为了解决相对路径的问题,可返回站点的根路径。比如:要生成一个文件放在服务器上得一个目录下,可以使用request.getContextPath()+/dir,组成一个完整得目录结构!当使用Tomcat作为Web服务器,项目一般部署在Tomcat下的webapps的目录下。具体来说主要用两种部署的路径:(1)将web项目中的webRoot下的文件直接拷贝到webapps/ROOT下(删除ROOT下的原有文件);(2)在Tomcat下的webapps中创建以项目名称命名(当然也可以用其他的名称)的文件夹,并将webRoot下的文件直接拷贝到该文件夹下。对于第一部署方法,request.getContextPath()的返回值为空(即:"",中间无空格,注意区分null)。对于第二部署方法,其返回值为:/创建的文件夹的名称。假定你的web application 名称为news,你在浏览器中输入请求路径:http://localhost:8080/news/main/list.jsp则执行下面向行代码后打印出如下结果:1、System.out.println(request.getContextPath());打印结果:/news2、System.out.println(request.getServletPath());打印结果:/main/list.jsp3、System.out.println(request.getRequestURI());打印结果:/news/main/list.jsp4、ystem.out.println(request.getRealPath("/"));打印结果:F:\Tomcat 6.0\webapps\news\testrequest.getContextPath()可以返回当前页面所在的应用的名字;request.getSchema()可以返回当前页面使用的协议,http 或是 https;request.getServerName()可以返回当前页面所在的服务器的名字;request.getServerPort()可以返回当前页面所在的服务器使用的端口,就是80;实际应用中,一般用来解决jsp测试和生产环境路径不同的问题:% String appContext = request.getContextPath(); String basePath =request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort() + appContext; %
2020年04月21日
78 阅读
0 评论
0 点赞
2020-04-10
Java循环语句中断
return 语句的作用return 从当前的方法中退出,返回到该调用的方法的语句处,继续执行return 返回一个值给调用该方法的语句,返回值的数据类型必须与方法的声明中的返回值的类型一致,可以使用强制类型转换来是数据类型一致return 当方法说明中用void声明返回类型为空时,应使用这种格式,不返回任何值。break语句的作用只能在循环体内和switch语句体内使用break语句。当break出现在循环体中的switch语句体内时,其作用只是跳出该switch语句体。当break出现在循环体中,但并不在switch语句体内时,则在执行break后,跳出整个循环体,后面的都不执行。(就比如说两个for语句,第一个for语句里面有一个break执行了,则这个for循环后面的多不再执行,哪怕那个break是在for里面的if里面执行的,直接转到第二个for循环中)在死循环结构中,当达到某一条件时,应用break语句跳出该死循环.continue语句作用continue语句的一般形式为:continue;其作用是结束本次循环,即本次循环不执行,接着执行下一次循环。注意:执行continue语句并没有使整个循环终止。在while和do-while循环中,continue语句使得流程直接跳到循环控制条件的测试部分 ,然后决定循环是否继续进行。在for 循环中,遇到continue后,跳过循环体中余下的语句,而去对for语句中的“表达式3”求值,然后进行“表达式2”的条件测试,最后根据“表达式2”的值来决定for循环是否执行。在循环体内,不论continue是作为何种语句中的语句成分,都将按上述功能执行,这点与break有所不同public class Test{ public static void main(String[] args){ testBreak(); testContinue(); testReturn(); } public void testBreak(){ for(int i=0;i<10;i++){ if(i%2==0){ System.out.println("i="+i); }else{ System.out.println("执行了break语句,跳出当前循环!"); break; } } } public void testContinue(){ for(int i=0;i<10;i++){ if(i%2==0){ System.out.println("没有执行continue语句输出i="+i); }else{ System.out.println("执行了Continue语句,跳出当前循环!"); continue; } } } public void testReturn(){ for(int i=0;i<10;i++){ System.out.println("执行了return语句,直接跳出了当前的testReturn方法!"); return; } } }运行结果:i=0 执行了break语句,跳出当前循环! 没有执行continue语句输出i=0 执行了Continue语句,跳出当前循环! 没有执行continue语句输出i=2 执行了Continue语句,跳出当前循环! 没有执行continue语句输出i=4 执行了Continue语句,跳出当前循环! 没有执行continue语句输出i=6 执行了Continue语句,跳出当前循环! 没有执行continue语句输出i=8 执行了Continue语句,跳出当前循环! 执行了return语句,直接跳出了当前的testReturn方法!for循环的语句执行顺序:for(sta1, sta2, sta3){ sta4; }上面的代码当中:1、当进入for循环时,先执行sta1,2、再执行sta2,如果sta2判断为真,则执行sta43、再执行sta34、又执行sta2,sta2为真,则执行sta4,如此重复,最后由sta2决定是否执行循环。
2020年04月10日
31 阅读
0 评论
0 点赞
1
...
4
5