迅为RK3576开发板Android 多屏显示

迅为iTOP-3576开发板采用瑞芯微RK3576高性能、低功耗的应用处理芯片,集成了4个Cortex-A72和4个Cortex-A53核心,以及独立的NEON协处理器。它适用于ARM PC、边缘计算、个人移动互联网设备及其他多媒体产品。

 

1.1 Android 多屏同显

iTOP-RK3576 开发板支持以下屏幕

迅为 MIPI 7 寸屏幕

标准 HDMI 屏幕(通过 HDMI 线连接)

迅为 LVDS 7 寸屏幕

迅为 LVDS 10.1 寸 1024*600 屏幕

迅为 LVDS 10.1 寸 1280*800 屏幕

然后修改 Android 源码 kernel-6.1/arch/arm64/boot/dts/rockchip/topeet-screen-lcds.dtsi 中的

设备树文件,如下图所示。LVDS 屏幕是 MIPI 通过转接板连接显示的,RK3576 不支持 LVDS

显示接口。

 

我们可以根据自己的需求来修改 topeet-screen-lcds.dtsi 文件。总之,修改

topeet_screen_choose.dtsi 的规律是:打开所连接的屏幕对应的宏定义,rk3576 有三个显示通

道 vp0 vp1 vp2,所打开的宏定义对应的 vp 通道不能重复。默认打开对应的宏定义为多屏同显。

如果打开的宏定义是#define LCD_TYPE_LVDS_10_1_1280x800_GT9271, 需要将

kernel-6.1/arch/arm64/configs/rockchip_defconfig 文件中的

CONFIG_TOUCHSCREEN_GT9271=y 宏定义使能,然后再编译源码。

如果打开的宏定义是#define LCD_TYPE_LVDS_10_1_1024x600_GT911,需要将

kernel-6.1/arch/arm64/configs/rockchip_defconfig 文件中的 CONFIG_TOUCHSCREEN_GT9XX

宏定义使能,然后再编译源码。

1.2 Android 多屏异显

如果要支持多屏异显,首先要调试好双屏或多屏都可以正常显示,并且分别挂载在不同的

vp 上,可以参考上一个小节根据自己的需求打开 topeet-screen-lcds.dtsi 设备树中的宏定义。默

认开启后,多屏显示的是同一个画面(如果要支持双屏或者多屏异显,需要应用支持异显,才会显示不同的内容)。查看当前的屏幕显示状态输入以下命令

cat /sys/kernel/debug/dri/0/summary

如果双屏或者多屏的显示器分辨率比例不同,比如说主屏是 16:9,副屏是 4:3,那么副

屏显示的画面会拉伸或者缩小,原因是副屏的画面是主屏映射过去的,所以副屏上显示的是

主屏的分辨率。如果同样的屏幕情况下,应用支持异显,那么副屏会显示实际正常的分辨率。

所以如果要支持双屏或者多屏同显并要求显示正常,双屏或者多屏的屏幕的分辨率比要一致。

1.2.1 指定主副屏

多屏异显的实际应用中,需要指定哪个是主屏,哪个是副屏。修改 Android14 源码目录下

rk3576_android14/device/rockchip/rk3576/topeet_rk3576/topeet_rk3576.mk 文件,添加如下内容:

如果要指定 MIPI 屏幕为主屏,HDMI 屏幕为副屏,如下设置:

PRODUCT_PROPERTY_OVERRIDES += vendor.hwc.device.primary=DSI

PRODUCT_PROPERTY_OVERRIDES += vendor.hwc.device.extend=HDMI-A

如果要指定 MIPI 屏幕为主屏,EDP 屏幕为副屏,如下设置:

PRODUCT_PROPERTY_OVERRIDES += vendor.hwc.device.primary=DSI

PRODUCT_PROPERTY_OVERRIDES += vendor.hwc.device.extend=eDP

如果需要定义多个主副屏时,需要用逗号隔开,比如指定 MIPI eDP 为主屏,HDMI-A 为副屏,

设置如下:

PRODUCT_PROPERTY_OVERRIDES += vendor.hwc.device.primary=DSI,eDP

PRODUCT_PROPERTY_OVERRIDES += vendor.hwc.device.extend=HDMI-A

1.2.2 异显方案介绍

目前有两种异显方案分别是 Android Presentation 和 Andorid Activity 指定屏幕启动 。

Android Presentation,需要 APP 应用开发中调用相应接口使指定的 view (Presentation

view 是一个特殊的 dialog 类型 view)在副屏中显示。

Android Activity 指定屏幕启动,APP 在启动 activity 时可以使用 display id 参数在对应

的屏幕上直接显示。

两者主要区别在:

1 前者的 acitivity 需要独立开发,把需要显示的内容投到副屏,后者可以不需要源码,调用命令行或者系统接口把第三方 app 的 acitivity 投送到副屏;

2 .前者只有一个 activity 在顶层,通过特殊的 dialog 将指定内容显示在副屏,后者是两

个 activity 分别显示在主副屏。

接下来我们详细讲述这俩种方法。

1.2.3 Android Presentation

本小节讲解 Android Presentation 异显方案,瑞芯微和迅为提供了使用 Android Presentation

编写好的 APP 例程,接下来进行测试。

1.2.3.1 ApiDemos APP

在 Android12 源码中瑞芯微已经提供了使用 Presentation 接口的测试 APP,在源码

development/samples/ApiDemos 目录下,需要使用 mm 命令编译 APP。迅为提供了编译好的

测试 APP 在网盘资料“iTOP-RK3576 开发板/02_【iTOP-RK3576 开发板】/07_多屏显示配套

资料/Android/ApiDemosAPK”目录下。

此 APP 源码在 Android 源码 rk3576_android14/development/samples/ApiDemos 目录下,进

入此目录,输入“mm”命令进行编译,如下图所示:

 

然后使用 adb 命令安装 APP,依次点击 App->Activity->Presentation 选项,即可进入

Presentation 调用界面。如下图所示:

 

在该界面需点击如下副屏的 checkbox 选项,即可在副屏显示相应图片。如下所示:

 

副屏 HDMi 屏幕显示图片,如下所示:

 

1.2.3.2 Presentation sampleAPP

此 APP 在网盘资料“iTOP-RK3576 开发板/02_【iTOP-RK3576 开发板】/07_多屏显示配

套资料/Android/Presentation-sample”目录下,下载此 APP 工程,然后用 Androidstudio 打开,

并编译 apk。编译成功之后,安装 APP,APP 安装成功之后如下图所示:

 

打开 APP 如下图所示:

 

点击“显示副屏”按钮,会在副屏显示,如下图所示:

 

APP 重要知识点讲解:

随着用户的需求增多,特别是对于一些 Android 平板电脑以及其他的一些 Android 智能设

备可能有多个屏幕,用户不仅想要在主屏幕上显示内容,同样在第二屏幕上也要显示想要的

内容,这样可以达到更好的体验效果。Google 也是不负众望在 Android4.2 版本以后提供了

Presentation 类,可以轻松实现在两块屏幕上同时显示不同的内容。Presentation 是一个特殊的

dialog,它的目的是显示内容到第二屏幕。在 Presentation 创建的时候关联一个目标设备,确

定 Presentation 要显示在那个设备上,根据这个设备的信息来配置 Presentation 的 context 和

resources 信息。目前系统提供了两种方式来与目标显示屏进行绑定。

1 通过 MediaRouter 接口获取并绑定:

选择显示 presentation 的设备最简单的方法就是使用 Media Router,media router 服务持续

追踪在系统中哪个音频、视频线路是可用的,当 routes 被选择或者不被选择,或者更好的显

示 presentation display 的线路发生改变后 media router 就会发送消息。所以一些应用程序可以

自动监视这些消息来在首选设备上显示或取消 presentation。

首选显示 presentation 的设备是 Media Router 进行推荐的,如果应用想要显示内容在第二

屏幕上就该使用该设备。下面将给出如何使用 media router 在主屏的设备创建和显示

presentation。

MediaRouter mediaRouter =(MediaRouter)

context.getSystemService(Context.MEDIA_ROUTER_SERVICE); MediaRouter.RouteInfo route =

mediaRouter.getSelectedRoute();

if(route !=null){

Display presentationDisplay = route.getPresentationDisplay();

if(presentationDisplay !=null){

Presentation presentation =newMyPresentation(context, presentationDisplay);

presentation.show();

}

}

根据上面代码可以看出通过系统服务 Media Router 来选择一个合适的 route,从 route 中来

获取首选的 display,如果 display 不为空就会创建该 presentation,创建完成后调用 presentation

的 show 方法将该 presentation 显示出来。

2 通过 DisplayManager 接口获取并绑定

另外一个获取首选 display 的方法是直接使用 display Manager 来获取。display manager 服

务提供方法枚举和描述系统中所有的设备,包括可以显示 presentation 的设备。display manager

持续追踪系统中所有的设备,然而,并不是所有的设备都适合显示 presentation,例如,如果

一个 Activity 试图在主屏幕上显示一个 presentation,它可能会掩盖自己的内容,这就像在

Activity 上打开一个 dialog 一样。

DisplayManager displayManager =(DisplayManager)

context.getSystemService(Context.DISPLAY_SERVICE); Display[] presentationDisplays

=displayManager.getDisplays(DisplayManager.DISPLAY_CATEGORY_PRESENTATION);

if(presentationDisplays.length >0){

// If there is more than one suitable presentation display, then we could consider

// giving the user a choice. For this example, we simply choose the first display

// which is the one the system recommends as the preferred presentation display.

Display display = presentationDisplays[1]; // displays[1]是副屏

Presentation presentation =new MyPresentation(context, presentationDisplay);

presentation.show();

}

根据上面代码可以看出通过系统服务 Display Manager 来获取所有适合显示 presentation 的

display 列表,如果获取到了多个适合 display 对象,我们选择副屏的 display。最后显示

presentation。

1.2.4 Android Activity 指定屏幕启动

本小节讲解 Android Activity 指定屏幕启动异显方案,瑞芯微提供了使用 Android Activity

指定屏幕启动编写好的 APP 例程,接下来进行测试。

1.2.4.1 dualscreendemo APP

RK DualScreen 主要区别与 android presentation,在于它实现了应用的派发,允许厂商快

速根据现有的 app 功能,进行模块的集成,减少开发周期和研发成本。示例代码为

DualScreenDemo.zip 工程,在网盘资料“iTOP-RK3576 开发板/02_【iTOP-RK3576 开发板】/07_

多屏显示配套资料/Android/DualScreenDemo”目录下下载。

使用 Androidstudio 打开此工程代码,编译安装 APP,安装完成后如下所示:

打开此 APP,如下所示,有三个按钮。

第三个按钮使用了 Android Activity 指定屏幕启动,关键代码如下所示,第一个和第二个

按钮使用了 Presentation。

private void showSecondByActivity(Context context){

ActivityOptions options = ActivityOptions.makeBasic();

MediaRouter mediaRouter = (MediaRouter)

context.getSystemService(Context.MEDIA_ROUTER_SERVICE);

MediaRouter.RouteInfo route =

mediaRouter.getSelectedRoute(MediaRouter.ROUTE_TYPE_LIVE_VIDEO);

if (route != null) {

Display presentationDisplay = route.getPresentationDisplay();

options.setLaunchDisplayId(presentationDisplay.getDisplayId());

Intent intent = new Intent("android.intent.action.MUSIC_PLAYER");

intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

startActivity(intent, options.toBundle());

}

}

在 startActivity 接口参数中设置指定屏幕的 display id,Activity 将在指定屏幕上直接启

动显示。

Activity 的多显示器支持需要设备支持<feature

name="android.software.activities_on_secondary_displays" />。

同时 application 或者 activity 需要支持分屏属性即<application>或者<activity>标签下设

置新的属性 android:resizeableActivity="true",这个属性在你 target 到 Android N 后

android:resizeableActivity 的默认值就是 true。

ActivityOptions 提供两个新函数以支持多个显示器,分别是 setLaunchDisplayId()和

getLaunchDisplayId()。

setLaunchDisplayId() 指定 Activity 在启动后应显示在哪个显示器上。

getLaunchDisplayId() 返回操作组件的当前启动显示器。

在上述代码中使用 MediaRouter 接口获取副屏的 display id,同理也可以使用

DisplayManager 接口获取响应的 display id。

1.2.5 支持输入法在副屏显示

修改 Android14 源码下的 device/rockchip/common/display_settings.xml 文件,如下所示:

将设置相应屏幕 shouldShowIme 为 true,如上配置支持输入法在 local:1 的副屏上显示。

1.2.6 副屏 DPI 设置

修改 Android14 源码下的 device/rockchip/common/display_settings.xml 文件,如下所示:

修改 forcedDensity 的值可以修改副屏的屏幕密度。

1.2.7 主屏幕可以触摸,副屏不触摸

如果想要实现主屏可以触摸,副屏不用触摸的功能。有两种解决方式:第一种是在 App

应用代码中实现。第二种需要修改 framework 层的源码。

第一种方式:

getWindow().setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL,

WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL);

第二种方式:

修改 Android14 源码 frameworks/native/services/inputflinger/reader/EventHub.cpp 文件,屏蔽掉 device->classes |= InputDeviceClass::EXTERNAL;属性,如下图所示:

1.2.8 多屏异触

多屏异触需要指定主副屏。这里使用修改 Android 源码的方式实现绑定副屏触摸芯片。这

样设置以后,系统开机会自动将 ft5x06 触摸绑定到副屏上面去。修改文件:

frameworks/native/services/inputflinger/reader/EventHub.cpp,添加如下加红的代码。通过修改

EventHub.cpp 文件,在 isExternalDeviceLocked 函数中判断设备名称为指定的副屏设备(比如

副屏的设备名称是 generic ft5x06 (79)),则返回 true。

bool EventHub::Device::isExternalDeviceLocked() {

const char *I2C_DEVICE_NAME = "generic ft5x06 (79)";

ALOGE("input deviceis '%s' ",device->identifier.name.c_str());

if (strcmp(device->identifier.name.c_str(), I2C_DEVICE_NAME) == 0) {

return true;

}

if (configuration) {

std::optional<bool> isInternal = configuration->getBool("device.internal");

if (isInternal.has_value()) {

return !isInternal.value();

}

}

return identifier.bus == BUS_USB || identifier.bus == BUS_BLUETOOTH;

}

这里的 I2C_DEVICE_NAME 需要根据实际情况添加,用户可根据 ALOGE 打印信息在

logcat 中寻找识别到的芯片实际的名字。下面是添加了 ALOGE 打印信息后在 logcat 中得到的

设备名字的截图:

上图中的 goodix-ts 和 generic ft5x06 (79)即为这里使用的触摸 IC 芯片的名字,将这个复制

到代码中即可。修改完毕,重新编译Android镜像,用户测试的时候可以直接使用ApiDemo APP

进行测试。

1.2.9 鼠标异屏切换

在多屏异显情况下,修改以下代码使鼠标箭头可以移动到需要的副屏上去进行操作。

我们需要修改 Android14 源码中

frameworks/native/services/inputflinger/reader/mapper/CursorInputMapper.cpp 文件

搜索"sys.mouse.presentation",然后将下面的代码中 0 改为 1。

//-----rk-code----

char mMousePresentation[PROPERTY_VALUE_MAX] = {1};

property_get("sys.mouse.presentation", mMousePresentation, "1");

if (strcmp(mMousePresentation, "1") == 0) {

if (std::optional<FloatRect> rect = mPointerController->getBounds();

rect.has_value()) {

if(xCursorPosition==rect->left||xCursorPosition==rect->right||yCursorPosition==rect->top||yCursor

Position==rect->bottom){

mDisplayId=getPolicy()->notifyDisplayIdChanged();

}

}

}else{

mDisplayId = mPointerController->getDisplayId();

}

然后重新编译 Android 源码,然后烧写镜像。
1.2.10 副屏显示配置

1.2.10.1 副屏全屏显示

设置副屏(副屏 1、副屏 2 等)是否全屏显示可通过修改 persist.sys.rotation.efull-n(n=1、

2、3、….)参数的取值进行配置,若配置为 true 则会进行全屏显示。

现以 MIPI 主屏、 HDMI 副 屏 为 例 ,修改如下:

在 device/rockchip/rk3576/topeet_rk3576/topeet_rk3576.mk 文件中添加如下内容,使得

HDMI 副屏可以全屏显示(由于副屏图像参考主屏宽高比进行缩放,若宽高比不一致,则出

现黑边,所以默认 HDMI 副屏显示会有黑边):

PRODUCT_PROPERTY_OVERRIDES += persist.sys.rotation.efull-1=true

修改完成后,保存退出,重新编译烧写镜像即可。

注:由于 mipi 竖屏显示与 HDMI 宽高比相差较大,HDMI 设置全屏显示后拉伸较明显!

1.2.10.2 副屏显示方向

副屏的旋转角度可通过 persist.sys.rotation.einit-n(n=1、2、3、….)属性控制,该属性用

于设置副屏(副屏 1、副屏 2 等)的显示方向,可取值为 0/1/2/3,分别表示将副屏显示方

向旋转(顺时针)0 度、90 度、180 度、270 度。

现以 MIPI 主屏、 HDMI 副 屏 为 例 ,修改如下:

在 device/rockchip/rk3576/topeet_rk3576/topeet_rk3576.mk 文件中添加如下内容,使得

HDMI 副屏的显示方向旋转 90 度:

PRODUCT_PROPERTY_OVERRIDES += persist.sys.rotation.einit-1=1

PRODUCT_PROPERTY_OVERRIDES += persist.sys.rotation.efull-1=false

 

修改完成后,保存退出,重新编译烧写镜像即可,HDMI 会旋转 90°竖屏显示。

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

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

相关文章

如何保证光谱相机的稳定性和可靠性

光学系统设计与制造 高质量光学元件&#xff1a;采用高精度研磨和镀膜的透镜、棱镜、光栅等光学元件。优质的透镜可以减少像差和色差&#xff0c;确保光线准确聚焦&#xff1b;高质量的镀膜能够提高光学元件的透光率&#xff0c;降低反射损失&#xff0c;并且增强对不同波段光…

Python GUI Pyside6 实例笔记

例【1】 好的&#xff01;我们将通过一个简单的案例来学习如何使用 PySide6 创建一个基本的桌面应用程序。这个案例将展示如何创建一个带有按钮的窗口&#xff0c;当点击按钮时&#xff0c;会弹出一个消息框。 1. 安装 PySide6 首先&#xff0c;确保你已经安装了 PySide6。如…

CIA-Access V2.5_9_2_10G EPON技术原理_关键技术

10G EPON关键技术&#xff0c;主要包含测距&#xff0c;突发光电技术&#xff0c;DBA以及线路加密。 关键技术之MPCP测距 第一个仍然是测距&#xff0c;每一个ONU到OLT的逻辑距离是不相等的&#xff0c;另外OLT与ONU之间的环路时间也会随着时间和环境的变化而变化&#xff0c;…

PDF文件提取开源工具调研总结

概述 PDF是一种日常工作中广泛使用的跨平台文档格式&#xff0c;常常包含丰富的内容&#xff1a;包括文本、图表、表格、公式、图像。在现代信息处理工作流中发挥了重要的作用&#xff0c;尤其是RAG项目中&#xff0c;通过将非结构化数据转化为结构化和可访问的信息&#xff0…

计算机网络 (43)万维网WWW

前言 万维网&#xff08;World Wide Web&#xff0c;WWW&#xff09;是Internet上集文本、声音、动画、视频等多种媒体信息于一身的信息服务系统。 一、基本概念与组成 定义&#xff1a;万维网是一个分布式、联机式的信息存储空间&#xff0c;通过超文本链接的方式将分散的信息…

ubuntu18.04开发环境下samba服务器的搭建

嵌入式linux的发展很快&#xff0c;最近准备在一个新项目上采用新一代的linux核心板&#xff0c;发现linux内核的版本已经更新到5.4以上甚至6.0以上&#xff1b;之前常用的linux内核版本是2.6.4&#xff0c;虽然在某些项目上还能用但是明显跟不上时代的步伐了&#xff0c;所以要…

HTML5+Canvas实现的鼠标跟随自定义发光线条源码

源码介绍 HTML5Canvas实现的鼠标跟随自定义发光线条特效源码非常炫酷&#xff0c;在黑色的背景中&#xff0c;鼠标滑过即产生彩色变换的发光线条效果&#xff0c;且线条周围散发出火花飞射四溅的粒子光点特效。 效果预览 源码如下 <!DOCTYPE html PUBLIC "-//W3C//D…

【论文阅读】基于空间相关性与Stacking集成学习的风电功率预测方法

文章目录 摘要0. 引言1. 空间相关性分析2. 风电功率预测模型2.1 Stacking 集成策略2.2 基学习器2.2.1 基于机器学习算法的基学习器2.2.2 基于神经网络的基学习器2.2.3 基于粒子群优化算法的超参数优化 2.3 元学习器2.4 基于空间相关性与Stacking集成学习的风电功率预测方法 3 算…

GMM高斯混合聚类算法(Matlab)

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 GMM高斯混合聚类算法 matlab2023b语言&#xff0c;一键出图&#xff0c;直接运行 1.代码注释清晰&#xff0c;自行解读容易。 2…输出图例如图所示包括&#xff1a;聚类图(聚类结果图)&#xff0c;协方差矩阵类型…

LabVIEW实车四轮轮速信号再现系统

开发了一个基于LabVIEW的实车四轮轮速信号再现系统。该系统解决现有电机驱动传感器成本高、重复性差、真实性差和精度低等问题&#xff0c;提供一种高精度、低成本的轮速信号再现解决方案。 项目背景 ABS轮速传感器在现代汽车安全系统中发挥着至关重要的作用。为保证其准确性和…

计算机网络常见协议

目录 OSPF(Open Shortest Path First) NAT(Network Address Translation) ICMP (Internet Control Message Protocol) HTTPS&#xff08;SSL/TLS加密&#xff09; HTTPS协议 1. 对称加密 2. 非对称加密 3. 证书验证 4. 回顾https协议传输流程 HTTP TCP UDP 1. TCP&a…

算法面试准备 - 手撕系列第七期 - MLP(利用FashionMNIST数据集)

算法面试准备 - 手撕系列第七期 - MLP(利用FashionMNIST数据集) 目录 算法面试准备 - 手撕系列第七期 - MLP(利用FashionMNIST数据集)FashionMINIST 图像分类原理解析1. 全连接的原理图2. 背景介绍3.引入相关库函数4. 数据预处理5. 模型设计6. 初始化网络&#xff0c;损失函数与…

单元测试与unittest框架

&#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;薪资嘎嘎涨 单元测试的定义 1. 什么是单元测试&#xff1f; 单元测试是指&#xff0c;对软件中的最小可测试单元在与程序其他部分相隔离的情况下进行检查和验证的工作&am…

【Hugging Face】下载开源大模型步骤

Mac M1 1、国内镜像站 模型基本都可以在国内镜像站 https://hf-mirror.com/ 下载。 部分 Gated Repo 需登录申请许可&#xff0c;需先前往 Hugging Face 官网登录、申请许可&#xff0c;在官网这里获取 Access Token 后回镜像站用命令行下载。 2、注册登陆 Hugging Face 2.1…

STM32的集成开发环境STM32CubeIDE安装

STM32CubeIDE - STM32的集成开发环境 - 意法半导体STMicroelectronics

.Net8 Avalonia跨平台UI框架——<vlc:VideoView>控件播放海康监控、摄像机视频(Windows / Linux)

一、UI效果 二、新建用户控件&#xff1a;VideoViewControl.axaml 需引用&#xff1a;VideoLAN.LibVLC.Windows包 Linux平台需安装&#xff1a;VLC 和 LibVLC &#xff08;sudo apt-get update、sudo apt-get install vlc libvlccore-dev libvlc-dev&#xff09; .axaml 代码 注…

51.WPF应用加图标指南 C#例子 WPF例子

完整步骤&#xff1a; 先使用文心一言生成一个图标如左边使用Windows图片编辑器编辑&#xff0c;去除背景使用正方形&#xff0c;放大图片使图标铺满图片使用格式工程转换为ico格式&#xff0c;分辨率为最大 在资源管理器中右键项目添加ico类型图片到项目里图片属性设置为始终…

C++(二十一)

前言&#xff1a; 本文承接上文&#xff0c;将详细讲解指针概念。 一&#xff0c;通过指针了解变量的数值。 在将变量地址存入指针后&#xff0c;从指针反推也可以知道原变量的值&#xff0c;若想进行反退&#xff0c;就需要使用间接引用运算符&#xff1a;*。 语法&#x…

Redis 性能优化:多维度技术解析与实战策略

文章目录 1 基准性能2 使用 slowlog 优化耗时命令3 big key 优化4 使用 lazy free 特性5 缩短键值对的存储长度6 设置键值的过期时间7 禁用耗时长的查询命令8 使用 Pipeline 批量操作数据9 避免大量数据同时失效10 客户端使用优化11 限制 Redis 内存大小12 使用物理机而非虚拟机…

网络安全面试题汇总(个人经验)

1.谈一下SQL主从备份原理&#xff1f; 答&#xff1a;主将数据变更写入自己的二进制log,从主动去主那里去拉二进制log并写入自己的二进制log,从而自己数据库依据二进制log内容做相应变更。主写从读 2.linux系统中的计划任务crontab配置文件中的五个星星分别代表什么&#xff…