APEX内置验证与授权管理

news2024/12/23 9:51:28

参考博客:(真的很好的教程,感谢!)

09技术太卷我学APEX-定制页面及导航菜单权限_白龙马5217的博客-CSDN博客icon-default.png?t=N6B9https://blog.csdn.net/html5builder/article/details/128816236?spm=1001.2014.3001.5501

1 应用程序安全性设计

1.1 应用程序的验证/授权/会话管理

1.2 Apex 用户管理

需要在工作区管理项下创建用户,

1.3 用户访问控制

在【访问控制】-【用户】功能页设置领队的权限

定制页面与导航栏菜单权限

创建角色值列表

 select name, name as rname from role_test_wxx2

创建页面值列表

select t.PAGE_ID,t.PAGE_PARENT_ID
from TEST_USER_WXX_V t 
where APP_ID = :APP_ID;

创建用户值列表

用户和角色值列表配置到用户和角色。

 

 select name, name as uname from user_test_wxx2

创建导航卡“系统管理_导航卡_Demo”

创建成功

 点开还可以继续修改,设置图标

2 创建导航页面

Step 1创建空白页面
应用程序-创建页

 

 Setp 2放置列表区域
拖放一个列表区域到页面上,开始只能放到面包屑区域,放置后,在左边的结构树可以拖放到body区下面。

Setp 3设置列表区域属性

 导航卡之前

导航卡之后

3 创建授权方案

3.1 创建一个授权控制函数F_CONTROL

create or replace function "F_CONTROL"
(p_username in VARCHAR2,
 p_pageid in number)
return boolean
is
    b_ret boolean :=false;
    c_1 number;
begin
    select count(1) into c_1 from test_user_wxx_v
        where user_name = p_username and page_id = p_pageid;
    if (c_1 >= 1) then 
        b_ret := true;
    else
        b_ret := false;
    end if;   
    return b_ret;
   
    exception when others then
        return false; 
end;

3.2 创建授权方案

名称:随便自己输入
方案类型:返回布尔值的PL/SQL函数
PL/SQL函数体:传入当前登录用户和当前页面

return f_control(
  p_username => :USER_ID,
  p_pageid => :PAGE_ID
);
求值点:每次页访问一次

 有问题

4 页面授权控制

设置需求授权的页面设置安全性如下图:

 这样设置后,就是直接在IP地址栏输入页面也需求授权许可。

需要授权的都设置上授权方案:

5 导航授权控制

设计是这样没有,根据登录帐户,没有授权的页面链接就不在导航菜单上显示了。目前为静态导航菜单,需要引用静态导航菜单的数据创建一个动态的导航菜单。

5.1 创建静态导航菜单的视图test_menu_wxx_v

CREATE OR REPLACE FORCE EDITIONABLE VIEW "test_menu_wxx_v" ("PARENT_ENTRY_TEXT", "DISPLAY_SEQUENCE", "ENTRY_TEXT", "PAGE_ID", "ENTRY_TARGET") AS 
  select parent_entry_text,display_sequence,entry_text,
	regexp_replace(entry_target,'[^0-9]') as page_id,entry_target	 
from apex_application_list_entries t
where application_id = 273 and list_id = 128816236
order by t.display_sequence

这里用到Oracle的正则表达式替换函数提取出目标的页面id:regexp_replace(entry_target,‘[^0-9]’) as page_id
视图的数据如下:

CREATE OR REPLACE FORCE EDITIONABLE VIEW "test_menu_wxx_v" ( "ROLE_NAME","PERM_NAME", "PAGE_ID") AS 
  select ROLE_NAME,PERM_NAME,PAGE_ID
	regexp_replace(entry_target,'[^0-9]') as page_id,entry_target	 
from test_user_wxx_v t
where application_id = 273 and list_id = 128816236/17346944776181


5.2 创建动态导航菜单视图

自己的:

创建角色权限视图TEST_ROLE_PERM_WXX_V

-- 创建视图 角色权限
create view TEST_ROLE_PERM_WXX_V as
select distinct rp.ROLE_PERM_ID,
                rp.ROLE_ID as ROLE_ID,
                rp.PERM_ID as PERM_ID,
                rp.IS_ENABLE,
                rp.REMARK,
                r.NAME as ROLE_NAME,
                p.NAME as PERM_NAME,
                p.PAGE_ID as PAGE_ID
from ROLE_PERM_TEST_WXX rp
LEFT JOIN ROLE_TEST_WXX2 r on r.ROLE_ID = rp.ROLE_ID
LEFT JOIN PERM_TEST_WXX2 p on p.PERM_ID = rp.PERM_ID;

查询效果

创建角色用户视图 TEST_ROLE_USER_WXX_V

-- 创建角色用户视图 TEST_ROLE_USER_WXX_V
create view TEST_ROLE_USER_WXX_V as
select distinct ROLE_USER_ID,
                ru.ROLE_ID as ROLE_ID,
                ru.USER_ID as USER_ID,
                r.NAME as ROLE_NAME,
                u.NAME as USER_NAME,
                u.MOBILE,
                u.JOB_NUMBER,
                u.PASSWORD,
                u.EMAIL,
                u.DEVELOPER_ID
from ROLE_USER_TEST_WXX ru
LEFT JOIN ROLE_TEST_WXX2 r on r.ROLE_ID = ru.ROLE_ID
LEFT JOIN USER_TEST_WXX2 u on u.USER_ID = ru.USER_ID;

效果:

5.3 创建一个动态列表并设置为导航菜单test_menu_wxx_v

创建动态列表:

范例:

select * from ck_menu_v 
where page_id in (
    select distinct page_id from V_SYS_USER_ROLE_PAGE where user_name = :APP_USER
)
我的:

select * from TEST_USER_WXX_V where USER_NAME = :USER_NAME;

???为什么呀?百思不得其解

 不加条件查询到的数据

 代码:

select USER_ID,
       USER_NAME,
       DEPT_ID,
       DEPT_NAME,
       ROLE_ID,
       ROLE_NAME,
       PERM_ID,
       PERM_NAME,
       PAGE_ID from TEST_USER_WXX_V;

为什么传入一个user_name反而不行了?看来问题出在传入的user_name上

发现直接将值传入没问题

 代码

-- 动态列表 传入user_name
select USER_ID,
       DEPT_ID,
       DEPT_NAME,
       ROLE_ID,
       ROLE_NAME,
       PERM_ID,
       PERM_NAME,
       PAGE_ID
from TEST_USER_WXX_V where USER_NAME = 'user';

最终:test_menu_wxx_v

select USER_ID,
       DEPT_ID,
       DEPT_NAME,
       ROLE_ID,
       ROLE_NAME,
       PERM_ID,
       PERM_NAME,
       PAGE_ID
    from TEST_USER_WXX_V where USER_NAME = :USER_NAME;

设置以上动态列表为导航菜单:

 应用以后user普通用户果然只能打开首页,但是demo管理员用户也无法打开其他界面,坏了,紧急还原

看来还得好好学学登录后验证过程

验证过程3

--     登录后验证过程3
CREATE PROCEDURE TEST_USER_WXX3_PRO AS
    V_USER_ID    NUMBER(20);
    V_ROLE_ID    NUMBER(20);
    V_PERM_ID    NUMBER(20);
    V_DEPT_ID    NUMBER(20);
    V_USER_NAME     	NVARCHAR2(64);
    V_JOB_NUMBER 	NVARCHAR2(32);
    V_MOBILE    NVARCHAR2(32);
    V_EMAIL     NVARCHAR2(32);
    V_COUNT     NUMBER(10);
    V_ID        NUMBER(10);
    V_DEPT_NAME NVARCHAR2(64);
    V_PAGE_ID NUMBER(20);

begin
    -- 获取用户基础信息
      SELECT DEPT_ID,
             ROLE_ID,
             PERM_ID,
             USER_ID,
             USER_NAME,
             JOB_NUMBER,
             MOBILE,
             EMAIL
    INTO V_ROLE_ID,V_PERM_ID,V_USER_ID, V_USER_NAME, V_JOB_NUMBER, V_MOBILE, V_EMAIL
    FROM  TEST_USER_WXX_V
  where USER_NAME = upper(V('P9999_USERNAME'));

     -- 获取用户角色权限
SELECT COUNT(1)
    INTO V_COUNT
    FROM ROLE_USER_TEST_WXX A
             LEFT JOIN TEST_ROLE_PERM_WXX_V B
                       ON A.ROLE_ID = B.ROLE_ID
    WHERE A.USER_ID = V_USER_ID;


    SELECT nvl(max(ROLE_ID), 0), nvl(max(PERM_ID), 0)
    INTO V_ID, V_PAGE_ID
    FROM TEST_ROLE_PERM_WXX_V
    WHERE IS_ENABLE = 1;

    IF V_COUNT > 0 THEN
        SELECT A.ROLE_ID, B.PERM_ID
        INTO V_ID, V_PAGE_ID
        FROM ROLE_USER_TEST_WXX A
                 LEFT JOIN TEST_ROLE_PERM_WXX_V B
                           ON A.ROLE_ID = B.ROLE_ID
        WHERE A.USER_ID = V_USER_ID
          AND ROWNUM = 1;
    ELSE
        INSERT INTO ROLE_USER_TEST_WXX (USER_ID, ROLE_ID) VALUES (V_USER_ID, V_ID);
        COMMIT;
    END IF;
 -- 设置USER
    APEX_CUSTOM_AUTH.SET_USER(V_USER_NAME);
    
 -- 将用户登入录信息注入session state
    APEX_UTIL.SET_SESSION_STATE('ROLE_ID', V_ID);
    APEX_UTIL.SET_SESSION_STATE('DEPT_ID', V_DEPT_ID);
    APEX_UTIL.SET_SESSION_STATE('USER_NAME', V_USER_NAME);
    APEX_UTIL.SET_SESSION_STATE('JOB_NUMBER', V_JOB_NUMBER);
    APEX_UTIL.SET_SESSION_STATE('MOBILE', V_MOBILE);
    APEX_UTIL.SET_SESSION_STATE('MAIL', V_EMAIL);
    APEX_UTIL.SET_SESSION_STATE('USER_ID', V_USER_ID);
    APEX_UTIL.SET_SESSION_STATE('DEPT_NAME', V_DEPT_NAME);
--     APEX_UTIL.SET_SESSION_STATE('USERID', V_USERID);
END;
/

遇到的问题

编译失败, 行 26 (15:42:45)
PL/SQL: ORA-00947: 没有足够的值编译失败, 行 17 (15:42:45)
PL/SQL: SQL Statement ignored

ORA-00947: 没有足够的值_ora00947没有足够的值_cbgYjch的博客-CSDN博客icon-default.png?t=N6B9https://blog.csdn.net/cbgYjch/article/details/116670031破案了,少数据项了

 最终校验过程3 TEST_USER_WXX3_PRO

create or replace PROCEDURE TEST_USER_WXX3_PRO AS
    V_USER_ID    NUMBER(20);
    V_ROLE_ID    NUMBER(20);
    V_PERM_ID    NUMBER(20);
    V_DEPT_ID    NUMBER(20);
    V_USER_NAME     	NVARCHAR2(64);
    V_JOB_NUMBER 	NVARCHAR2(32);
    V_MOBILE    NVARCHAR2(32);
    V_EMAIL     NVARCHAR2(32);
    V_COUNT     NUMBER(10);
    V_ID        NUMBER(10);
    V_DEPT_NAME NVARCHAR2(64);
    V_PAGE_ID NUMBER(20);

begin
    -- 获取用户基础信息
      SELECT DEPT_ID,
             ROLE_ID,
             PERM_ID,
             USER_ID,
             USER_NAME,
             JOB_NUMBER,
             MOBILE,
             EMAIL
    INTO V_DEPT_ID,V_ROLE_ID,V_PERM_ID,V_USER_ID, V_USER_NAME, V_JOB_NUMBER, V_MOBILE, V_EMAIL
    FROM  TEST_USER_WXX_V
  where USER_NAME = upper(V('P9999_USERNAME'));

     -- 获取用户角色权限
SELECT COUNT(1)
    INTO V_COUNT
    FROM TEST_USER_WXX_V A
             LEFT JOIN TEST_ROLE_PERM_WXX_V B
                       ON A.ROLE_ID = B.ROLE_ID
    WHERE A.USER_ID = V_USER_ID;


    SELECT nvl(max(ROLE_ID), 0), nvl(max(PERM_ID), 0)
    INTO V_ID, V_PAGE_ID
    FROM TEST_ROLE_PERM_WXX_V
    WHERE IS_ENABLE = 1;

    IF V_COUNT > 0 THEN
        SELECT A.ROLE_ID, B.PERM_ID
        INTO V_ID, V_PAGE_ID
        FROM ROLE_USER_TEST_WXX A
                 LEFT JOIN TEST_ROLE_PERM_WXX_V B
                           ON A.ROLE_ID = B.ROLE_ID
        WHERE A.USER_ID = V_USER_ID
          AND ROWNUM = 1;
    ELSE
        INSERT INTO ROLE_USER_TEST_WXX (USER_ID, ROLE_ID) VALUES (V_USER_ID, V_ID);
        COMMIT;
    END IF;
 -- 设置USER
    APEX_CUSTOM_AUTH.SET_USER(V_USER_NAME);

 -- 将用户登入录信息注入session state
    APEX_UTIL.SET_SESSION_STATE('ROLE_ID', V_ID);
    APEX_UTIL.SET_SESSION_STATE('DEPT_ID', V_DEPT_ID);
    APEX_UTIL.SET_SESSION_STATE('USER_NAME', V_USER_NAME);
    APEX_UTIL.SET_SESSION_STATE('JOB_NUMBER', V_JOB_NUMBER);
    APEX_UTIL.SET_SESSION_STATE('MOBILE', V_MOBILE);
    APEX_UTIL.SET_SESSION_STATE('MAIL', V_EMAIL);
    APEX_UTIL.SET_SESSION_STATE('USER_ID', V_USER_ID);
    APEX_UTIL.SET_SESSION_STATE('DEPT_NAME', V_DEPT_NAME);
--     APEX_UTIL.SET_SESSION_STATE('USERID', V_USERID);
END;

成功编译

 到应用程序中验证

 坏了,还是一样的情况,无论是user普通用户还是demo管理员账号都能看到QAQ

 登录验证 TEST_LOGIN_WXX_FUN

-- 登录验证
create function TEST_LOGIN_WXX_FUN(
    p_username in varchar2,
    p_password in varchar2)
    return boolean
as
    t_jobnumber varchar2(20);
    t_password  varchar2(20);
    t_count     number(10);
    T_TENANT    NUMBER;
begin
    T_TENANT := apex_util.get_session_state('P9999_USER_TENANT');
    select count(1)
    into t_count
    from TEST_USER_WXX_V
    where upper(MOBILE) = upper(p_username)
      and IS_LEAVE = 0;

    if t_count > 0 then
        select count(1) into t_count from TEST_USER_WXX_V
        where MOBILE = upper(p_username);

        else
            insert into USER_TEST_WXX2(USER_ID,NAME,GENDER,MOBILE,JOB_NUMBER,PASSWORD,EMAIL,DEVELOPER_ID,IS_LEAVE,REMARK,UPDATE_DATE)
            select USER_ID,
                   NAME,
                   GENDER,
                   MOBILE,
                   JOB_NUMBER,
                   PASSWORD,
                   EMAIL,
                   DEVELOPER_ID,
                   IS_LEAVE,
                   REMARK,
                   0,
                   SYSDATE
            FROM TEST_USER_WXX_V
            WHERE MOBILE = upper(p_username);
            COMMIT;

            update APEX_TENANT_USERS
            set PASSWORD = ENCRYPT_ENC('123456')
            where MOBILE = upper(p_username)
              AND TENANT_ID = T_TENANT;
            commit;

            select MOBILE, PASSWORD
            into t_jobnumber,t_password
            from APEX_TENANT_USERS
            where MOBILE = upper(p_username)
              AND TENANT_ID = T_TENANT;
        
    
--         apex_util.set_custom_auth_status(p_status => '手机号不存在');
--         return false;
    end if;

    if (t_jobnumber is null or t_password is null) then
        apex_util.set_custom_auth_status(p_status => '手机号和密码不能为空');
        return false;
    else
        if ENCRYPT_ENC(p_password) <> t_password then
            apex_util.set_custom_auth_status(p_status => '手机号或密码错误');
            return false;
        else
            return true;
        end if;
        
    end if;

end;
/

【错误记录】ORA-00904: "USER_PASSWORD": 标识符无效编译失败

编译失败, 行 29 (16:33:51)
PL/SQL: ORA-00904: "USER_PASSWORD": 标识符无效编译失败, 行 23 (16:33:51)
PL/SQL: SQL Statement ignored

 

内置验证与授权

插个眼

之前 

之后​​​​​​​

 范例

 

 css

#APP_IMAGES#app-icon.css?version=#APP_VERSION#

REST URL

 oracle.dbtools.role.autorest.YWJA.TEST_USER_WXX3_PRO

 【错误记录】ora_sqlerrm: ORA-01403: 未找到任何数据

为什么产生ORA-01403

ORA-01403: 未找到任何数据 异常主要是由于SQL中使用了SELECT INTO 但是根据条件没有查询到结果引起.

 

TEST_USER_WXX3_PRO代码

create or replace PROCEDURE TEST_USER_WXX3_PRO AS
    V_USER_ID    NUMBER(20);
    V_ROLE_ID    NUMBER(20);
    V_PERM_ID    NUMBER(20);
    V_DEPT_ID    NUMBER(20);
    V_USER_NAME     	NVARCHAR2(64);
    V_JOB_NUMBER 	NVARCHAR2(32);
    V_MOBILE    NVARCHAR2(32);
    V_EMAIL     NVARCHAR2(32);
    V_COUNT     NUMBER(10);
    V_ID        NUMBER(10);
    V_DEPT_NAME NVARCHAR2(64);
    V_PAGE_ID NUMBER(20);

begin
    -- 获取用户基础信息
      SELECT DEPT_ID,
             ROLE_ID,
             PERM_ID,
             USER_ID,
             USER_NAME,
             JOB_NUMBER,
             MOBILE,
             EMAIL
    INTO V_DEPT_ID,V_ROLE_ID,V_PERM_ID,V_USER_ID, V_USER_NAME, V_JOB_NUMBER, V_MOBILE, V_EMAIL
    FROM  TEST_USER_WXX_V
  where USER_NAME = upper(V('P9999_USERNAME'));

     -- 获取用户角色权限
SELECT COUNT(1)
    INTO V_COUNT
    FROM TEST_USER_WXX_V A
             LEFT JOIN TEST_ROLE_PERM_WXX_V B
                       ON A.ROLE_ID = B.ROLE_ID
    WHERE A.USER_ID = V_USER_ID;


    SELECT nvl(max(ROLE_ID), 0), nvl(max(PERM_ID), 0)
    INTO V_ID, V_PAGE_ID
    FROM TEST_ROLE_PERM_WXX_V
    WHERE IS_ENABLE = 1;

    IF V_COUNT > 0 THEN
        SELECT A.ROLE_ID, B.PERM_ID
        INTO V_ID, V_PAGE_ID
        FROM ROLE_USER_TEST_WXX A
                 LEFT JOIN TEST_ROLE_PERM_WXX_V B
                           ON A.ROLE_ID = B.ROLE_ID
        WHERE A.USER_ID = V_USER_ID
          AND ROWNUM = 1;
    ELSE
        INSERT INTO ROLE_USER_TEST_WXX (USER_ID, ROLE_ID) VALUES (V_USER_ID, V_ID);
        COMMIT;
    END IF;
 -- 设置USER
    APEX_CUSTOM_AUTH.SET_USER(V_USER_NAME);

 -- 将用户登入录信息注入session state
    APEX_UTIL.SET_SESSION_STATE('ROLE_ID', V_ID);
    APEX_UTIL.SET_SESSION_STATE('DEPT_ID', V_DEPT_ID);
    APEX_UTIL.SET_SESSION_STATE('USER_NAME', V_USER_NAME);
    APEX_UTIL.SET_SESSION_STATE('JOB_NUMBER', V_JOB_NUMBER);
    APEX_UTIL.SET_SESSION_STATE('MOBILE', V_MOBILE);
    APEX_UTIL.SET_SESSION_STATE('MAIL', V_EMAIL);
    APEX_UTIL.SET_SESSION_STATE('USER_ID', V_USER_ID);
    APEX_UTIL.SET_SESSION_STATE('DEPT_NAME', V_DEPT_NAME);
--     APEX_UTIL.SET_SESSION_STATE('USERID', V_USERID);
END;

 

导航菜单权限09

 按下之后会这样

回去查看了列表,是对的鸭,应该差了东西

 在每张表加上授权方案试试

表对应的页设计器→选中表→区域 安全性:自定义的方案

 测试一下↓

加上安全性授权方案以后直接消失不见,普通用户user也就算了,管理员demo也不行QAQ

找原因ing

1.

 2.

 3.修改PL/SQL函数体

之前:

return f_control(
  p_username => :USER_NAME,
  p_pageid => :PAGE_ID
);

之后:

return f_control(
  p_username => :APP_NAME,
  p_pageid => :APP_PAGE_ID
);

原来是还没配置完orz

之前

 之后

 测试一下:

 

 报的是我自定义的错误(标识方案违规时显示的错误消息)

应该是username和pageid未被传值

 

蒋老师小课堂

1.添加表单,源位置:本地数据库,类型一定要是SQL查询,不能是表/视图

2.PL/SQL开发和命名规范;

【错误记录】ORA-01733: 此处不允许虚拟列

解决方法:用自定义的修改进行添加即可

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

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

相关文章

Git 安装、配置并把项目托管到码云 Gitee

错误聚集篇&#xff1a; 由于我 git 碰见大量错误&#xff0c;所以集合了一下&#xff1a; git 把项目托管到 码云出现的错误集合_打不着的大喇叭的博客-CSDN博客https://blog.csdn.net/weixin_49931650/article/details/132460492 1、安装 git 1.1 安装步骤 1.1.1 下载对应…

Linux系统编程:进程信号的处理

目录 一. 用户态和内核态 1.1 用户态和内核态的概念 1.2 用户态和内核态之间的切换 二. 信号的捕捉和处理 2.1 捕捉信号的时机 2.2 多次向进程发送同一信号 2.3 sigaction 函数 三. 可重入函数和不可重入函数 四. volatile 关键字 五. SIGCHLD信号 5.1 SIGCHLD信号的…

在互联网+的背景下,企业如何创新客户服务?

随着互联网的发展&#xff0c;开始数字化转型的潮流&#xff0c;移动互联网平台为各个行业带来了发展的新方向。企业有了移动互联网的加持&#xff0c;为客户提供了更好的服务。当移动互联网平台能够为客户提供更好的用户体验时&#xff0c;相应地&#xff0c;客户也给企业带来…

OpenCV项目开发实战--基于Python/C++实现鼠标注释图像和轨迹栏来控制图像大小

鼠标指针是图形用户界面 (GUI) 中的关键组件。没有它,您就无法真正考虑与 GUI 进行交互。那么,让我们深入了解 OpenCV 中鼠标和轨迹栏的内置函数。我们将演示如何使用鼠标来注释图像,以及如何使用轨迹栏来控制图像的大小 我们将使用下图来演示 OpenCV 中鼠标指针和轨迹栏功能…

Arcgis colorRmap

arcgis中colorRmap对应的名称&#xff1a; 信息来源&#xff1a;https://developers.arcgis.com/documentation/common-data-types/raster-function-objects.htm 点击该网页&#xff0c;并直接搜索“rasterFunction”&#xff0c;直接索引到该位置。 在arcpy中使用方法&#…

Linux安装jdk、mysql、并部署Springboot项目

&#x1f61c;作 者&#xff1a;是江迪呀✒️本文关键词&#xff1a;Linux、环境安装、JDK安装、MySQL、MySQL安装☀️每日 一言&#xff1a;知行合一&#xff01; 文章目录 一、前言二、安装步骤2.1 安装JDK&#xff08;1&#xff09;创建文件夹&#xff08;便于后…

2828. 判别首字母缩略词

2828. 判别首字母缩略词 C代码1&#xff1a; bool isAcronym(char ** words, int wordsSize, char * s){if (wordsSize ! strlen(s)) {return false;} for (int i 0; i < wordsSize; i) { // 遍历所有&#xff0c;没有不满足的就是满足的if (words[i][0] ! s[i]) {return…

【C语言进阶(5)】指针笔试题(带图分析)

文章目录 笔试题 1笔试题 2笔试题 3笔试题 4笔试题 5笔试题 6笔试题7笔试题 8 分析下面代码的结果为何是这样 笔试题 1 1. 笔试代码 int main() {int a[5] { 1, 2, 3, 4, 5 };int* ptr (int*)(&a 1);printf("%d,%d\n", *(a 1), *(ptr - 1));return 0; }2.…

一文速学-让神经网络不再神秘,一天速学神经网络基础(一)

前言 思索了很久到底要不要出深度学习内容&#xff0c;毕竟在数学建模专栏里边的机器学习内容还有一大半算法没有更新&#xff0c;很多坑都没有填满&#xff0c;而且现在深度学习的文章和学习课程都十分的多&#xff0c;我考虑了很久决定还是得出神经网络系列文章&#xff0c;…

这才是教室巡课正确的打开方式,你做的太Low了!

随着教育领域不断演变和技术的不断进步&#xff0c;在线巡课系统正在逐渐引起人们的关注。通过实时观察教师的课堂教学&#xff0c;系统为教育管理者提供了窗口&#xff0c;使他们能够更深入地了解教学实践&#xff0c;从而更好地满足学生的学习需求。 在线巡课系统为教育管理者…

小梦C嘎嘎——启航篇】C++STL 中 list日常使用的接口介绍

小梦C嘎嘎——启航篇】CSTL 中 list日常使用的接口介绍&#x1f60e; 前言&#x1f64c;什么是list&#xff1f;常用的函数接口无参的构造函数接口拷贝构造接口赋值运算符重载 总结撒花&#x1f49e; &#x1f60e;博客昵称&#xff1a;博客小梦 &#x1f60a;最喜欢的座右铭&a…

Linux知识点 -- Linux多线程(三)

Linux知识点 – Linux多线程&#xff08;三&#xff09; 文章目录 Linux知识点 -- Linux多线程&#xff08;三&#xff09;一、线程同步1.概念理解2.条件变量3.使用条件变量进行线程同步 二、生产者消费者模型1.概念2.基于BlockingQueue的生产者消费者模型3.单生产者单消费者模…

如何创建「录取查询系统」?

随着高校招生规模的不断扩大&#xff0c;学校录取工作变得越来越繁琐。为了提高效率和准确性&#xff0c;许多学校开始采用电子化的录取查询系统。易查分作为一款功能强大的在线查询工具&#xff0c;可以帮助学校快速搭建自己的「录取查询系统」。 好消息&#xff01;博主给大家…

【C++代码】二分查找,移除元素

题目&#xff1a;二分查找 给定一个 n 个元素有序的&#xff08;升序&#xff09;整型数组 nums 和一个目标值 target &#xff0c;写一个函数搜索 nums 中的 target&#xff0c;如果目标值存在返回下标&#xff0c;否则返回 -1。 题解 在升序数组 nums \textit{nums} nums …

Linux安装mysql ( ARM架构,rpm包)

下载对应的mysql 阿里源&#xff1a;阿里巴巴开源镜像站-OPSX镜像站-阿里云开发者社区 华为开源镜像站_软件开发服务_华为云 华为源&#xff1a; 华为开源镜像站_软件开发服务_华为云 选择华为鲲鹏镜像 https://repo.huaweicloud.com/kunpeng/yum/el/7/aarch64/ 下载mysql wg…

【3ds Max】练习——制作衣柜

目录 步骤 一、制作衣柜顶部 二、制作衣柜门板 三、制作衣柜底部 四、制作柜子腿部 五、制作柜子底板 步骤 一、制作衣柜顶部 1. 首先创建一个平面&#xff0c;然后将图片素材拖入平面 2. 平面大小和图片尺寸比例保持一致 3. 单机鼠标右键&#xff0c;选择对象属性 勾选…

简历考察点2_《CiCi-基于Vue3.0的智能音乐分享平台》

&#xff08;1&#xff09;项目初始化和推荐页面开发&#xff1a; 重点&#xff1a;轮播图、Scroll、下拉加载方法实现、 问题一&#xff1a;轮播图实现 ① 获取轮播图数据&#xff1a;虽然找到接口了&#xff0c;但是由于XHR请求在浏览器端会有跨域的限制&#xff0c;不能直…

8_分类算法-k近邻算法(KNN)

文章目录 1 KNN算法1.1 KNN算法原理1.2 KNN过程1.3 KNN三要素1.4 KNN分类预测规则1.5 KNN回归预测规则1.6 KNN算法实现方式&#xff08;重点&#xff09;1.7 k近邻算法优缺点 2 KD-Tree2.1 KD Tree构建方式2.2 KD Tree查找最近邻2.3 KNN参数说明 1 KNN算法 定义&#xff1a;如…

fineReport10问题笔记

1. word导出相关问题 1.1 导出文字为图片 fineReport技术文档 1&#xff09;文本控制 选中单元格&#xff0c;点击「单元格属性>样式>对齐」&#xff0c;文本控制设置有四种&#xff0c;分别为「自动换行、单行显示、单行显示&#xff08;调整字体&#xff09;、多行显…

AA实验是什么?

AA实验是什么&#xff1a;AA实验是在AB实验正式上线前做的分流均匀性检验&#xff0c;这个时候还没有正式上实验策略&#xff0c;只是为了检验两组的分流是否均匀先空跑一段时间。 AA实验的准备工作&#xff1a;这个时候要进行的工作是检查 两组分流是否均匀 、埋点是否正常 。…