Linux编译安装Python3.9——以CentOS7为例

引言

在CentOS中使用yum安装python3时,总是安装不到需要的版本,在一些特定的环境下又需要特定版本的Python。然而网上的各种教程又良莠不齐(在此特别diss某某DN),故本篇将详细整理一遍在CentOS7上编译安装Python3的过程。

安装过程

安装epel-release

什么是EPEL?EPEL是由 Fedora 社区打造,为 RHEL 及衍生发行版如 CentOS、Scientific Linux 等提供高质量软件包的项目。装上了 EPEL之后,就相当于添加了一个第三方源。 出处: http://www.uyts.com/archives/249 yum -y install epel-release更新系统

yum -y update

重启

reboot

安装开发者工具

yum groupinstall "Development Tools" -y
yum install openssl-devel libffi-devel bzip2-devel -y

确认gcc可用

gcc --version

如果没有wget,需要安装wget

yum install wget -y

下载Python3.9

如果下载速度慢可以自行寻找国内镜像(https://mirrors.huaweicloud.com/python/3.9.10/Python-3.9.10.tgz)替换或者####

wget https://www.python.org/ftp/python/3.9.10/Python-3.9.10.tgz

解压

tar -xvf Python-3.9.10.tgz

进入文件夹

cd ./Python-3.9.10

配置Python安装

./configure --enable-optimizations

编译安装

make altinstall与make install的区别,altinstall skips creating the python link and the manual pages links。 altinstall跳过创建python链接和手册页链接的操作。

如果使用make install,在系统中将会有两个不同版本的Python在/usr/bin/目录中,这将会导致很多问题。

make altinstall

检查是否成功安装

$ python3.9 --version
Python 3.9.10

python3.9对应的pip也会安装

$ pip3.9 --version
pip 21.2.4 from /usr/local/lib/python3.9/site-packages/pip (python 3.9)

升级pip至最新版本

python3.9 -m pip install --upgrade pip

至此常规的安装过程就结束了,enjoy it!

安装虚拟环境

virtualenv是python中一个常用的虚拟环境管理工具

使用pip安装它

pip3.9 install virtualenv

创建一个文件夹用于管理虚拟环境,并进入文件夹

mkdir ~/venv/
cd ~/venv/

创建虚拟环境(其中web是一个自定义的名字)

virtualenv web

激活虚拟环境

source ./web/bin/activate

这时我们可以看到在命令行的前缀多了一个(web),也就是虚拟环境的名称

现在输入python和pip的话就是默认使用的虚拟环境了。

使用完成后退出虚拟环境(在任何目录执行都可以)

deactivate

找不到sqlite

原因

安装python的时候没有找到sqlite3.so的库。

解决方法

先去官网下载源码包

wget https://www.sqlite.org/2021/sqlite-autoconf-3350500.tar.gz

解压

tar -zxvf sqlite-autoconf-3350500.tar.gz

编译安装

./configure --prefix=/usr/local/
make && make install

重命名并建立软链接

mv /usr/bin/sqlite3 /usr/bin/sqlite3.bak
ln -s /usr/local/bin/sqlite3 /usr/bin/sqlite3

配置环境变量

vi /etc/profile

到最下面一行添加

export LD_LIBRARY_PATH="/usr/local/lib"

然后激活环境变量

source /etc/profile

检查sqlite3版本

sqlite3 --version

到这为止,我们还是不能在python中直接使用sqlite3的,还需要到python的源代码文件夹里重新make altinstall一下

然后就可以愉快地使用Django啦!

本文转载于网络 如有侵权请联系删除

相关文章

  • phpstrom开发工具快捷键总结

    phpstrom快捷键总结 常用快捷键 Esc键编辑器(从工具窗口)F2(Shift+F2)下/上高亮错误或警告快速定位F3向下查找关键字出现位置F4查找变量来源F5复制文件/文件夹F6移动F11切换书签F12返回到以前的工具窗口 注意:部分快捷键,必须在没有更改快捷键的情况下才可以使用查询快捷键 CTRL+N查找类CTRL+SHIFT+N查找文件,打开工程中的文件(类似于eclipse中的ctrl+shift+R),目的是打开当前工程下任意目录的文件CTRL+SHIFT+ALT+N查找类中的方法或变量(JS)CIRL+B找变量的来源,跳到变量申明处CTRL+ALT+B找所有的子类CTRL+SHIFT+B找变量的类CTRL+G定位行,跳转行CTRL+F在当前窗口查找文本CTRL+SHIFT+F在指定路径查找文本CTRL+R当前窗口替换文本CTRL+SHIFT+R在指定路径替换文本ALT+SHIFT+C查找修改的文件,最近变更历史CTRL+E最近打开的文件F3查找下一个SHIFT+F3查找上一个F4查找变量来源CTRL+ALT+F7选中的字符查找工程出现的地方ALT+F7直接查询选中的字

  • python数据分析之清洗数据:缺失值处理

    在使用python进行数据分析时,如果数据集中出现缺失值、空值、异常值,那么数据清洗就是尤为重要的一步,本文将重点讲解如何利用python处理缺失值创建数据为了方便理解,我们先创建一组带有缺失值的简单数据用于讲解 检查缺失值对于现在的数据量,我们完全可以直接查看整个数据来检查是否存在缺失值看到有两列含有缺失值。当然如果数据集比较大的话,就需要使用data.isnull().sum()来检查缺失值或者使用data.info()来检查所有数据 可以看到一共有7行,但是有两列的非空值都不到7行缺失值处理一种常见的办法是用单词或符号填充缺少的值。例如,将丢失的数据替换为'*'。我们可以使用.fillna('*')将所有缺失值替换为*当然也可以针对某一列的缺失值进行填充,比如选择score列进行填充还有一种办法是将其替换为平均值。如果是数字,则可以包括均值;如果是字符串,则可以选择众数。比如可以将score列的缺失值填充为该列的均值当然也可以使用插值函数来填写数字的缺失值。比如取数据框中缺失值上下的数字平均值。或者data.fillna(axis=1,me

  • 记腾讯20周年司庆祝福魔术项目的设计经历

    这次腾讯20周年庆生活动预热很久,不甘做一个旁观者,我也尽我所长有所参与。在庆生当天总办linktime开场视频和微视庆生宣传活动中的楼梯间循环展示,我完成了其中魔术视频的拍摄,也算是留下一份独特的纪念吧。虽然感觉工作之余做这些设计和表演有些累人,但是心中所思所感的表达和能力的释放还是让我心情愉悦和畅快。这是一次典型而又难得的魔术与文化结合的设计体验,在这样大的平台参与一件小小的事情是多么宝贵的经历,我愿意像称呼母校一样称呼其为母公司,并用心去为她为自己做一些事情。 好了好了,回到魔术,从魔术的角度,我来复盘一下需求的理解和通过魔术方式来满足的全过程。两个项目要求的主题是“腾讯20周年”,“生日快乐”,“全新出发”等这样类似的主题的展现,主题展现当然要用定制扑克牌来完成,在这个领域设计起效果来毕竟更有素材可用和更多积累可以信手拈来。扑克牌中4张变化的牌组非常多,可以考虑4+1或者4+4的方案来表达以上几个主题。与需求方商量后,定下了微视用“腾讯20周年”,“生日快乐”这个4+4的方案,而linktime用“生日快乐”,“全新出发”,且“全新出发”,印在一张卡片上,用4+1方案实现。微视

  • Flutter AppBar 去掉底部阴影

    屏幕快照2019-09-1914.26.39.pngelevation:0加上这个属性就可以去掉底部的阴影@override Widgetbuild(BuildContextcontext){ returnScaffold( appBar:AppBar( title:Text('我的'), backgroundColor:Colors.deepOrange, elevation:0,//去掉Appbar底部阴影 ), body:Column( children:<Widget>[ Row( children:<Widget>[MineHead()], ) ], )); }复制屏幕快照2019-09-1914.28.01.png

  • 前端性能优化之白屏时间

    定场诗 曲木为直终必弯,养狼当犬看家难; 墨染鸬鹚黑不久,粉刷乌鸦白不坚。 蜜饯黄莲终需苦,强摘瓜果不能甜; 好事总得善人做,哪有凡人做神仙。 复制前言该篇文章会为您分享在前端性能优化中非常重要的一环-白屏时间,将从白屏时间的概念、重要性以及白屏的过程一一进行阐述,同时提供性能优化的策略与实践。一、概念白屏时间:即用户点击一个链接或打开浏览器输入URL地址后,从屏幕空白到显示第一个画面的时间。白屏时间的长短将直接影响用户对该网站的第一印象。二、白屏时间的重要性当用户点开一个链接或者是直接在浏览器中输入URL开始进行访问时,就开始等待页面的展示。页面渲染的时间越短,用户等待的时间就越短,用户感知到页面的速度就越快。这样可以极大的提升用户的体验,减少用户的跳出,提升页面的留存率。打开一个页面就像你的女票召唤你一样,你出现的越迅速,女票肯定会愈加欣喜!反之,你千呼万唤始出来,那么你的女票很可能又要抛弃你了(为什么要对你说又呢?...)三、白屏是一个怎样的过程呢?让我们一起来揭秘:从打开一个页面,到页面的画面展示经历了怎样的过程!1.DNSLookupDNSLookup即浏览器从DNS服务器中

  • Python日期字符串比较 转

    需要用python的脚本来快速检测一个文件内的二个时间日期字符串的大小,其实实现很简单,首先一些基础的日期格式化知识如下 复制代码你可以试下下面的方式来取得当前时间的时间戳:importtimeprinttime.time()输出的结果是:1357723206.31但是这样是一连串的数字不是我们想要的结果,我们可以利用time模块的格式化时间的方法来处理:time.localtime(time.time())用time.localtime()方法,作用是格式化时间戳为本地的时间。输出的结果是:time.struct_time(tm_year=2010,tm_mon=7,tm_mday=19,tm_hour=22,tm_min=33,tm_sec=39,tm_wday=0,tm_yday=200,tm_isdst=0)现在看起来更有希望格式成我们想要的时间了。time.strftime('%Y-%m-%d',time.localtime(time.time()))最后用time.strftime()方法,把刚才的一大串信息格式化成我们想要的东西,现在的结果是:2013

  • 卷及网络的弱点,有人想用胶囊网络给解决掉

    什么是胶囊网络?胶囊网络是GeoffreyHinton提出的一种新型神经网络结构,为了解决卷积神经网络(ConvNets)的一些缺点,提出了胶囊网络。话不多说,来看看这个听起来就像「一颗一颗药摆在你面前」的网络是怎么样的。卷积网络有平移不变性平移不变性是什么呢?假设我们有一个可以分类猫的模型,你给这个模型看一张猫的图片,它会预测出这是一只猫。然后你把猫向左移一下,再展示给这个模型看,它依然会认为这是一只猫,而不会预测出其他的信息。这样看来好像不错,意味着无论这只猫放在图片的哪个位置,我们的模型都能识别出这是一只猫,好像它表现得还不错。但是有的时候我们需要的是平移同变性。也就是当我们给这个模型展示一张移动到右边的猫的图片时,模型预测的是一只移动到右边的猫;展示一张移动到左边的猫的图片时,模型预测的是一只移动到左边的猫。为什么要平移同变性呢?一般我们给一个模型输入一张人脸的图片的时候,五官都是在正常的位置的,眼睛在眼睛的位置上,鼻子在鼻子的位置上。但是我们如果把眼睛放在额头上,耳朵放在下巴那,一般的卷积神经网络还是会认为这是一张脸,因为它有平移不变性,也就是它只认为一张有鼻子有眼睛有嘴巴等

  • 小程序开发者调试工具使用说明

    微信开发者工作是微信官方提供的针对微信小程序的开发工具,集中了开发,调试,预览,上传等功能。微信团队发布了微信小程序开发者工具、微信小程序开发文档和微信小程序设计指南,全新的开发者工具,集成了开发调试、代码编辑及程序发布等功能,帮助开发者简单和高效地开发微信小程序。启动工具时,开发者需要使用已在后台绑定成功的微信号扫描二维码登录,后续所有的操作都会基于这个微信的帐号。调试工具分为9大功能模块:Console、Sources、Network、Security,Storage,Appdata、Wxml,Sensor以及Trace。开发者工具Console的功能:开发者可以在此输出和调试代码,代码报错和警告会在此处显示。输出调试定位报错Sources的功能:用于显示当前项目的脚本文件,同浏览器开发不同,微信小程序框架会对脚本文件进行编译的工作,所以在Sourcespanel中开发者看到的文件是经过处理之后的脚本文件,开发者的代码都会被包裹在define函数中,并且对于Page代码,在尾部会有require的主动调用。使用Network的使用:观察和显示request和socket的请求情况(

  • TokuDB的特点验证

    随着数据量越来越大,越来越频繁的遇到需要进行结构拆分的情况,每一次拆分都耗时很久,并且需要多方配合,非常的不想搞这个事情。于是在@zolker的提醒下想到了13年开源tokuDB,来解决我们迫在眉睫的容量问题。  坊间流传tokuDB有如下几个看着令人垂涎欲滴的特点,正好符合我们实际环境的需求,故针对每个特点进行了针对性测试:  1、高压缩比,官方宣称可以达到1:12。  2、高insert性能,官方称至少比innodb高9倍。  3、可以在线添加索引和字段,速度快。(前提:由于是为了解决线上的实际问题,故本次验证并不会按照严格的测试规范进行,所得数据也不是tokuDB的极限数据,只是在实际业务上的表现)高压缩比:  原有数据库容量1126G,使用tokudb之后,压缩到76G,压缩比达到惊人的14倍。高insert性能:  简单比较追同步的性能,同时在innodb和tokudb上阻塞同步3分钟,然后观察追同步的性能(不代表最大性能,因为会受限于mysql单线程追同步的瓶颈。io不会被充分利用到)  基本环境为SAS服务器,12*300G15000转SAS盘,BPsize相同。  可以

  • 浙江工业大学校赛 小M和天平

    小M和天平TimeLimit:2000/1000MS(Java/Others)    MemoryLimit:32768/32768K(Java/Others)TotalSubmission(s):568    AcceptedSubmission(s):108ProblemDescription小M想知道某件物品的重量,但是摆在他面前的只有一个天平(没有游标)和一堆石子,石子可以放左边也可以放右边。他现在知道每个石子的重量。问能不能根据上述条件,能不能测出所问的重量。Input第一行T(1≤T≤100),表示T组数据。 接下来T组数据: 接下来第一行一个数N,表示石子个数。(1≤N≤100) 接下来第二行N个数,表示石子的重量。(1≤w_i≤100) 接下来第三行一个数M,表示询问个数。(1≤M≤100) 接下来M行每行一个数k,表示一个询问。 Output对于每组数据,输出"YES"或者"NO"SampleInput1 2 14 3 2 4 5复制SampleOutputNO YES YES动态规划#include<iostream&g

  • SQL与MongoDB的对应关系图表

    关系数据库有一套标准的SQL语句来操作数据库,MongoDB是文档型数据库,概念与操作方式与SQL都不相同,下面的几张表全面的表达了SQL与MongoDB的对应关系,便于快速熟悉MongoDB的操作思路概念名称的对应SQL语句与MongoDB操作对比假设SQL数据库中有一个users表,MongoDB中有一个users集合,包含了user文档,例如{_id:ObjectId("509a8fb2f3f4948bd2f983a0"),user_id:"abc123",age:55,status:'A'}Create/Alter创建和修改表Insert插入数据Select查询数据EXPLAIN语句分析Update更新数据Delete删除数据内容整理自MongoDB官方文档,参考内容https://docs.mongodb.com/manual/reference/sql-comparison/

  • 用Python从零开始构造决策树

    專欄❈作者:weapon,不会写程序的浴室麦霸不是好的神经科医生❈起步本章介绍如何不利用第三方库,仅用python自带的标准库来构造一个决策树。熵的计算公式:对应的python代码:条件熵的计算根据计算方法:对应的python代码:其中参数future_list是某一特征向量组成的列表,result_list是label列表。信息增益根据信息增益的计算方法:对应的python代码:定义决策树的节点作为树的节点,要有左子树和右子树是必不可少的,除此之外还需要其他信息:树的节点会有两种状态,叶子节点中results属性将保持当前的分类结果。非叶子节点中,col保存着该节点计算的特征索引,根据这个索引来创建左右子树。has_calc_index属性表示在到达此节点时,已经计算过的特征索引。特征索引的数据集上表现是列的形式,如数据集(不包含结果集):有三条数据,三个特征,那么第一个特征对应了第一列[1,0,0],它的索引是0。递归的停止条件本章将构造出完整的决策树,所以递归的停止条件是所有待分析的训练集都属于同一类:从训练集中筛选最佳的特征因此计算节点就是调用best_index=choose

  • 将图库的图片剪切并保存

    最近有些用户反映保存图片之后在系统图库找不到保存的图片,遂决定彻底查看并解决下。Adnroid中保存图片的方法可能有如下两种:第一种是自己写方法,如下代码:publicstaticFilesaveImage(Bitmapbmp){ FileappDir=newFile(Environment.getExternalStorageDirectory(),"Boohee"); if(!appDir.exists()){ appDir.mkdir(); } StringfileName=System.currentTimeMillis()+".jpg"; Filefile=newFile(appDir,fileName); try{ FileOutputStreamfos=newFileOutputStream(file); bmp.compress(CompressFormat.JPEG,100,fos); fos.flush(); fos.close(); }catch(FileNotFoundExceptione){ e.printStackTr

  • 注解和反射

    注解和反射在Java的学习中,我们会对代码附有条条框框的要求,注解为我们提供了这么一条渠道在Java的学习中,我们有时要突破Java本身的规矩,反射的暴力解法也为我们提供了其他的可能性注解入门首先我们先讲解以下注解是什么?注解(Annotation)是JDK5开始引用的新技术Annotation的作用:不是程序本身,而是对程序做出解释但可以被程序所读取,不同于解释Annotation格式:以“@注解名()”在代码中存在,可以添加参数值Annotation的使用场景在package,class,method,field上都可以使用,相当于加入了额外的辅助信息下面给出代码示例://什么是注解 publicclassDemo1extendsObject{ //@Override这个就是注解,帮助程序注释,当下列程序出现错误时,它会有检错作用 @Override publicStringtoString(){ returnsuper.toString(); } }复制内置注解下面我们介绍三种内置注解:@Override:定义在java.lang.Override中,此注释只适用于修辞手法,表

  • 超精准!AI 结合邮件内容与附件的意图理解与分类!⛵

    借助AI进行邮件正文与附件内容的识别,可以极大提高工作效率。本文讲解如何设计一个AI系统,完成邮件内容意图检测:架构初揽、邮件正文&附件的理解与处理、搭建多数据源混合网络、训练&评估。?场景&背景有一些场景下,如果我们能借助于AI自动做一些内容和附件等识别,可以极大提高效率,例如以下这些场景:保险公司的客户索赔管理。电信和公用事业企业客户投诉处理。银行处理各种与抵押贷款相关的请求。旅游行业公司的预订相关电子邮件。如果我们希望尽量智能与自动化地进行电子邮件处理,我们需要完成以下任务:电子邮件分流。我们希望智能理解邮件,并将其转到相应的专门业务部门进行处理。在AI的视角我们可以通过电子邮件的意图分类来尝试解决这个问题。信息提取。根据确定的意图,提取一些信息给到下游流程,例如在CRM系统中记录客户案例进行跟踪。在本篇文章中,ShowMeAI将专注于意图检测部分,我们将一起看一看如何设计一个AI系统来解决这个任务。?场景1假设一家保险公司客户,想申请理赔与报销。这个场景下他会填写保险报销表,并将其连同药物收据和银行ID文件附在电子邮件中。可能的一个电子邮件可能长这样:?

  • Azure 实践(2)- Azure Devops添加代理池(Ubuntu20.10系统)

    前言,上篇文章记录AzureDevopsserver安装过程,本篇介绍添加代理池操作 1、关于代理和代理池 参考官网:https://docs.microsoft.com/zh-cn/azure/devops/pipelines/agents/agents?view=azure-devops&tabs=browser 若要使用AzurePipelines生成代码或部署软件,需要至少一个代理。添加更多代码和人员后,最终需要更多代码。 当管道运行时,系统会开始一个或多个作业。代理是一种使用已安装代理软件的计算基础结构,此软件一次运行一个作业。 作业可以直接在代理的主机或容器中运行。 2、准备一台linux虚拟机(Ubuntu20.10),其他系统windows、macos也可 输入命令,查看内核版本:arch 3、进入Azuredevops,添加新的代理池 点击-集合设置-代理池,进入默认的Default池 点击-新建代理,选择linux 下载代理,拖入到ubuntu虚拟机中,输入命令解压 tarzxvfvsts-agent-linux-x64-2.181.2.

  • 吃透线程池源码

    线程池源码解析 线程池的概念 系统启动一个新线程的成本是比较高的,因为它涉及与操作系统的交互。使用线程池可以很好的提高性能,尤其是程序中需要创建大量生存期很短暂的线程。 使用线程池的优势 降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁的开销。 提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。 提高线程的可管理性。线程是稀缺资源,如果无限制地创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一分配、调优和监控。 线程池的流程 如果当前woker数量小于corePoolSize,则新建一个woker并把当前任务分配给该woker线程,成功则返回。 如果第一步失败,则尝试把任务放入阻塞队列,如果成功则返回。 如果第二步失败,则判断如果当前woker数量小于maximumPoolSize,则新建一个woker并把当前任务分配给该woker线程,成功则返回。 如果第三步失败,则调用拒绝策略处理该任务。 核心源码实现 线程池的本质就是使用了一个线程安全的工作队列连接工作者线程和客户端线程,客户端线程将任务放入工作队列后便返回,而工作者

  • 在nuget上发布自己的程序集教程

    在nuget上发布自己的程序集教程  前期准备 [1]注册nuget官网账号;注册地址:https://www.nuget.org/ [2]下载Nuget.exe文件;下载地址:https://www.nuget.org/downloads [3]将Nuget.exe所在路径配置到系统环境变量,控制面板\所有控制面板项\系统,单击高级系统设置>>>>环境变量>>>>选中Path,新增Nuget.exe所在路径。 前期准备已经完全,开始上正货。老规矩,图文结合; 制作后缀为.nupkg的文件(两种方法) [1]基于VS2017直接生成.nupkg文件具体步骤如下 1)新建一个.NerStandard类库;如下图所示: 2)项目属性设置   3)右键发布即可生成.nupkg文件 [2]使用普通类库项目生成.nupkg文件 1)新建一个普通类库项目 2)在类库所在项目目录下生成包描述文件(nugetspec) <?xmlversion="1.0"?> <package> <meta

  • 动手学习TCP:总结和索引

    TCP是一个十分复杂的协议,通过前面几篇文章只涉及了TCP协议中一些基本的概念。 虽然说都是一些TCP最基本的概念,但是试验过程中一直在踩坑,例如:TCPflag设置错误,seq、ack号没有计算正确,TCP状态变迁错误等等。 通过Pcap.Net真正实验一下才发现了很多TCP协议中要注意的细节,例如:Ack、Seq号的计算,EthernetLayer、IpV4Layer、TcpLayer的层层包装,不同TCPflags的含义等等。 TCP中还有很多重要的内容,先做个记录,后面再深入了解。 往返时间测量 滑动窗口 拥塞避免算法 慢启动 快速重传和快速恢复算法 文章索引 动手学习TCP:环境搭建 动手学习TCP:TCP连接建立与终止 动手学习TCP:客户端状态变迁 动手学习TCP:服务端状态变迁 动手学习TCP:TCP特殊状态 动手学习TCP:数据传输 动手学习TCP:4种定时器 简单总结 下面就对前面几篇文章中涉及到的TCP知识的进行简单的汇总。 TCP首部    在TCP首部中没有源和目标的IP、MAC地址(IP和MAC地址分别是网络层和链路层首部的

  • 推荐系统简介

    1、目的 推荐系统是信息过载所采用的措施,面对海量的数据信息,从中快速推荐出符合用户特点的物品。解决一些人的“选择恐惧症”;面向没有明确需求的人。 •解决如何从大量信息中找到自己感兴趣的信息。 •解决如何让自己生产的信息脱颖而出,受到大众的喜爱   •让用户更快更好的获取到自己需要的内容 •让内容更快更好的推送到喜欢它的用户手中 •让网站(平台)更有效的保留用户资源 2、推荐系统应用   3、推荐系统基本思想 •利用用户和物品的特征信息,给用户推荐那些具有用户喜欢的特征的物品。 •利用用户喜欢过的物品,给用户推荐与他喜欢过的物品相似的物品。 •利用和用户相似的其他用户,给用户推荐那些和他们兴趣爱好相似的其他用户喜欢的物品。 •知你所想,精准推送 –利用用户和物品的特征信息,给用户推荐那些具有用户喜欢的特征的物品。 •物以类聚 –利用用户喜欢过的物品,给用户推荐与他喜欢过的物品相似的物品。 •人以群分 –利用和用户相似的其他用户,给用户推荐那些和他们兴趣爱好相似的其他用户喜欢的物品。 4、推荐系统的数据分析   •要推荐物品或内容的元数据,

  • 花了一天准备好的web前端电子书籍,全部可以免费下载!

    为大家推荐前端开发相关的书籍,个人认为每本都很经典,希望大家能有所收获~ 鲁迅曾说过——“每18个月,前端技术的难度就会增加一倍”   但是即使前端技术飞速发展,下面的这些书籍,依然是每个前端学者首选的入门书籍。 这个书籍很多,主要看大家想要提升哪方面。就可以去下载相对应的书籍;上述书籍已经全部上传到群文件里了,QQ群号:733581373,欢迎正在学习前端的小伙伴过来一起学习 前端入门书籍推荐   JS现在锐不可当,强势崛起,也是前端必须要掌握的重中之重。入门书可以看《JavaScriptDOM编程艺术》、《JavaScript高级程序设计》、《ES6标准入门》,前面两本是建立在ES3标准基础上,后面这一本是ES6标准,也是目前最新最主流的一个版本,随着浏览器大统一,ES6也是前端开发者必须要掌握的。 HTML\HTML5\CSS\CSS3,标签属性看似简单,真要仔细去研究,真是无穷无尽,比如黑洞还深,如行业大神张鑫旭老师,就是这方面有名的专家。我是没得这么精力、毅力去深入研究,所以只能仰望别人。入门书可以看《HeadFirstHTML与CSS》、《

相关推荐

推荐阅读