开发工具:python3.10
数据库:Python内置的SQLite3数据库,SQLite是一种嵌入式数据库,体积很小,它的数据库就是一个文件。本文建立了Library数据库,存储系统内的管理员、图书、读者、借阅相关信息。
1 绪论 传统人工方式管理文件档案存在着许多缺点,如:效率低、保密性差等,而且随着时间的积累,将产生大量的文件和数据,这对于查找、更新和维护都带来了不便。随着科学技术的不断提高,互联网与计算机技术的日渐成熟,为我们共享数据提供了前所未有的方便。作为计算机应用的一部分,使用计算机对图书馆进行管理具有手工管理无法比拟的优点,如:检索迅速、查找方便、可靠性高,存储量大、保密性好、寿命长、成本低等,这些优点能够极大的提高图书信息、读者信息管理的效率,也是科学化、正规化的体现。
本次开发的图书馆管理系统主要包括以下四大模块:(1)个人信息管理,包括查看个人信息以及修改个人信息,可对登录密码等个人信息进行修改。(2)图书信息管理,可对图书信息进行增、删、改、查、浏览操作。(3)读者信息管理,涉及读者信息的增、删、改、查、浏览操作。(4)查看借阅信息,可查看借阅时间、借阅读者借书证号等信息。
2 需求分析 2.1 功能分析 根据用户调查,系统应有以下功能需求:
(1)管理员使用工作证号进行注册,完成注册后可根据工作证号和密码登录系统。
(2)管理员查看、修改个人信息,包括手机号、家庭住址、登录密码等。
(3)图书的信息管理:包括添加、删除、信息修改、浏览、查询等。
(4)读者的信息管理:包括添加、删除、信息修改、浏览、查询等。
(5)查看借阅信息,并可分别依据图书ID、借书证号、借阅时间、归还时间进行查询;也可以依据图书ID和借书证号的组合查询相关纪录。
2.2 技术分析 系统采用Python语言设计实现,使用python3.10为开发工具,利用Python内置的SQLite3数据库建立了Library数据库。使用了Python自带的tkinter模块,tkinter模块是一种流行的面向对象的GUI工具包 TK 的Python编程接口,提供了快速便利地创建GUI应用程序的方法。使用了os模块,os模块提供了各种 Python 程序与操作系统进行交互的接口,通过os模块,一方面可以方便地与操作系统进行交互,另一方面页可以极大增强代码的可移植性。如果该模块中相关功能出错,会抛出OSError异常或其子类异常。
3 总体设计 3.1 功能设计 3.2 数据库设计 4 详细设计 4.1 注册模块程序流程图 4.2 登录模块程序流程图 5 系统实现 5.1 登录、注册功能 (1)注册测试:
(2)登录测试:
(3)相关代码如下:
path = os.getenv('temp') filename = os.path.join(path, 'info.txt') # 在窗口上创建标签组件 labelname = tkinter.Label(self.window, text='账号', font=('华文中宋', 16)) labelname.place(x=200, y=120, width=80, height=30) # 创建字符串变量和文本框组件,同时设置关联的变量 global varname varname = tkinter.StringVar(self.window, value='') self.
问题1,随机生成可重复的一组数
方法一:使用 random.choices 函数
import random # 生成10个可以重复的数 repeated_random_numbers = random.choices(range(1, 11), k=10) print("生成的可重复数:", repeated_random_numbers) 生成的可重复数: [9, 3, 7, 6, 1, 9, 2, 9, 1, 10] 方法二:使用 numpy 库的 np.random.choice 函数
import numpy as np # 生成10个可以重复的数 repeated_random_numbers_np = np.random.choice(range(1, 11), size=10) print("生成的可重复数:", repeated_random_numbers_np) 生成的可重复数: [8 4 3 2 1 7 8 6 8 6] 方法三:使用列表生成式和 random.randint 函数
import random # 生成10个可以重复的数 repeated_random_numbers_alt = [random.randint(1, 10) for _ in range(10)] print("
这篇文章主要介绍了下载和安装python的主要步骤,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获,下面让小编带着大家一起了解一下。
Python——一种解释型、面向对象、动态数据类型的高级程序设计语言,是人工智能首选的变成语言。
Python可以应用于Web应用开发、网络爬虫、人工智能、数据处理、服务器运维工作等适合练手的python项目。
以下为免费的资源下载网址(推荐官方网站直接下载):
https://www.python.org/downloads/
建议直接在官方网站下载
注意选择需要安装的版本,要根据计算机的操作系统合理选择,本计算机是windows11,64位操作系统。点击“Download”后的链接直接下载对应版本的安装应用程序。
Python安装过程 安装方式有两种:
1、 默认安装,安装路径默认。
2、自定义安装,可以自行选择指定的安装路径、模块和功能。
需要勾选“Add Python 3.9 to PATH”,将路径信息加入环境变量PATH中。
点击“Customize installation”进入自定义安装。
进入选择相关特性界面,默认是全部勾选。
特性分别包括:说明文档、安装器、图形库和IDLE、测试套装、启动器、对所有用户。
进入Python高级选项设置页面。默认勾选了文件关联、快捷键和将python加入环境变量三个高级选项。
也可以按需勾选“install for all users”,勾选该选项后也会自动勾选第五个选项。
点击“Browse”自行更改安装路径。点击“install”键开始安装。
进入安装进程界面,等待半分钟。
进入安装完成界面,安装成功点击“close”退出安装流程。
在CMD中检查是否安装成功以及相关版本信息。
以管理员身份打开CMD命令提示符,输入“python —V”回车。
设置Python 主要是设置环境变量,可以先判断下是否有必要在系统中设置环境变量。
打开CMD命令提示符,输入“python”回车,如果成功出现版本信息,则不需要设置,如下图所示。
如果不成功,则需要设置系统环境变量。
设置环境变量的方法:
计算机中分别点击设置——系统——系统信息——高级系统设置——系统属性——环境变量——系统变量——编辑环境变量——新建——手动添加python路径,注意用“;”隔开——确定保存。
环境变量设置成功,接下来可以使用Python语言编写Python程序啦!
退出python环境:ctrl+z回车。
然后输入pip回车,检查是否有成功安装pip。如下图即安装成功。
从下载到安装的全流程就到这里结束啦~
零基础小白的Python学习资源总结 如果你也喜欢编程,想通过学习Python转行、做副业或者提升工作效率,我也为大家整理了一份 【最新全套Python学习资料】 一定对你有用!
对于0基础小白入门:
如果你是零基础小白,想快速入门Python是可以考虑的!
1、学习时间相对较短,学习内容更全面更集中
2、可以找到适合自己的学习方案
这份资料包含:Python安装包+激活码、Python web开发,Python爬虫,Python数据分析,人工智能、机器学习等教程,带你从零开始系统性的学好Python!
我已经上传至CSDN官方,如果需要可以扫描下方二维码都可以免费获取【保证100%免费】
学好 Python 不论是就业、副业赚钱、还是提升学习、工作效率,都是非常不错的选择,但要学会 Python 还是要有一个学习规划。
一、Python所有方向的学习路线 Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
二、Python课程视频 我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。
三、精品书籍 书籍的好处就在于权威和体系健全,刚开始学习的时候你可以只看视频或者听某个人讲课,但等你学完之后,你觉得你掌握了,这时候建议还是得去看一下书籍,看权威技术书籍也是每个程序员必经之路。
四、清华编程大佬出品《漫画看学Python》 用通俗易懂的漫画,来教你学习Python,让你更容易记住,并且不会枯燥乏味。
五、Python实战案例 光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
六、互联网企业面试真题 我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
文章目录 前言准备flink环境docker构建mysql、doris环境数据准备 通过 FlinkCDC cli 提交任务整库同步同步变更路由变更路由表结构不一致无法同步 结尾 前言 在FLink cdc 2.x的版本,各企业做了许多类似的基础功能改造工作(B站 2022年企业flink cdc实践分享 )。
最近Flink CDC 3.0发布,schema 变更自动同步、整库同步、分库分表等增强功能使 Flink CDC 3.0 在更复杂的数据集成与用户业务场景中发挥作用:用户无需在数据源发生 schema 变更时手动介入,大大降低用户的运维成本;只需对同步任务进行简单配置即可将多表、多库同步至下游,并进行合并等逻辑,显著降低用户的开发难度与入门门槛。Flink CDC 3.0 正式发布。
我们今天基于 Flink CDC 3.0 同步 MySQL 到 Doris ,来体验下新上的整库同步、表结构变更同步和分库分表同步的功能。
准备 flink环境 准备 Flink Standalone 集群,下载最新版本 Flink 1.18.0 ,解压后得到 flink-1.18.0 目录。并且设置 FLINK_HOME 为 flink-1.18.0 所在目录。
通过在 conf/flink-conf.yaml 配置文件追加下列参数开启 checkpoint,每隔 3 秒做一次 checkpoint,方便后续观察数据变更。
execution.checkpointing.interval: 3000 使用下面的命令启动 Flink 集群。
./bin/start-cluster.sh 启动成功的话,可以在 http://localhost:8081/ 访问到 Flink Web UI,如下所示:
适用情况:确认已经安装了库,但是vscode中显示无法调用?
无法解析导入“numpy” 解决办法:很可能是由于之前已经安装了anaconda,库已经安装在anaconda的编译器里,但是后来安装vscode又重新下载了新的编译器,因此选择正确的编译器编译即可。
1.首先在终端中确认库是否安装 输入pip install numpy
注意到已经显示already satisfied,说明库已经安装。
并且显示安装在anaconda3路径下,说明问题出在编译器的选择。
2.解释器的选择有问题 Vscode 打开py文件,点击右下角选择正确路径:
在vscode顶部选择我们正确的anaconda解释器路径:
重新编译,问题解决。
引言 深度学习是人工智能领域中最热门和最具影响力的分支之一。其核心在于通过构建复杂的神经网络模型,从大量的数据中自动学习并提取出有用的特征,从而实现各种高级的任务,如图像识别、自然语言处理等。本文将介绍深度学习中的十大核心算法,帮助读者更深入地了解这一领域。
一、卷积神经网络(Convolutional Neural Networks,CNN) 卷积神经网络(Convolutional Neural Networks,CNN)是深度学习领域中最具有代表性的一种算法。它是一种特殊类型的神经网络,被广泛应用于计算机视觉、自然语言处理、语音识别和许多其他领域。
1.1 卷积神经网络的基本原理 卷积神经网络的基本原理是通过卷积运算对输入数据进行特征提取。在卷积神经网络中,每个神经元都与输入数据的一个局部区域进行连接,并通过卷积运算提取该局部区域中的特征。这种局部连接和卷积运算的方式使得卷积神经网络能够自动地学习到输入数据的局部特征。
1.2卷积神经网络的结构 卷积神经网络主要由输入层、卷积层、池化层、全连接层和输出层组成。
输入层:输入层负责接收原始的输入数据,通常是一个二维的图像或一个三维的体积数据。卷积层:卷积层是卷积神经网络的核心部分,它通过卷积运算对输入数据进行特征提取。在卷积层中,每个神经元都与输入数据的一个局部区域进行连接,并通过卷积运算提取该局部区域中的特征。池化层:池化层通常位于卷积层之后,它的作用是减少数据的维度和计算复杂度,同时保留重要的特征。全连接层:全连接层通常位于网络的最后部分,它负责将前面各层提取到的特征进行整合,并输出最终的分类或回归结果。输出层:输出层是网络的最后一层,它根据问题的类型(分类或回归)输出相应的结果。 1.3 卷积神经网络的训练 卷积神经网络的训练通常使用反向传播算法和梯度下降算法来实现。在训练过程中,网络通过反向传播算法计算出每个神经元的误差梯度,然后使用梯度下降算法更新神经元的权重和偏置,使得网络的输出结果更加接近于真实结果。
1.4 demo 下面是一个简单的Python代码示例,用于演示如何使用TensorFlow框架实现一个简单的卷积神经网络来解决手写数字识别问题:
import tensorflow as tf from tensorflow.keras.datasets import mnist from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense # 加载MNIST数据集 (x_train, y_train), (x_test, y_test) = mnist.load_data() # 将输入数据归一化到0-1之间 x_train = x_train / 255.0 x_test = x_test / 255.0 # 将标签进行one-hot编码 y_train = tf.keras.utils.to_categorical(y_train, num_classes=10) y_test = tf.keras.utils.to_categorical(y_test, num_classes=10) # 定义模型结构 model = Sequential() model.
一、ADB已经正常安装成功,在cmd输入adb可以出现信息。 二、问题出现 > adb shell * daemon not running. starting it now at tcp:5037 * Cannot create process: 系统找不到指定的文件。 (2) * failed to start daemon * error: cannot connect to daemon 然后一般可以查看5037这个端口号是否有被占用,如果有就kill掉重启即可。
netstat -ano | findstr “5037” 正常解决不了,如果可以解决,你也不会看到我这篇文章。
适用于RK、全志、Android、APP应用等等都适用。上干货了
三、解决办法 自己手动启动adb,解决这个问题。
adb nodaemon server 敲重点 不要关闭它,你重新打开一个cmd
你就会神奇的发现它进去了~~~~
四、疑难杂症 如果说手动启动不了的,那就接着看以下操作。(证明你的电脑环境跟我一样倒霉)
我们去把win10驱动程序强制签名给关闭了 cmd,进去输入
bcdedit.exe /set nointegritychecks on 如果报错,有无法打开启动配置数据储存拒绝访问或者其他的问题。
进去bios开机按F2 或者F12。禁用驱动程序签名强制执行(高级启动)
首先按下Win键+I打开设置。点击“更新与安全”,然后点击“恢复”。在“高级启动”部分,点击“立即重启”。计算机将进入高级启动选项。在这里,选择“疑难解答”。接着选择“高级选项”。在高级选项中,选择“启动设置”。在启动设置中,点击“重新启动”。计算机将重新启动并显示启动设置。在这里,找到“禁用驱动程序签名强制执行”的选项,按其对应的数字键(一般是7)。计算机将继续启动,此时驱动程序强制签名已被禁用。 然后重新执行第三步骤的操作~~~就成功了;
场景 PostGresSQL简介与Windows上的安装教程:
PostGresSQL简介与Windows上的安装教程_postgressql windows安装免费吗?-CSDN博客
除了标准 SQL 语句之外,PostgreSQL 还支持使用各种过程语言(例如 PL/pgSQL、C、PL/Tcl、PL/Python、PL/Perl、PL/Java 等 )
创建复杂的过程和函数,称为存储过程(Stored Procedure)和自定义函数(User-Defined Function)。
存储过程支持许多过程元素,例如控制结构、循环和复杂的计算。
注:
博客:
霸道流氓气质_C#,架构之路,SpringBoot-CSDN博客
实现 1、PL/pgSQL 代码块结构 [ <<label>> ] [ DECLARE declarations ] BEGIN statements; ... END [ label ]; 结构说明:
label 是一个可选的代码块标签,可以用于 EXIT 语句退出指定的代码块,或者限定变量的名称;
DECLARE 是一个可选的声明部分,用于定义变量;
BEGIN 和 END 之间是代码主体,也就是主要的功能代码;所有的语句都使用分号(;)结束,
END 之后的分号表示代码块结束。
代码块示例:
DO $$ DECLARE name text; BEGIN name := '霸道'; RAISE NOTICE 'Hello % !', name; END $$; 运行结果:
示例说明:
以上是一个匿名块,与此相对的是命名块(也就是存储过程和函数)。
一、实验目的
熟练掌握常用的hadoop shell命令
二、实验内容 1.学习在开启、关闭Hadoop
2.学习在Hadoop中创建、修改、查看、删除文件夹及文件
3.学习改变文件的权限及文件的拥有者
4.学习使用shell命令提交job任务
5.Hadoop安全模式的进入与退出
三、实验原理或流程
调用文件系统(FS)Shell命令应使用 hadoop fs <args>的形式。 所有的的FS shell命令使用URI路径作为参数。URI格式是scheme://authority/path。对HDFS文件系统,scheme是hdfs,对本地文件系统,scheme是file。其中scheme和authority参数都是可选的,如果未加指定,就会使用配置中指定的默认scheme。一个HDFS文件或目录比如/parent/child可以表示成hdfs://namenode:namenodeport/parent/child,或者更简单的/parent/child(假设你配置文件中的默认值是namenode:namenodeport)。大多数FS Shell命令的行为和对应的Unix Shell命令类似,出错信息会输出到stderr,其他信息输出到stdout。
四、实验过程及源代码
1.打开终端模拟器,切换到/apps/hadoop/sbin目录下,启动Hadoop
2.执行jps,检查一下Hadoop相关进程是否启动
3.在/目录下创建一个test1文件夹
hadoop fs -mkdir /test1 在Hadoop中的test1文件夹中创建一个file.txt文件 hadoop fs -touchz /test1/file.txt 查看根目录下所有文件 hadoop fs -ls / 还可以使用ls -R的方式递归查看根下所有文件 hadoop fs -ls -R / 将Hadoop根下test1目录中的file.txt文件,移动到根下并重命名为file2.txt hadoop fs -mv /test1/file.txt /file2.txt Hadoop中的mv用法同Linux中的一样,都可以起到移动文件和重命名的作用。
将Hadoop根下的file2.txt文件复制到test1目录下 hadoop fs -cp /file2.txt /test1 在Linux本地/data目录下,创建一个data.txt文件,并向其中写入hello hadoop cd /data touch data.txt echo hello hadoop! >> data.txt 将Linux本地/data目录下的data.txt文件,上传到HDFS中的/test1目录下hadoop fs -put /data/data.
目录
一、安装JDK8
1)JDK下载地址
2)设置环境变量
二、Hadoop安装(window10环境)
1)下载Hadoop3.1.3
2)Hadoop配置环境变量
3)在hadoop解压目录下创建相关目录
4)修改Hadoop配置文件
1、core-site.xml文件:添加以下配置
2、hdfs-site.xml文件:添加以下配置,路径改成自己的安装路径
3、mapred-site.xml文件:添加以下配置
4、yarn-site.xml文件:添加以下配置
5)替换文件
1、替换bin目录下文件(winutils)
2、按照路径找到图中该文件
6)格式化节点
7)运行
8)验证
三、安装mysql8.x
1、下载mysql
2、配置mysql环境变量
3、初始化mysql
4、安装mysql服务
5、通过命令启动服务
6、通过mysql客户端登录验证并修改root密码
8、重置mysql root密码(命令行都要以管理员运行 )
四、Hive安装(window10环境)
1)下载Hive
2)Hive配置环境变量
3)新建本地目录(后面配置文件会用到)
4)在hadoop上创建hdfs目录(后面配置文件会用到)
5)修改Hive 配置文件
1、hive-site.xml 文件:配置文件内容如下
2、hive-env.sh 文件:配置文件内容如下
6)替换hvie中的bin目录
7)下载mysql-connector-java-*.jar
8)创建Hive 初始化依赖的数据库hive,注意编码格式:latin1
9)Hive 初始化数据
10)启动Hive 服务
1、首先启动Hadoop
2、再启动Hive 服务
3、验证
11)配置beeline
1、添加beeline配置
2、启动hiveserver2
正常登录,一切OK。
一、安装JDK8 【温馨提示】对应后面安装的hadoop和hive版本,这里使用jdk8,这里不要用其他jdk了,可能会出现一些其他问题。
1)JDK下载地址 Java Downloads | Oracle
按正常下载是需要先登录的,这里提供一个不用登录下载的方法
复制的连接如下:https://www.oracle.com/webapps/redirect/signon?nexturl=https://download.oracle.com/otn/java/jdk/8u321-b07/df5ad55fdd604472a86a45a217032c7d/jdk-8u321-windows-x64.exe
获取下载地址:使用复制的连接后半部分,将otn换成otn-pub就可以直接下载了
https://download.oracle.com/otn-pub/java/jdk/8u321-b07/df5ad55fdd604472a86a45a217032c7d/jdk-8u321-windows-x64.exe
下载完后就是傻瓜式安装了
2)设置环境变量 3)验证
安装eslint插件:npm install --save-dev eslint-config-vue eslint-plugin-vue创建eslintrc.js文件,添加相关代码规范(根据自己喜好进行调整)
module.exports = { root: true, parserOptions: { parser: 'babel-eslint', sourceType: 'module' }, env: { browser: true, node: true, es6: true }, extends: ['plugin:vue/recommended', 'eslint:recommended'], // add your custom rules here // it is base on https://github.com/vuejs/eslint-config-vue rules: { 'vue/attribute-hyphenation': 'off', 'vue/no-mutating-props': 'off', 'vue/require-prop-types': 'off', 'vue/html-self-closing': [ 'error', { html: { void: 'any', normal: 'any', component: 'always' }, svg: 'always', math: 'always' } ], 'vue/max-attributes-per-line': [ 2, { singleline: 2, multiline: { max: 2, allowFirstLine: false } } ], 'vue/singleline-html-element-content-newline': 'off', 'vue/multiline-html-element-content-newline': 'error', 'vue/name-property-casing': ['error', 'PascalCase'], 'vue/no-v-html': 'off', 'accessor-pairs': 2, 'arrow-spacing': [ 2, { before: true, after: true } ], 'block-spacing': [2, 'always'], 'brace-style': [ 2, '1tbs', { allowSingleLine: true } ], camelcase: [ 0, { properties: 'always' } ], 'comma-dangle': [2, 'never'], 'comma-spacing': [ 2, { before: false, after: true } ], 'comma-style': [2, 'last'], 'constructor-super': 2, curly: [2, 'multi-line'], 'dot-location': [2, 'property'], 'eol-last': 2, eqeqeq: 'off', 'generator-star-spacing': [ 2, { before: true, after: true } ], 'handle-callback-err': [2, '^(err|error)$'], indent: [ 2, 2, { SwitchCase: 1 } ], 'jsx-quotes': [2, 'prefer-single'], 'key-spacing': [ 2, { beforeColon: false, afterColon: true } ], 'keyword-spacing': [ 2, { before: true, after: true } ], 'new-cap': [ 2, { newIsCap: true, capIsNew: false } ], 'new-parens': 2, 'no-array-constructor': 2, 'no-caller': 2, 'no-case-declarations': 'off', 'no-console': 'off', 'no-class-assign': 2, 'no-cond-assign': 2, 'no-const-assign': 2, 'no-control-regex': 0, 'no-delete-var': 2, 'no-dupe-args': 2, 'no-dupe-class-members': 2, 'no-dupe-keys': 2, 'no-duplicate-case': 2, 'no-empty-character-class': 2, 'no-empty-pattern': 2, 'no-eval': 2, 'no-ex-assign': 2, 'no-extend-native': 2, 'no-extra-bind': 2, 'no-extra-boolean-cast': 2, 'no-extra-parens': [2, 'functions'], 'no-fallthrough': 2, 'no-floating-decimal': 2, 'no-func-assign': 2, 'no-implied-eval': 2, 'no-inner-declarations': [2, 'functions'], 'no-invalid-regexp': 2, 'no-irregular-whitespace': 2, 'no-iterator': 2, 'no-label-var': 2, 'no-labels': [ 2, { allowLoop: false, allowSwitch: false } ], 'no-lone-blocks': 2, 'no-mixed-spaces-and-tabs': 2, 'no-multi-spaces': 2, 'no-multi-str': 2, 'no-multiple-empty-lines': [ 2, { max: 1 } ], 'no-native-reassign': 2, 'no-negated-in-lhs': 2, 'no-new-object': 2, 'no-new-require': 2, 'no-new-symbol': 2, 'no-new-wrappers': 2, 'no-obj-calls': 2, 'no-octal': 2, 'no-octal-escape': 2, 'no-path-concat': 2, 'no-proto': 2, 'no-redeclare': 2, 'no-regex-spaces': 2, 'no-return-assign': [2, 'except-parens'], 'no-self-assign': 2, 'no-self-compare': 2, 'no-sequences': 2, 'no-shadow-restricted-names': 2, 'no-spaced-func': 2, 'no-sparse-arrays': 2, 'no-this-before-super': 2, 'no-throw-literal': 2, 'no-trailing-spaces': 2, 'no-undef': 2, 'no-undef-init': 2, 'no-unexpected-multiline': 2, 'no-unmodified-loop-condition': 2, 'no-unneeded-ternary': [ 2, { defaultAssignment: false } ], 'no-unreachable': 2, 'no-unsafe-finally': 2, 'no-unused-vars': [ 1, { vars: 'all', args: 'none' } ], 'no-useless-call': 2, 'no-useless-computed-key': 2, 'no-useless-constructor': 2, 'no-useless-escape': 0, 'no-whitespace-before-property': 2, 'no-with': 2, 'one-var': [ 2, { initialized: 'never' } ], 'operator-linebreak': [ 2, 'after', { overrides: { '?
在需要权限控制的页面,往往存在根据用户来显示菜单的情况,单独根据用户类型判断显然不是很好,如果后面用户类型发生变化,项目修改维护可能就会比较麻烦,所以比较好的做法是根据后端返回的菜单动态生成页面路由,以达到完全权限控制的目的,并且若权限发生变化,仅需该配置数据即可
1.创建项目 首先用vue-cli3创建好项目
2.新建文件 创建好项目后,新建我们需要的文件。结构如图
在这里插入图片描述
下载相关依赖包 :element-ui(菜单样式用) 和 axios(获取菜单用)
npm i element-ui axios --save 3.到main.js中 import Vue from 'vue' import App from './App.vue' import router from './router' import elementUi from 'element-ui' import 'element-ui/lib/theme-chalk/index.css' Vue.use(elementUi) Vue.config.productionTip = false new Vue({ router, render: h => h(App) }).$mount('#app') 4.先把菜单组件写好,到menu.vue中 这里使用element-ui的el-menu组件
<template> <div class="menulist-inner"> <el-menu default-active="/project" :default-openeds="openedMenu" background-color="rgba(44,55,71,1)" text-color="#A7BAC6" active-text-color="#FFFFFF" @select="select" unique-opened @open="open"> <el-submenu :index="menu.path" v-for="(menu,index) in menus" :key="index"> <template #title> <div class="
Hello,大家好,我是Sunday。
今天咱们来看一下新的 web 框架 Hono。
什么是 Hono Hono-[炎] 是一个小型、简单而极快的 Edges Web 框架。它适用于各种 JavaScript 运行环境,包括 Cloudflare Workers、Fastly Compute、Deno、Bun、Vercel、Lagon、AWS Lambda、Lambda@Edge 和 Node.js。
相对于 itty-router、sunder、worktop 等其他框架,Hono 突出的特点在于其速度,但这并不是它唯一的亮点。可以总结为以下几个关键点:
超快速度:借助路由 RegExpRouter,它的速度非常快,无需线性循环。轻量级:hono/tiny 预设 preset 小于 12kB,零依赖,仅使用 Web 标准 API。多平台支持:适用于多种平台,包括 Cloudflare Workers、Fastly Compute、Deno、Bun、Lagon、AWS Lambda、Lambda@Edge 和 Node.js,同一份代码适用于所有平台。内置功能:Hono 具备内置中间件、自定义中间件和第三方中间件,方便直接使用。优秀应用案例:Hono 已被广泛运用,比如: Cdnjs API Server:基于 Hono 的 Cloudflare Workers 免费开源 CDN 服务。Polyfill.io:提供浏览器 polyfill 的 CDN 服务,基于 Hono 核心服务器。Ultra:React/Deno 应用框架,内部服务器采用 Hono。Deno Benchmarks:用于基准测试的 Deno,采用基于 V8 的安全 TypeScript 运行时,其中用到了 Hono。Cloudflare Blog:部分文章托管在基于 Hono 的 Cloudflare Workers 平台。 目前,Hono 在 Github 上以 MIT 协议开源,拥有超过 8.
报错信息 status: copilot is encountering temporary issues
报错原因 大概是因为网络代理的问题,之前的旧版不存在这个问题,大概是新版增加了AI对话的原因
解决方法 将Pycharm的HTTP代理改为本机的代理,前提是本地的可以访问copilot,说白了就是本机可以访问外网。
今天更新了 Xcode15,遇到了一些问题,做下记录希望大家少走点坑。
1.iOS17 SDK 安装失败 Xcode更新完成后,打开项目一直显示 no fund iOS17 sdk,根据项目不同提示可能有区别,根据提示下载后提示安装失败,试了几次还不行,就去官网查看一下情况,苹果已经给出解决方案;
解决: 终端执行以下命令:
# sudo xcode-select -s /Applications/Xcode.app # xcodebuild -runFirstLaunch # xcrun simctl runtime add "~/Downloads/iOS_17_Simulator_Runtime.dmg" 当然网络也是一方面;
成功的提示:
D: 40037F44-7F14-4FE3-B2A7-34EA5F24AC36 iOS (17.0 - 21A328) (Ready) 出现这个之后会提示验证,验证通过重启 Xcode 即可。
2023.10.07 今天打开电脑直接提示更新14.0 Macos版本,更新成功后打开Xcode会提示下载 iOS17SDK,看来新版本苹果已经修复此问题,大家遇到此问题最好看看系统版本。 2023.10.23 今天更新Xcode15.0.1版本,又出现的同样的问题,看来此问题会长期存在,推荐大家一种简单有效的方式:
1.直接在Apple官网找到你要下载的文件,https://developer.apple.com/download/all/ 2.下载到本地,完成后
3.在终端执行命令:
# sudo xcode-select -s /Applications/Xcode.app # xcodebuild -runFirstLaunch # ""里面是文件路径最后是文件名,一定要记住文件类型要加上 # xcrun simctl runtime add "/Users/xxx/Downloads/iOS_17.2_Simulator_Runtime.dmg" 会进入验证状态,验证通过后重启Xcode即可使用;
注意 此方式可以避免很多坑,因为文件很大,很多时候5个G以上,网络很容易挂掉,xcode下载还没有断点续传,下载一断就需要重新下载,我们避开了Xcdoe的下载方式,只需要Xcode验证安装文件就行;
下载的文件名字里可能有空格,但是在终端执行命令时空格会转成下划线,最好是直接复制文件名,在终端粘贴的时候会自动转,大家千万不要在命令里空格,那样就会出现下面的问题
如果提示:(2) No such file or directory 说明路径有问题,多检查下。
PdfSharp 使用,创建PDF文档 前言关于 PdfSharp下载 PdfSharp使用PdfSharp常用命名空间和类1 创建一个简单的PDF文档2 创建一个带页脚的PDF文档2.1 创建临时数据表2.2 创建页脚2.3 完整代码 小结附录: 往期文章: 1、 c# 数据保存为PDF(一) (Spire.PDF篇) 2、c# 数据保存为PDF(二) (Apose.Pdf篇) 前言 因为项目需求需要将数据导出存为PDF文档,方便客户使用。相比于TXT ,EXCEL等格式,导出PDF时可以减少字体乱码,文体格式不一样的痛点。在前面试用了Spire.PDF和Aspose.Pdf都可以导出我想要的格式的PDF,但这两个没有开源,正版都是要收费的,只好另寻他欢罢了。之后,寻寻觅觅,终于遇见PdfSharp,相处一段时间后,那便是日久生情了,陷进去了,从此就是它啦。
关于 PdfSharp PdfSharp是一个开源免费的.NET开发包,可以生成PDF格式的文档。对于第三个特点真的特好使,深有体会,后面会有一篇博文介绍的。
PdfSharp组件主要特点有:
1.全部用C#重写设计和编写代码;
2.很容易使用对象模型来构建文档;
3. 可以生成PDF文件和显示在窗体或者打印,都使用同一个源文件;
4.可以修改、合并或者分割PDF文件;
5. 可以控制图片的透明度,嵌入字体。
下载 PdfSharp 通过VS自带的Nuget包管理器直接搜索PdfSharp并下载。路径在工具-----Nuget包管理器-----管理解决方案的NuGet程序包…
使用PdfSharp 常用命名空间和类 命名空间
using PdfSharp; using PdfSharp.Drawing; using PdfSharp.Pdf; 常用类库
类库描述PdfSharp.Pdf.PdfDocumentPDF文档PdfSharp.Pdf.PdfPagePDF 页面PdfSharp.Drawing.XGraphics画布PdfSharp.Drawing.XBrushes画刷PdfSharp.Drawing.XPen画笔PdfSharp.Drawing.XFont字体PdfSharp.Drawing.XStringFormat字符串格式PdfSharp.Drawing.XSize大小 1 创建一个简单的PDF文档 创建一个简单的HelloWorld.pdf文档。
/// <summary> /// PdfSharp 创建一个简单的PDF /// </summary> public static void CreateSinglePdf() { // 创建一个PDF文档对象 PdfDocument document = new PdfDocument(); document.
目录
一、安装Spark
(一)基础环境
(二)安装Python3版本
(三)下载安装Spark
(四)配置相关文件
二、在pyspark中运行代码
(一)pyspark命令
(二)启动pyspark 三、开发Spark独立应用程序
(一)编写程序
(二)通过spark-submit运行程序 一、安装Spark (一)基础环境 安装Spark之前需要安装Linux系统、Java环境(Java8或JDK1.8以上版本)和Hadoop环境。
可参考本专栏前面的博客:
大数据软件基础(3) —— 在VMware上安装Linux集群-CSDN博客
大数据存储技术(1)—— Hadoop简介及安装配置-CSDN博客
(二)安装Python3版本 1、查看当前环境下的Python版本
[root@bigdata zhc]# python --version Python 2.7.5 版本已经不能满足当前编程环境需求,所以要安装较高版本的Python3,但Python 2.7.5 版本不能卸载。
2、连网下载Python3
[root@bigdata zhc]# yum install -y python3 如图所示,Python3安装完成。
安装的版本为Python 3.6.8。
(三)下载安装Spark 1、Spark安装包下载地址:https://spark.apache.org/
进入下载页面后,点击主页的“Download”按钮进入下载页面,下载页面中提供了几个下载选项,主要是Spark release及Package type的选择,如下图所示。
我这里下的是Spark 2.4.0版本,没有此版本的,也可以下载Spark 3.2.4或更高版本的。
2、解压安装包spark-2.4.0-bin-without-hadoop.tgz至路径 /usr/local
[root@bigdata uploads]# tar -zxvf spark-2.4.0-bin-without-hadoop.tgz -C /usr/local 更改文件目录名:
[root@bigdata local]# mv spark-2.4.0-bin-without-hadoop/ spark (四)配置相关文件 1、配置Spark的classpath
先切换到 /usr/local/spark/conf 目录下,复制spark-env.
grid 将界面划分为二维网格,由行和列分割,从上到下,左到右编号,最左上角是(0,0),依次类推。
也可结合frame使用,形成更加复杂的界面。
语法:grid(argus……)
参数:
参数
属性
举例或备注
row
定位组件在第几行
column
定位组件在第几列
ipadx、ipady
在横向、纵向填充表格
padx、pady
组件与邻近组件或窗体的距离
rowspan
决定组件跨越几行
columnspan
决定组件跨越几列
sticky
网格内组件填充方式,
值:NSWE(上下左右)
综合示例:
综合示例: import tkinter as tk root = tk.Tk() labelusername = tk.Label(root,text='用户名:') labelusername.grid(row=0,column=0,padx=(10,0),pady=(10,0)) entryusername = tk.Entry(root) # 用户名输入框在第一行第二,三列,横向填充宽度为80,距离左右组件或边框为10,30,距离上下为10,0 entryusername.grid(row=0,column=1,columnspan=2,ipadx=80,padx=(10,30),pady=(10,0)) labelpassword = tk.Label(root,text='密 码:') labelpassword.grid(row=1,column=0,padx=(10,0),pady=(10,0)) entrypassword = tk.Entry(root) entrypassword.grid(row=1,column=1,columnspan=2,ipadx=80,padx=(10,30),pady=(10,0)) labelmail = tk.Label(root,text='邮 箱:') labelmail.grid(row=2,column=0,padx=(10,0),pady=(10,0)) entrymail = tk.Entry(root) entrymail.grid(row=2,column=1,columnspan=2,ipadx=80,padx=(10,30),pady=(10,0)) btnconfirm = tk.Button(root,text='注册') btnconfirm.grid(row=3,column=1,padx=(0,0),pady=(10,15)) btncancel = tk.Button(root,text='取消') # 取消按钮在网格内靠右 btncancel.
文章目录 @Autowired注解作用在方法上@Autowired注解作用在属性上@Autowired注解的使用和注入规则1.使用在变量域上面2.@Autowired注解使用在构造器上面 @Autowired表示一个属性是否需要进行依赖注入,可以使用在属性、普通方法上、构造方法上。注解中的required属性默认是true,如果没有对象可以注入到属性,则会报出异常;
@Autowired加在某个属性上,spring会从ioc容器中找到bean对象注入到属性上,如果找到多个该类型的Bean对象,则再根据属性的名字从多个Bean对象中确认一个;
@Autowired写在set()方法上,在spring会根据方法的参数类型从ioc容器中找到该类型的Bean对象注入到方法的行参中,并且自动反射调用该方法(被@Autowired修饰的方法一定会执行),所以一般使用在set方法中、普通方法不用;
@Autowired使用在构造方法中:根据构造方法的形参、形参名,从ioc容器中找到该类型的Bean对象,注入到构造方法的形参中,并且执行该方法;
//构造方法 @Autowired public Bean03(Bean04 bean04) { System.out.println("11111111111111"); } //属性上 @Autowired Bean04 bean04; //set方法 @Autowired public void setBean04(Bean04 bean) { this.bean04 = bean; } //普通方法 @Autowired public void commonMethod(Bean04 bean04){ System.out.println("普通方法的执行"); } @Autowired使用在构造方法上的细节
在同一个类上有多个构造方法上使用了@Autowired,默认情况下会报错;
解决方法:可以把@Autowired的属性required设置成为false,此时spring会自己选择使用哪一种构造方法;
spring在上述情况下的选择规则:
1.会优先考虑参数多的
(先ByType找到多个该类型的bean,再ByName进行注入)
2.如果多个类型的bean按照ByName无法注入,则去考虑参数少的进行注入,依次类推;
3.在参数个数相同、ByName,也可以注入的情况下,按照构造方法的书写顺序进行选择;
@Autowired注解作用在方法上 (1)该方法如果有参数,会使用autowired的方式在容器中查找是否有该参数
(2)会执行该方法
所以如果把@Autowired放在setter方法上,就等于给对象的属性赋值
@Autowired注解作用在属性上 即为在容器中创建对象时给该项属性注入值,效果同@Autowired在setter方法。
@Autowired注解的使用和注入规则 作为一个Spring开发者对@Autowired注解必定是非常了解了, 顾名思义自动装配,应该是Spring会自动将我们标记为@Autowired的元素装配好,与其猜测不如看看它的定义:
@Target({ElementType.CONSTRUCTOR, ElementType.METHOD, ElementType.PARAMETER, ElementType.FIELD, ElementType.ANNOTATION_TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface Autowired { boolean required() default true; } 很明显这个注解可以用到构造器,变量域,方法,注解类型和方法参数上。文档上这样描述:将一个构造器,变量域,setter方法,config方法标记为被Spring DI 工具自动装配。换句话说,在Spring创建bean的过程中,会为这个bean中标有@Autowired注解的构造器,变量域,方法和方法参数中自动注入我们需要的已经在Spring IOC容器里面的bean,,而无需我们手动完成,并且注入的bean都是单实例,也就是在两个bean中都依赖第三个bean,那么这两个bean中注入的第三个bean会是同一个bean(JVM中指向的地址相同)。
引言 最近朋友圈刷屏的一篇文章《我被美团会员割了韭菜》很多人都看过,针对该事件,网经社电子商务研究中心主任曹磊指出:大数据“杀熟”暴露出大数据产业发展过程中的非对称以及不透明。由此也带来的最大伦理危机—个人隐私权问题。
背景信息 近年来,大数据杀熟现象不断被爆出,2020年12月17日,一篇名为《我被美团会员割了韭菜》的文章刷屏,该文作者基于自己点外卖的经历发现,在美团上的同一家店铺,用同一个配送地址,在同样的时间点单,会员比非会员的配送费更高。文章中称,本以为开通外卖会员会省钱,但附近几乎所有外卖商户的配送费都比非会员高1元~5元。一时间,买了美团会员的打工人觉得感情受到了伤害,在微博、知乎、黑猫投诉、朋友圈里发出了声泪俱下的“控诉”:“价格歧视”“割会员韭菜”“吃相难看”…网友们仿佛上足了弹药,齐齐瞄准美团打去。同时,#美团被爆杀熟外卖会员#迅速登上当日微博热搜榜第五名,截至发稿,该话题下已有5.7亿阅读,形成4.4万讨论。
1. 美团喜新厌旧? 在此次事件中,从法律角度其实并不好界定美团存在杀熟现象。不过,因为网友将#美团杀熟会员#推向了风口浪尖,而此事又恰好置于平台经济反垄断的讨论热度当中,同时,美团近年来力推会员服务,帮助其餐饮订单量实现节节攀升,此事引起了人们的争相讨论。美团外卖用户薇薇发现,“同一家店,同一个商品,昨天22元,今天变30多元”,商家给她发来了截图,说商家那边显示还是20多元。薇薇推断,商家设定的满减在不同用户手里都是不一样的,并不是所有用户都显示商家所设定的满减优惠价格。
此外,会员续费也体现出较大的差异。有网友称,“半年不用美团,会员月费只收3元,连续用美团会员,只给优惠3元”。也有用户指出,一个办公室里,同事之间饿了么的百亿补贴力度也不尽相同,有用户反映,下单越多,补贴越少,但是停两周之后,补贴力度又会变大。网友们将这种“差别对待”称为“杀熟”,具体表现是平台“对新用户比对老用户更好”。这里的“新用户”不仅仅是指新注册的用户,更多的是指停止使用一段时间又回归的用户。发现了这一“秘密”的网友,为了避免“被涨价”,总结出了应对攻略——在A平台点两三次后,就跳到B平台,在不用A平台的期间,A平台会推优惠券,这时候再跳回到A平台。为了一直享受到低价续费,他们也不会在一个平台连着续费,而是会在A平台的会员到期后,“冷落”A平台一段时间,选择B平台,等“回归”A平台时又能享受到低价开会员的“关爱”。
美团的声明中称,在知晓该问题后,美团外卖联系了上述发文的用户,并赴现场调查。但该用户在12月17日向自媒体《财经故事荟》表示,这份声明没有解答他的疑问。定位缓存仅能勉强解释12月9日的配送费差异,但实际上,他在12月11日又试着点了一次,依然存在配送费差额,他当场向美团工作人员提出了疑问,但美团方面称,绝对不会针对会员进行大数据杀熟。
2、美团到底杀熟了没有? 上海金融与法律研究院研究员刘远举向深燃表示,价格歧视是一个中性的经济学概念。市场中总会存在价格敏感人群和价格不敏感人群,平台通过算法将用户加以细分,通过给新用户更多的优惠,让一部分价格敏感的人群也能享受到服务,放到整个市场来看,能扩大整个社会的交易规模,具有一定的公平性。要注意的是,在2021年2月7日公布的《关于平台经济领域的反垄断指南》第十七条,特别提到了“差别待遇”。指南认为,具有市场支配地位的平台经济领域经营者,可能滥用市场支配地位,无正当理由对交易条件相同的交易相对人实施差别待遇,排除、限制市场竞争。不过指南中提到,分析是否构成差别待遇,需要考虑以下因素:基于大数据和算法,根据交易相对人的支付能力、消费偏好、使用习惯等,交易价格存在差异,新老交易人存在交易价格差异等。而针对新用户的首次交易开展的优惠活动,属于正当地实施差别待遇的理由。换言之,反垄断指南对于平台存在新老用户交易价格差异具有一定的容忍度。
“你可以从商业道德上谴责这种行为,但从商业逻辑上来讲其实是没问题的”,某外卖平台前员工任风从外卖平台的运营逻辑对深燃分析称,平台之前低价推广是有成本的,当这个平台市场份额较高、觉得用户习惯差不多养成了的时候,会重新拿回定价权,弥补之前低价推广的成本。“多快好省,又便宜、产品和服务又好是很难兼容的。”
“在提及新零售的千人千面时大家都那么憧憬,怎么真正落实的时候又开始排斥?”任风说,从他的视角来看,外卖平台根据不同用户的消费能力、习惯,推送不同的优惠券,本身是大数据分析能力的体现。从全盘的服务能力来看,渐渐减少对固有会员的补贴,用省下来的钱既能拉来更多的新用户、做大规模,也能让平台有能力做一些普惠性的服务提升,比如优化推荐界面等,这是对新老会员都有好处的事情。
但是,这种对老用户减少补贴、对新用户加大补贴的行为,很容易让大众觉得,平台是前期讨好用户,一旦用户成为忠实用户(购买会员),平台就开始“收割”。
一、大数据杀熟 1、什么是大数据杀熟 大数据杀熟是指同样的商品或服务,老客户看到的价格反而比新客户要贵出许多的现象。经营者运用大数据收集消费者的信息,分析其消费偏好、消费习惯、收入水平等信息,将同一商品或服务以不同的价格卖给不同的消费者从而获取更多消费者剩余的行为。
2、大数据“杀熟”的计算方法 1.1用户的数字画像 通过对用户基础数据、行为数据等进行分析之后,能够为每一位用户勾勒出一个大致完整的数字画像,从性别、年龄、教育程度等等各个方面方便机器认识你。
2.2行为数据分析 通过对所有用户的基础数据进行分析,可以得出更深层次的用户信息,比如你的价格敏感度。一般的商城平台在使用推荐算法处理问题的时候,并不是简单地依据消费者购买的商品数量和价格确定,而是会看他可能购买的商品在所有三级品类中的价格排序,比如,那些被他加入购物车的商品有着怎样的排名。另外,更深层次的算法还会额外关注物品从被加入购物车到最终购买的时间延长程度,甚至包括他以往是否点击、收藏或使用过优惠券等信息。
获取用户的信息可以通过多种渠道,最常见的是在APP上埋点采集、通过一些广告联盟来共享用户的浏览器记录、Cookies等信息,当然还会有专人倒卖用户基本数据和行为数据,甚至在用户电脑上植入木马病毒,以后台运行的方式来获取用户的行为数据。这就导致不论是在搜索引擎、淘宝还是在聊天软件上的记录,都有可能被获取到。
3、大数据杀熟的表现形式 “杀熟”的形式多样,主要有三种表现:一是根据用户使用的设备不同而差别定价,比如针对苹果用户与安卓用户制定的价格不同;二是根据用户消费时所处的场所不同而差别定价,比如对距离商场远的用户制定的价格更高;三是根据用户消费频率的不同而差别定价,一般来说,消费频率越高的用户对价格承受能力也越强。与其称这种现象为“杀熟”,不如说是“杀对价格不敏感的人”:一罐可乐,在超市只卖2元,在五星级酒店能卖30元。这不能叫价格歧视,而是因为人们能住得起五星级酒店,那么就是要被“杀”,这个理论套用在“大数据杀熟”上却并不恰当。一个关键问题是,一罐可乐的正常价格是透明的,所以在五星级酒店的溢价是公开的。但“大数据杀熟”却处于隐蔽状态,多数消费者是在不知情的情况下“被溢价”了。此外,将老顾客等同于“对价格不敏感的人”,也有偷换概念之嫌。
二、大数据带来的伦理问题 在现今的社会,大数据的应用越来越彰显他的优势,它占领的领域也越来越大,电子商务、O2O、物流配送等,各种利用大数据进行发展的领域正在协助企业不断地发展新业务,创新运营模式。有了大数据这个概念,对于消费者行为的判断,产品销售量的预测,精确的营销范围以及存货的补给已经得到全面的改善与优化。大数据对于未来企业发展的重要性无需多言,如今各大企业也通过各种手段来加大数据的丰富度,以夺得未来发展先机。但是,任何事物都是有两面性的,大数据在为我们的生活提供便捷的同时,其中潜在的伦理问题同样值得我们每个的思考!
1、数据采集中的伦理问题 以往的数据采集皆由人工进行,被采集人一般都会被告知,而如今的大数据时代,数据采集都被智能设备自动采集,而且被采集对象往往并不知情。例如我们每天上网所产生的各种浏览记录,在网上聊天时候的聊天记录,我们手机的通话和短信记录,我们在公共场合出入的监控记录,如此等等,都在我们不知情的情况下被记录和储存下来。
2、数据使用中的隐私问题 在大数据时代,各种数据都被永久性地保存着,这些数据汇集在一起形成大数据,这些大数据可以被反反复复永久使用。从单个数据来说,经过模糊化或匿名化,隐私信息可以被屏蔽,但将各种信息汇聚在一起而形成的大数据,可以将原来没有联系的小数据联系起来。大数据挖掘可以将各种信息片段进行交叉、重组、关联等操作,这样就可能将原来模糊和匿名的信息重新挖掘出来,所以对大数据技术来说,传统的模糊化、匿名化这两种保护隐私的方式基本上失效。
3、数据取舍中的伦理问题 在小数据时代,遗忘是常态。但是,由于网络技术和云技术的发展,信息一旦被上传网络,则立即被永久性地保存下来,就像白纸染上墨迹一样,我们很难彻底清除。于是,在大数据时代,记忆成了新常态,而遗忘则成了例外。有些人做过某种错事,大数据将此事永远存储下来,时不时又被人翻起而成为一个永远的伤疤。这种永久存储的技术让不少人失去了重新做人的机会,给当事人带来永远的灾难。因此,当事人是否有权要求删除自己的相关信息,在大数据时代成为了一大问题。
三、结论与启示 1、结论 大数据的判断过于冰冷,渥太华大学教授科尔说过,大数据系统只是算法,它并不懂得法律,如果它根据数据判定这些人不适合申请贷款或工作时,就会在法理上违反无罪推定原则。而且数据往往比人们想象的更易被操控。据Target前经理表示,公司管理部门曾尝试通过收集分析顾客问卷打分表以期提升顾客满意度,然而此举却造成员工伪造客户信息以夸大自己的工作表现。
可以看到,随着大数据来临,企业和政府部门甚至个人都可以掌握大量数据,但随之而来的,可能是企业为了实行精准营销,私自分析顾客的私人信息,甚至骚扰顾客,给顾客带来不便与烦恼;也可能给了网络犯罪者一个可趁之机,通过网络攻击窃取企业和他人信息,转而向不法组织兜售。由于法律规则的相对滞后,以及企业对获得大数据的急迫性,采用非法手段获得大数据的行为几乎从未停止。如通过短信、爬虫等等灰色手段获得第三方数据,已经形成一整套完整的产业链。
2、启示 大数据技术是信息技术的延续,信息社会刚刚提出并兴起之时,人们也曾担心害怕,一如当下的大数据革命。任何技术都是一把双刃剑,这把剑是利是害,完全取决于持剑之人。大数据技术只是放大了人类原本就存在的或明或暗的人类本性,所以对大数据的规制其实还是对我们人本身的规制。
2.1用技术解决技术 有杀熟的大数据技术,也就会出现反杀熟的大数据技术。可能会出现技术类的监控平台,通过模拟不同的设备、账户、行为等方式,去判断平台是否存在大数据杀熟,就像安全软件公布漏洞一样,对发现的情况进行公布,给平台压力;可能会出现购物助理这样的应用,就像过去的比价软件一样,不只是单纯地比较价格,而是在用户被杀熟时提醒用户;甚至可能会出现反杀熟应用,帮助用户去模拟各种行为,不被杀熟。
2.2完善法律法规来监管平台的大数据杀熟问题 《电商法》已经明确,电子商务经营者根据消费者的兴趣爱好、消费习惯等特征向其提供商品或者服务的搜索结果的,应当同时向该消费者提供不针对其个人特征的选项,尊重和平等保护消费者合法权益,这个要求实际上就是要预防可能出现的“大数据杀熟”行为,相信未来监管会更加完善、明确和可执行,覆盖到人们互联网生活的方方面面。
2.3平台需要进行商业模式创新
线下商业世界,存在杀熟现象的往往是不够标准化、同时缺少服务的场景,比如需要砍价的电脑城,消费者去苹果或者华为体验店,抑或去高端商场,是从来不用担心被杀熟的,因为这些场景中不需要降价,价格很透明,服务很好。电商、旅游、生活服务、娱乐等存在交易场景的平台,应该要寻求更加可持续的商业模式,大数据杀熟赚的是小钱,只有给消费者提供最好的体验,甚至消费者愿意额外付费的优质服务体验,才能走得长远。
现在很多平台推行的会员模式,将是未来的趋势,可以一定程度避免大数据杀熟:消费者花钱购买会员本质就是要更好的服务、更低的成本、个性的体验,平台从会员身上赚取了额外的钱,牢牢黏住了用户粘性,不需要再对他们进行大数据杀熟,如果这样做会员就会流失,得不偿失。会员模式之外,具备交易属性的平台都应该探寻更加持续的盈利模式,通过大数据杀熟赚快钱无异于杀鸡取卵。
大数据杀熟的本质是一种背信行为。用户和平台之间的忠诚度是相互的,平台无视品牌形象和长远利益,结果必将是透支信用、失去用户。