mxxWechatBot主动发送消息至微信

news2024/11/22 22:19:33

大家好,我是雄雄,欢迎关注微信公众号:雄雄的小课堂。

免责声明:该工具仅供学习使用,禁止使用该工具从事违法活动,否则永久拉黑封禁账号!!!本人不对任何工具的使用负责!!!

前言

最近改造了下机器人,接口改的更加灵活,可以通过自定义接口给自己的社群或者好友中。废弃掉之前的发送接口,简直为开发者的福音;不仅支持java,其他类型的编程语言均可。

接口说明

为了避免接口被滥用,接口地址暂时隐藏,(详细接口地址请咨询博主或者进群查看):

1.获取token

接口:

/getWechatToken

代码示例:

/**
     * 获取服务端机器人的token
     */
    public String getmxxWecharBotToken(){
        String url = APIURL + "/getWechatToken";
        JSONObject o = new JSONObject();
        o.put("username",LOGIN_USER_NAME);  //自己服务端的账号
        o.put("password",LOGIN_USER_PASSWORD); //自己服务端的密码
        String params = JSON.toJSONString(o);
        String body = HttpUtil.createPost(url)
                .body(params)
               .execute()
               .body();
        log.info("请求获取服务端的token:{}",body);
        JSONObject jsonObject = JSON.parseObject(body);
        String token  = "";
        if(jsonObject.getInteger("code") == 200){
            //获取token
            token = jsonObject.getString("token");
            //将token放在缓存中
            redisService.setCacheObject("mxxWechatBotToken",token,28, TimeUnit.MINUTES);
        }
        return token;
    }

入参说明:

序号字段名类型说明
1usernamestring服务端用户名
2passwordstring服务端密码

响应参数说明:

序号字段名类型说明示例
1msgstring接口返回信息操作成功
2codeint返回code200
3expireTimelongtoken失效时间1704810495445
4tokenstringtoken的值eyJhbGciOiJIUzUxMiJ9.eyJsb2dpbl91c2VyX2tleSI6ImE2OWE1ZTRkLWUyMjUtNGE1OS05NmMyLTVkYzcwNmNiYTJjZSJ9.eyGLy_smEeGH_d3u8QknBlcAyYxuJfqTxFyud4iN8mqLFQjSSp5Avz-MPvLXHG5EXq6oIlnN7tvA3jSFIN1GnA

2. 封装主动发送消息的公共接口

接口:

system/object/customApiSendMsg
请求方式

POST

Content-Type

json

请求Body参数
{
    "wxid": "xxxx@chatroom",
    "tag": 0,
    "appkey": "xxxxx",
    "message": "你好",
    "isAt": false,
    "atList": [
        "wxid_ehfxxxxbt22"
    ]
}
参数名示例值参数类型是否必填参数描述
wxidxxxxx@chatroomString需要发送的群或者好友
tag0Integer消息类型,-1设置百度的appkey和秘钥 0表示发送文字,1表示发送图片;2发送本地文件; 3发送H5小卡片; 4发送小程序 ; 5发送音乐卡片; 6发送xml文件; 7发送聊天记录 ; 8语言消息; 9名片消息 ;10视频消息; 11动态表情 ;12地理位置 ;13分享链接或者附件; 14红包 ;15群邀请 ;16系统消息 ; 17其他类型的xml;18引用消息

原文链接:https://blog.csdn.net/qq_34137397/article/details/135351008
appkey | xxxx | String | 是 | 用户appkey
message | 你好 | String | 是 | 消息
isAt | true | Boolean | 是 | 是否需要艾特
atList | wxid_ehfdzxxx | Array | 是 | 艾特的人

认证方式
bearer
成功响应示例
{"msg":"发送成功","code":200}
java中的调用示例:
 /**
     * 给微信机器人中发送信息的公共方法
     */
    public String sendMsgToWechat(String wxid,Integer tag,String appkey,String message,boolean isAt,JSONArray atList){
      String url = WECHAT_SERVE_API + "/system/object/customApiSendMsg";
      String token = "";
      //获取token
      Object redisToken =  redisService.getCacheObject("mxxWechatRotToken");
      if (redisToken==null){
      token = getmxxWecharBotToken();
      }else{
      token = redisToken.toString();
      }
      log.info("token的值是{}",token);
      //将消息放在body中
      JSONObject paramsObject = new JSONObject();
      paramsObject.put("tag",tag);
      paramsObject.put("wxid",wxid);
      paramsObject.put("appkey",appkey);
      paramsObject.put("message",message);
      paramsObject.put("isAt",isAt);
      paramsObject.put("atList",atList);
      String body = HttpUtil.createPost(url)
      .header(Header.AUTHORIZATION,"Bearer "+token)
      .header(Header.CONTENT_TYPE,"application/json")
      .body(JSON.toJSONString(paramsObject))
      .execute()
      .body();
      log.info("给微信群中发送的结果:" + body);
      return body;
    }

3.6版本发送文本消息

效果

在这里插入图片描述

  • 换行单行使用\r
  • 换行两行使用\r\r或者\n

示例代码:

 /**
     * (微信机器人)每天早上6点将国内新闻发送至群中
     */
    @GetMapping("/sendAlapiNewsV1")
   // @Scheduled(cron = " 0 0 6 * * ?")
    public void sendAlapiNewsV1() throws UnsupportedEncodingException {
        //请求接口中的数据
        String url = ALAPI_API+"/zaobao?token="+ALAPI_KEY+"&format=json";
        String body = HttpUtil.createGet(url)
                .execute()
                .body();
        JSONObject objectResult = JSON.parseObject(body);
        Integer code = objectResult.getInteger("code");
        JSONObject object = new JSONObject();
        StringBuilder sb = new StringBuilder();
        if (code != 200) {
            log.info("获取新闻失败");
           return;
        }
        SimpleDateFormat formatChina = new SimpleDateFormat("yyyy年MM月dd日");
        // 将今天日期转换为 SimpleDateFormat 格式,并将明天的日期转换为 SimpleDateFormat 格式
        String todayDate = formatChina.format(new Date());
        //根据阳历计算农历
        Calendar today = Calendar.getInstance();
        today.setTime(new Date());
        Date tomorrowDate = today.getTime();
        String dateTomorrow = new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault()).format(tomorrowDate);
        sb.append("早上好[太阳],今天是:" + todayDate);
        String week = "";
        try {
            week = DateUtils.getDaysByWeekChina(dateTomorrow);
            DateUtils lunar = new DateUtils(today);
            String nongli = lunar.toString();
            nongli = nongli.substring(nongli.indexOf("年") + 1);
            sb.append(",星期")
                    .append(week)
                    .append(",农历")
                    .append(nongli);

        } catch (ParseException e) {
            e.printStackTrace();
        }
        sb.append("。每天三分钟,读懂全世界!祝:工作愉快,生活喜乐!");
        sb.append("\r");

        JSONObject dataObject = objectResult.getJSONObject("data");
        //获取微语
        String weiyu = dataObject.getString("weiyu");
        //获取新闻列表
        JSONArray arrayNews = dataObject.getJSONArray("news");
        int index = 1;
        for (Object o : arrayNews) {
            sb.append(o);
            if (index == 7) {
                sb.append("#公众号:雄雄的小课堂");
            }
            sb.append("\r");
            index++;
        }
        sb.append("\r");
        sb.append(weiyu);
        sb.append("\r");
        sb.append("\r");
        String result = sendMsgToWechat(xunXiWxid,XIAOTANGYUAN_REBOT_TEXT,XIAOTANGYUAN_REBOT_APPKEY,sb.toString(),false,new JSONArray());
        log.info("发送新闻信息结果:" + result);
    }

3.7版本发送文本消息

效果

  • 换行单行使用\r
  • 换行两行使用\r\r或者\n
    /**
     * 给微信机器人中发送信息的公共方法
     * wxid:群的wxid
     * tag:消息类型
     * message:消息
     * userNickList:需要艾特的用户昵称
     * userNameList:需要艾特的用户wxid
     */
    public String sendMsgToWechatV37(String wxid,Integer tag,String appkey,String message,JSONArray userNameList,JSONArray userNickList){
        //String url = WECHAT_SERVE_API + "/system/object/customApiSendMsg";
        String url = WECHAT_SERVE_API + "/system/object/customApiSendMsg";
        String token = "";
        //获取token
        Object redisToken =  redisService.getCacheObject("mxxWechatRotToken");
        if (redisToken==null){
            token = getmxxWecharBotToken();
        }else{
            token = redisToken.toString();
        }
        //将消息放在body中
        JSONObject paramsObject = new JSONObject();
        paramsObject.put("tag",tag);
        paramsObject.put("chatRoomName",wxid);
        paramsObject.put("appkey",appkey);
        paramsObject.put("message",message);
        paramsObject.put("version","3730");
        paramsObject.put("userNickList",userNickList);
        paramsObject.put("userNameList",userNameList);
        String body = HttpUtil.createPost(url)
                .header(Header.AUTHORIZATION,"Bearer "+token)
                .header(Header.CONTENT_TYPE,"application/json")
                .body(JSON.toJSONString(paramsObject))
                .execute()
                .body();
        log.info(paramsObject.toString());
        log.info("给微信群中发送的结果:" + body);
        return body;
    }


需要注意的是:

  • chatRoomName:群的wxid
  • version:版本号,如果是3.7,则传入:3730
  • userNickList:需要艾特的好友昵称
  • userNameList:需要艾特的好友wxid

3.7版本在自定义接口中,客户端传给用户业务端时,会多传入两个字段,分别为:

  • finalFromNick:发消息人的昵称
  • fromNick:群的昵称
    这两个字段传给用户业务端后,用户可以更便捷的实现艾特发消息的人进行进一步操作。

发送图片消息

效果

在这里插入图片描述

注意,message的值为图片的地址,或者本地图片路径或者网络直链。

代码示例:

/**
     * (微信机器人)定时发送每日天气图片到微信群中
     */
    @GetMapping("/sendWetherInfoByDaysImg")
    @Scheduled(cron = " 0 1 9 * * ?")
    public void sendWetherInfoByDaysImg() {
        //获取中央气象台每日天气信息
        JSONObject objectZhongYang = collectWebDataUtils.getZYWetherDay();
        //图片信息
        JSONArray imgList = objectZhongYang.getJSONArray("imgArray");
        for (int i = 0; i < imgList.size() - 1; i++) {
            // 生成一个 1-5 秒之间的随机延迟
            Random random = new Random();
            int delay = random.nextInt(5) + 1; // 生成一个 1-10 的随机整数
            try {
                // 等待随机延迟时间,如果需要换成分钟,则乘以60
                Thread.sleep(delay * 1000);
                String imgPath = imgList.get(i).toString();
                String result = sendMsgToWechat(xunXiWxid,XIAOTANGYUAN_REBOT_IMG,XIAOTANGYUAN_REBOT_APPKEY,imgPath,false,new JSONArray());
                log.info("发送天气图片信息结果:" + result);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

发送本地文件

效果

在这里插入图片描述

代码示例

 /**
     * (微信机器人)定时发送每日天气图片到微信群中
     */
    @GetMapping("/sendWetherInfoByDaysImg")
    @Scheduled(cron = " 0 1 9 * * ?")
    public void sendWetherInfoByDaysImg() {
       sendMsgToWechat(xunXiWxid, XIAOTANGYUAN_REBOT_File, XIAOTANGYUAN_REBOT_APPKEY, "D://muxiongxiong.txt",false,new JSONArray());
    }

对,就这么简单。message为本地文件的路径。

发送xml消息

效果

在这里插入图片描述

在这里插入图片描述

代码示例:

@GetMapping("/sendH5")
    public void sendH5(){
        JSONObject object = new JSONObject();
        //标题
        object.put("title","雄雄的小课堂");
        //描述
        object.put("content","这是内容描述");
        //跳转连接
        object.put("jumpUrl","https://www.88688.team");
        //预览图,需要小于200k
        object.put("path","https://blogobs.88688.team/blog/zaobao_logo.png");
        String result = sendMsgToWechat(xunXiWxid,XIAOTANGYUAN_REBOT_H5,XIAOTANGYUAN_REBOT_APPKEY,object.toString(),false,new JSONArray());
        System.out.println("发送情况:"+result);
    }

其中,message的格式为如下json

{
	  "title":"标题",
	  "content":"这是内容描述",
	  "jumpUrl":"https://www.88688.team",
	  "path":"https://blogobs.88688.team/blog/zaobao_logo.png"
}

设置百度的appkey

主要用于百度文心大模型,在群内可以直接使用;

效果

在这里插入图片描述
在这里插入图片描述

代码

 /**
     * 设置百度的key之类的
     */
    @GetMapping("/sendSetBaiDuKey")
    public void sendSetBaiDuKey(){
        JSONObject object = new JSONObject();
        //标题
        object.put("baiduApiKey","你的");
        //描述
        object.put("baiduSecretKey","你的");
        //处理url中的特殊字符
        try{
          String result = sendMsgToWechat(xunXiWxid,-1,XIAOTANGYUAN_REBOT_APPKEY,object.toString(),false,new JSONArray());
            log.info("发送信息结果:" + result);
        }catch (Exception e){
            e.printStackTrace();
        }
    }

发送小程序卡片

效果

在这里插入图片描述

代码示例

自己根据我的代码,看下封装的json哈,我都有注释,困了,写完赶紧睡觉,我就不写那么详细了。

/**
     * 发送小程序卡片
     */
    @GetMapping("/sendApplet")
    public void sendApplet(){
        JSONObject object = new JSONObject();
        //标题
        object.put("title","雄雄的工具箱");
        //描述
        object.put("content","一款万能免费的工具箱");
        //点击跳转地址:pages/index/index
        object.put("jumpUrl","pages/index/index");
        //预览图,需要小于200k
        object.put("path","https://blogobs.88688.team/blog/zaobao_logo.png");
        //原始id gh_4a2xxxxx
        object.put("gh","gh_4axxxxxxx");
        //处理url中的特殊字符
        try{
          String result = sendMsgToWechat(xunXiWxid,XIAOTANGYUAN_REBOT_Applet,XIAOTANGYUAN_REBOT_APPKEY,object.toString(),false,new JSONArray());
            log.info("发送信息结果:" + result);
        }catch (Exception e){
            e.printStackTrace();
        }
    }

发送音乐卡片

效果

在这里插入图片描述

代码

/**
     * 发送音乐卡片
     */
    @GetMapping("/sendMusic")
    public void sendMusic(){
        JSONObject object = new JSONObject();
        //歌曲名称
        object.put("name","好汉歌");
        //作者
        object.put("author","刘欢");
        //appid   例如:酷狗/wx79f2c4418704b4f8,网易云/wx8dd6ecd81906fd84,QQ音乐/wx5aa333606550dfd5
        object.put("app","wx5aa333606550dfd5");
        //点击跳转地址
        object.put("jumpUrl","http://y.qq.com/n/yqq/song/003flDfR0oxrPX.html");
        //音乐地址
        object.put("musicUrl","http://y.qq.com/n/yqq/song/003flDfR0oxrPX.html");
        //图片地址,图片必须小于200k
        object.put("imageUrl","https://y.qq.com/music/photo_new/T002R300x300M000001nYpd82yFZOK_1.jpg");
        //处理url中的特殊字符
        try{
          String result = sendMsgToWechat(xunXiWxid,XIAOTANGYUAN_REBOT_Music,XIAOTANGYUAN_REBOT_APPKEY,object.toString(),false,new JSONArray());
            log.info("发送信息结果:" + result);
        }catch (Exception e){
            e.printStackTrace();
        }
    }

发送xml文件

效果

在这里插入图片描述

代码

/**
     * 发送xml文件
     */
    @GetMapping("/sendXml")
    public void sendXml(){
        JSONObject object = new JSONObject();
        //歌曲名称
        object.put("title","穆雄雄的博客");
        //描述
        object.put("des","公众号:雄雄的小课堂");
        //链接
        object.put("url","https://www.88688.team");
        //封面
        object.put("thumburl","https://blogobs.88688.team/blog/zaobao_logo.png");
        //来源id,如果是公众号,则是gh_eexxxxxx
        object.put("sourceusername","gh_ee62xxxxc6");
        //来源名字
        object.put("sourcedisplayname","雄雄的小课堂");
        //处理url中的特殊字符
        try{
          String result = sendMsgToWechat(xunXiWxid,XIAOTANGYUAN_REBOT_XML,XIAOTANGYUAN_REBOT_APPKEY,object.toString(),false,new JSONArray());
            log.info("发送信息结果:" + result);
        }catch (Exception e){
            e.printStackTrace();
        }
    }

发送聊天记录

效果图

在这里插入图片描述

代码示例

/**
     * 发送聊天记录
     */
    @GetMapping("/sendRecord")
    public void sendRecord(){
        JSONObject object = new JSONObject();
        //歌曲名称
        object.put("title","公众号:雄雄的小课堂");
        JSONArray array = new JSONArray();
        JSONObject arrayObject = new JSONObject();
        arrayObject.put("wxid","wxid_ehfdzccct22");
        arrayObject.put("nickName","雄雄");
        arrayObject.put("timestamp",System.currentTimeMillis());
        arrayObject.put("msg","你说的是啥小程序来着?雄雄的工具箱");
        array.add(arrayObject);
        object.put("data",array);
        //处理url中的特殊字符
        try{
          String result = sendMsgToWechat(xunXiWxid,XIAOTANGYUAN_REBOT_Record,XIAOTANGYUAN_REBOT_APPKEY,object.toString(),false,new JSONArray());
            log.info("发送信息结果:" + result);
        }catch (Exception e){
            e.printStackTrace();
        }
    }

发送引用消息

效果图

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

请求参数如下

{
  "tag": 18,            //消息类型
  "appkey":"你的appkey",
  "version":"3730",     //版本号,3618版本不支持引用消息,只有这个版本支持
  "chatRoomName":"filehelper",
  "userNickList":[],	//需要艾特用户的昵称
  "userNameList":[],//需要艾特用户的wxid
  "message": {
    "content": "这是引用一条消息",
    "subType": 1701,      //引用消息的类型,1701:文字  1703图片的mxl  1747动态表情的xml  1749 文件 链接 小程序的xml
    "param": "我是原文信息" //引用消息的参数,例如:文字内容,图片的mxl,动态表情的xml,文件的url,小程序的xml
  }
}

代码示例

/**
 * 发送引用消息
 */
@GetMapping("/sendYinYong")
public void sendYinYong(){
    JSONObject object = new JSONObject();
    //描述
    object.put("content","这是一条引用消息");
    //跳转连接
    object.put("param","公众号:雄雄的小课堂");
    //引用消息的类型,1701:文字  1703图片的mxl  1747动态表情的xml  1749 文件 链接 小程序的xml
    object.put("subType",1701);
    //处理url中的特殊字符
    try{
      String result = sendMsgToWechatV37(testWxid,18,XIAOTANGYUAN_REBOT_APPKEY,object.toString(),new JSONArray(),new JSONArray());
      log.info("发送信息结果:" + result);
    }catch (Exception e){
        e.printStackTrace();
    }
}

移除群成员

效果图

请求参数如下

{
  "tag": 19,            //消息类型
  "appkey":"你的appkey",
  "version":"3730",     //版本号,3618版本不支持引用消息,只有这个版本支持
  "chatRoomName":"xxxxxx@chatroom",   //群聊wxid
  "userNameList":[]  //需要移除的群成员的wxid
}

代码示例

/**
 * 移除群成员
 * @param fromWxid   群聊的wxid
 * @param userNameList  要踢掉的人的wxid
 *  @param finalFromWxid  发送指令的人的wxid
 */
public void delUser(String fromWxid, JSONArray userNameList,String finalFromWxid){
  if (userNameList.isEmpty()) {
    return;
  }
  //发指令者必须是群管理
  if(!finalFromWxid.equals(WECHAT_WXID)){
    return;
  }
  //踢人
  sendMsgToWechatV37(fromWxid, 19, "xxx","",  userNameList, new JSONArray());
  //发送消息
  String text = "踢掉了 \uFE0F ";
  sendMsgToWechatV37(fromWxid, XIAOTANGYUAN_REBOT_TEXT, "xxxx", text,  new JSONArray(), new JSONArray());

}

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

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

相关文章

【Git版本控制 05】多人协作

目录 一、邀请开发用户 二、新建远程分支 三、拉取远程分支 四、推送远程分支 五、合并远程分支 六、多分支协作 一、邀请开发用户 在windows环境下&#xff0c;再clone同⼀个项⽬仓库&#xff0c;来模拟⼀起协作开发的另⼀名⼩伙伴。 际开发中&#xff0c;每个⽤⼾都有…

【Web】超级详细的Linux权限提升一站式笔记

目录 一、Linux内核提权 提权原理 提权环境 提权复现 二、SUID提权 SUID介绍 设置SUID SUID提权原理 查找SUID文件 提权介绍 find提权 bash提权 vim提权 python提权 三、计划任务提权 提权原理 提权环境 提权步骤 四、环境变量劫持提权 提权原理 提权环境…

【机器学习】卷积和反向传播

一、说明 自从 AlexNet 在 2012 年赢得 ImageNet 竞赛以来&#xff0c;卷积神经网络 (CNN) 就变得无处不在。从不起眼的 LeNet 到 ResNets 再到 DenseNets&#xff0c;CNN 无处不在。 您是否想知道 CNN 的反向传播中会发生什么&#xff0c;特别是反向传播在 CNN 中的工作原理。…

【知识整理】技术新人的培养计划

一、培养计划落地实操 1. 概要 新人入职&#xff0c;要给予适当的指导&#xff0c;目标&#xff1a; 1、熟悉当前环境&#xff1a; 生活环境&#xff1a;吃饭、交通、住宿、娱乐 工作环境&#xff1a;使用的工具&#xff0c;Mac、maven、git、idea 等 2、熟悉并掌握工作技…

Android---Jetpack Compose学习003

Compose 状态。本文将探索如何在使用 Jetpack Compose 时使用和考虑状态&#xff0c;为此&#xff0c;我们需要构建一个 TODO 应用&#xff0c;我们将构建一个有状态界面&#xff0c;其中会显示可修改的互动式 TODO 列表。 状态的定义。在科学技术中&#xff0c;指物质系统所处…

【C深度解剖】前置++与后置++

简介&#xff1a;本系列博客为C深度解剖系列内容&#xff0c;以某个点为中心进行相关详细拓展 适宜人群&#xff1a;已大体了解C语法同学 作者留言&#xff1a;本博客相关内容如需转载请注明出处&#xff0c;本人学疏才浅&#xff0c;难免存在些许错误&#xff0c;望留言指正 作…

相机图像质量研究(12)常见问题总结:光学结构对成像的影响--炫光

系列文章目录 相机图像质量研究(1)Camera成像流程介绍 相机图像质量研究(2)ISP专用平台调优介绍 相机图像质量研究(3)图像质量测试介绍 相机图像质量研究(4)常见问题总结&#xff1a;光学结构对成像的影响--焦距 相机图像质量研究(5)常见问题总结&#xff1a;光学结构对成…

关于Navicat导入sql文件后er图乱序问题

关于Navicat导入sql文件后er图乱序问题 具体操作如下&#xff1a; 点击左下角刷新旁边的小三角

涤生大数据实战:基于Flink+ODPS历史累计计算项目分析与优化(上)

涤生大数据实战&#xff1a;基于FlinkODPS历史累计计算项目分析与优化&#xff08;一&#xff09; 1.前置知识 ODPS&#xff08;Open Data Platform and Service&#xff09;是阿里云自研的一体化大数据计算平台和数据仓库产品&#xff0c;在集团内部离线作为离线数据处理和存…

数据结构(3) 顺序表存储结构

顺序表存储结构 存储结构顺序结构定义基本操作的实现静态分配问题 动态分配代码功能 顺序表的特点: 顺序表小结顺序表的插入删除插入删除小结 顺序表的查找按位查找按值查找小结 各位小伙伴想要博客相关资料的话关注公众号&#xff1a;chuanyeTry即可领取相关资料&#xff01; …

Codeforces Round 924 E. Modular Sequence

E. Modular Sequence 题意 对于一个长度为 n n n 的数组 a a a&#xff0c;定义它是 g o o d good good 的当且仅当&#xff1a; a 1 x a_1 x a1​x a i a i − 1 y a_{i} a_{i - 1} y ai​ai−1​y 或 a i a i − 1 m o d y i ≥ 2 a_{i} a_{i - 1} mod \hspace{…

【Linux】内核中的链表

&#x1f525;博客主页&#xff1a;PannLZ &#x1f38b;系列专栏&#xff1a;《Linux系统之路》 &#x1f94a;不要让自己再留有遗憾&#xff0c;加油吧&#xff01; 文章目录 链表1.创建和初始化2.创建节点3.添加节点4.删除节点5.遍历 链表 内核开发者只实现了循环双链表&am…

nodejs学习计划--(十)会话控制及https补充

一、会话控制 1.介绍 所谓会话控制就是 对会话进行控制 HTTP 是一种无状态的协议&#xff0c;它没有办法区分多次的请求是否来自于同一个客户端&#xff0c; 无法区分用户 而产品中又大量存在的这样的需求&#xff0c;所以我们需要通过 会话控制 来解决该问题 常见的会话控制…

中科大计网学习记录笔记(十):P2P 应用

前言&#xff1a; 学习视频&#xff1a;中科大郑烇、杨坚全套《计算机网络&#xff08;自顶向下方法 第7版&#xff0c;James F.Kurose&#xff0c;Keith W.Ross&#xff09;》课程 该视频是B站非常著名的计网学习视频&#xff0c;但相信很多朋友和我一样在听完前面的部分发现信…

CSP-动态规划-最长公共子序列(LCS)

一、动态规划 动态规划&#xff08;Dynamic Programming&#xff0c;简称DP&#xff09;主要用于求解可以被分解为相似子问题的复杂问题&#xff0c;特别是在优化问题上表现出色&#xff0c;如最短路径、最大子数组和、编辑距离等。动态规划的核心思想是将原问题分解为较小的子…

【MySQL】MySQL函数学习和总结

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-Ny0xnYjfHqF7s3aS {font-family:"trebuchet ms",verdana,arial,sans-serif;font-siz…

C++ //练习 6.3 编写你自己的fact函数,上机检查是否正确。

C Primer&#xff08;第5版&#xff09; 练习 6.3 练习 6.3 编写你自己的fact函数&#xff0c;上机检查是否正确。 环境&#xff1a;Linux Ubuntu&#xff08;云服务器&#xff09; 工具&#xff1a;vim 代码块 /********************************************************…

Linux系统中HTTP代理的常见问题及解决方案

亲爱的Linux用户们&#xff0c;是不是有时候觉得HTTP代理就像是一个魔法盒子&#xff0c;让你在数字世界中自由穿梭&#xff1f;但是&#xff0c;就像所有的魔法物品一样&#xff0c;它也会偶尔出点小状况。今天&#xff0c;我们就来一起探讨一下Linux系统中HTTP代理的常见问题…

购物|电商购物小程序|基于微信小程序的购物系统设计与实现(源码+数据库+文档)

电商购物小程序目录 目录 基于微信小程序的购物系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、用户前台功能实现 2、管理员后台功能实现 四、数据库设计 1、实体ER图 2、具体的表设计如下所示&#xff1a; 五、核心代码 六、论文参考 七、最新计算机毕设…

【原创 附源码】Flutter安卓及iOS海外登录--Tiktok登录最详细流程

最近接触了几个海外登录的平台&#xff0c;踩了很多坑&#xff0c;也总结了很多东西&#xff0c;决定记录下来给路过的兄弟坐个参考&#xff0c;也留着以后留着回顾。更新时间为2024年2月7日&#xff0c;后续集成方式可能会有变动&#xff0c;所以目前的集成流程仅供参考&#…