<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[scorhl的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/scorhl</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; scorhl]]></copyright><item><title><![CDATA[线程互斥锁]]></title><link>https://blog.youkuaiyun.com/scorhl/article/details/139755082</link><guid>https://blog.youkuaiyun.com/scorhl/article/details/139755082</guid><author>scorhl</author><pubDate>Tue, 02 Jun 2026 09:02:26 +0800</pubDate><description><![CDATA[互斥锁的特点：原子性、唯一性、非繁忙等待。对互斥锁进行加锁后，任何其他试图再次对互斥锁加锁的线程将会被阻塞，直到锁被释放。非阻塞获取锁的方式，在尝试获取锁时不会阻塞当前线程，而是立即返回获取锁的结果，如果获取成功则返回 true，否则返回 false。阻塞获取锁的方式，如果当前锁被其他线程持有，则当前线程会一直阻塞等待获取锁，直到获取到锁或者发生超时或中断等情况才会结束等待。阻塞主线程，等待指定子线程结束，子线程结束后，资源被主线程收回。有两种方法初始化互斥锁，静态方式和动态方式。返回值：成功返回0。]]></description><category></category></item><item><title><![CDATA[进程]]></title><link>https://blog.youkuaiyun.com/scorhl/article/details/139268636</link><guid>https://blog.youkuaiyun.com/scorhl/article/details/139268636</guid><author>scorhl</author><pubDate>Mon, 10 Jun 2024 22:33:42 +0800</pubDate><description><![CDATA[system函数调用shell命令，只能获取到shell命令的返回值，而不能获取shell命令的输出结果，用popen函数可以获取命令的输出结果。创建子进程，子进程会复制父进程的变量数据和堆、栈空间，只共享正文段，并再次执行一次代码。低地址至高地址：代码区(正文段)，局部变量区(初始化段)，全局变量区(未初始化段)，堆空间，栈空间。作用：等待进程改变状态。getppid()-->获取父进程的pid。父进程获得子进程的pid，子进程获得0，失败为-1。父进程获得子进程的pid，子进程获得0，失败为-1。]]></description><category></category></item><item><title><![CDATA[I/O控制]]></title><link>https://blog.youkuaiyun.com/scorhl/article/details/139306373</link><guid>https://blog.youkuaiyun.com/scorhl/article/details/139306373</guid><author>scorhl</author><pubDate>Wed, 29 May 2024 22:06:34 +0800</pubDate><description><![CDATA[单片机通过寻址找到指定的I/O口。在头文件REGX52.H中所有的I/O口被重命名成简易的形式供我们使用。机械触点的弹性作用使单间在闭合、断开时不会马上稳定地接通、断开。抖动时间一般为10ms～50ms。单片机通过检测某个I/O口输入或输出的高低电平来识别并处理用户的需求。myVari = 0;//单片机的P3.7口输出低电平。myVari = 1;//单片机的P3.7口输出低电平。使用STC-ISP自带的延时函数。//检测输入只需要判断。]]></description><category></category></item><item><title><![CDATA[打开/创建文件]]></title><link>https://blog.youkuaiyun.com/scorhl/article/details/139245813</link><guid>https://blog.youkuaiyun.com/scorhl/article/details/139245813</guid><author>scorhl</author><pubDate>Mon, 27 May 2024 22:52:20 +0800</pubDate><description><![CDATA[打开失败返回-1。命令：man fread、man fwrite。nmemb：这是元素的个数，每个元素的大小为 size 字节。offset：光标的相对偏移量，当前位置的偏移量为0。offset：光标的相对偏移量，当前位置的偏移量为0。返回从文件开头到当前位置的字节偏移量。命令：man 2 close。buf：写入的缓存，可以是任意类型的数据。buf：读出的缓存，可以是任意类型的数据。SEEK_SET：相对于文本开头的偏移。SEEK_CUR：相对于当前位置的偏移。SEEK_END：相对于文本末尾的偏移。]]></description><category></category></item><item><title><![CDATA[虚拟级新建Linux系统]]></title><link>https://blog.youkuaiyun.com/scorhl/article/details/128983227</link><guid>https://blog.youkuaiyun.com/scorhl/article/details/128983227</guid><author>scorhl</author><pubDate>Sat, 11 Feb 2023 14:33:25 +0800</pubDate><description><![CDATA[虚拟级新建Linux系统]]></description><category></category></item><item><title><![CDATA[虚拟机下载]]></title><link>https://blog.youkuaiyun.com/scorhl/article/details/128978672</link><guid>https://blog.youkuaiyun.com/scorhl/article/details/128978672</guid><author>scorhl</author><pubDate>Fri, 10 Feb 2023 23:14:36 +0800</pubDate><description><![CDATA[虚拟机地址下载]]></description><category></category></item><item><title><![CDATA[DRF 前篇-序列化器]]></title><link>https://blog.youkuaiyun.com/scorhl/article/details/120882976</link><guid>https://blog.youkuaiyun.com/scorhl/article/details/120882976</guid><author>scorhl</author><pubDate>Thu, 21 Oct 2021 13:46:31 +0800</pubDate><description><![CDATA[1、序列化器继承图：



2、定义方式：定义类继承rest_framework.serializers中的Serializer或ModelSerializer

3、序列化方式：根据模型重新定义序列化字段：

models中：

class StudentInfo(models.Model):
    name = models.CharField(max_length=200)
    age = models.IntegerField()
    sex = models.IntegerField()]]></description><category></category></item><item><title><![CDATA[Django 原生函数生成接口]]></title><link>https://blog.youkuaiyun.com/scorhl/article/details/120880578</link><guid>https://blog.youkuaiyun.com/scorhl/article/details/120880578</guid><author>scorhl</author><pubDate>Thu, 21 Oct 2021 10:08:37 +0800</pubDate><description><![CDATA[1、通过路由指定函数名称调用执行接口

2、实践

models：

from django.db import models


class StudentInfo(models.Model):
    name = models.CharField(max_length=200)
    age = models.IntegerField()
    sex = models.IntegerField()
    classes = models.CharField(max_length=200)


]]></description><category></category></item><item><title><![CDATA[Django views.View视图]]></title><link>https://blog.youkuaiyun.com/scorhl/article/details/120870012</link><guid>https://blog.youkuaiyun.com/scorhl/article/details/120870012</guid><author>scorhl</author><pubDate>Wed, 20 Oct 2021 17:25:01 +0800</pubDate><description><![CDATA[1、views.View与原生的区别：

创建了as_view方法使得路由能够根据方法名识别请求类型。如：get请求不在url中传pk参数时，调用获取列表的方法，传入pk参数时，调用获取详情方法
2、视图中引入类

由于获取列表与获取详情都是调用get方法，一个类中不能存在两个相同的方法名，所以根据参数pk是否传入分为两类：列表、详情
	列表中：获取列表、添加，方法分别为：get、post
	详情中：获取详情、更新、删除，方法分别为：get、put、delete
3、url的变动

由于python3的pa]]></description><category></category></item><item><title><![CDATA[django ForeignKey参数]]></title><link>https://blog.youkuaiyun.com/scorhl/article/details/120724772</link><guid>https://blog.youkuaiyun.com/scorhl/article/details/120724772</guid><author>scorhl</author><pubDate>Tue, 12 Oct 2021 15:44:09 +0800</pubDate><description><![CDATA[1、ForeignKey源码参数：


def __init__(self, to, on_delete, related_name=None, related_query_name=None,
                 limit_choices_to=None, parent_link=False, to_field=None,
                 db_constraint=True, **kwargs):

2、各参数作用：

to：外键关联的对象(class)
	on_del]]></description><category></category></item><item><title><![CDATA[django setting配置(笔记)]]></title><link>https://blog.youkuaiyun.com/scorhl/article/details/120721724</link><guid>https://blog.youkuaiyun.com/scorhl/article/details/120721724</guid><author>scorhl</author><pubDate>Tue, 12 Oct 2021 14:02:27 +0800</pubDate><description><![CDATA[1、注册app：


INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
# //创建的app都需要在此注册才能够被django识别
]

2、中...]]></description><category></category></item><item><title><![CDATA[分治算法(套娃)]]></title><link>https://blog.youkuaiyun.com/scorhl/article/details/120702074</link><guid>https://blog.youkuaiyun.com/scorhl/article/details/120702074</guid><author>scorhl</author><pubDate>Tue, 12 Oct 2021 11:01:42 +0800</pubDate><description><![CDATA[#include &lt;stdio.h&gt;
int get_max();
int main(){
    int arr[] = {5,6,9,8,56,24,14,87,52,41,36,57,89,45};
    int max = get_max(arr, 0, 13);
    printf("max: %d\n", max);
    return 0;
}

int n = 0;
int get_max(int* arr, int left, int right){
    if(ar.]]></description><category></category></item><item><title><![CDATA[递归算法]]></title><link>https://blog.youkuaiyun.com/scorhl/article/details/120675298</link><guid>https://blog.youkuaiyun.com/scorhl/article/details/120675298</guid><author>scorhl</author><pubDate>Sat, 09 Oct 2021 17:32:20 +0800</pubDate><description><![CDATA[1、含义：调用自身的过程称为递归，调用自身的函数称为递归函数，用递归方式解决问题的算法称为递归算法

2、递归方式：直接或间接

直接：


#include &lt;stdio.h&gt;

void recursion(int num){
    num++;
    printf("recursion: %d\n", num);
    recursion(num);
}

int main() {
    int num = 1;
    recursion(num);
    return 0;
]]></description><category></category></item><item><title><![CDATA[linux安装tomcat]]></title><link>https://blog.youkuaiyun.com/scorhl/article/details/120653125</link><guid>https://blog.youkuaiyun.com/scorhl/article/details/120653125</guid><author>scorhl</author><pubDate>Fri, 08 Oct 2021 16:16:04 +0800</pubDate><description><![CDATA[1、进入官网下载对应的压缩包文件：

    网址：Apache Tomcat® - Welcome!

    选择下载tar.gz文件

   



2、进入文件的下载地址将包剪切至安装程序的文件夹，默认为：usr/local/





3、解压安装包：tar -zxvf apache-tomcat-9.0.54.tar.gz

4、解压完成后生成tomcat的安装文件夹，进入文件夹配置环境：cdapache-tomcat-9.0.54/bin：





...]]></description><category></category></item><item><title><![CDATA[md5生成、解密token]]></title><link>https://blog.youkuaiyun.com/scorhl/article/details/120648328</link><guid>https://blog.youkuaiyun.com/scorhl/article/details/120648328</guid><author>scorhl</author><pubDate>Fri, 08 Oct 2021 11:23:46 +0800</pubDate><description><![CDATA[1、定义的携带字符串，导包：


import time
from django.core import signing
import hashlib
from django.core.cache import cache
from django.conf import settings
settings.configure(DEBUG=True)

HEADER = {'typ': 'JWP', 'alg': 'default'}
KEY = 'CHEN_FENG_YAO'
SALT = 'www.lan]]></description><category></category></item><item><title><![CDATA[django make_password 加密]]></title><link>https://blog.youkuaiyun.com/scorhl/article/details/120527562</link><guid>https://blog.youkuaiyun.com/scorhl/article/details/120527562</guid><author>scorhl</author><pubDate>Tue, 28 Sep 2021 14:58:55 +0800</pubDate><description><![CDATA[1、django 自带的加密方法：make_password() 和 check_password



PASSWORD_HASHERS = (

  'django.contrib.auth.hashers.PBKDF2PasswordHasher',
  'django.contrib.auth.hashers.PBKDF2SHA1PasswordHasher',
  'django.contrib.auth.hashers.BCryptSHA256PasswordHasher',
 ...]]></description><category></category></item><item><title><![CDATA[JWT生成token与反解析]]></title><link>https://blog.youkuaiyun.com/scorhl/article/details/120525604</link><guid>https://blog.youkuaiyun.com/scorhl/article/details/120525604</guid><author>scorhl</author><pubDate>Tue, 28 Sep 2021 13:01:27 +0800</pubDate><description><![CDATA[1、JWT方法：

    ①：生成token：jwt.encode(payload, key, algorithm)

payload：组成的参数字典，类型：dict

key：自定义的加密密钥，类型：str

algorithm：加密方法(HS256，RSA256等)，类型：str


SECRET_KEY = 'scorhl*98f*8fr*vf8v...]]></description><category></category></item></channel></rss>