遥感多模态 参考:From Single- to Multi-modal Remote Sensing Imagery Interpretation: A Survey and Taxonomy
Keywords:multimodal remote sensing
文章目录 遥感多模态AbstractIntroductionTaxonomy1. Multi-source Alignment1.1 Spatial Alignment1.2 Temporal Alignment1.3 Cross-element Alignment1.4 Related work and Challenges 2.Muti-source Fusion2.1 Homogeneous Data Fusion2.1.1 spatial reference2.1.2 Spatio-temporal reference 2.2 Heterogeneous Data Fusion2.2.1 Feature stacking-based2.2.2 Subspace-based2.2.3 Deep learning-based 2.3 Remote Sensing And Other Type Data FusionRemaining problems 3.Mutimodal Representation3.1 Joint Representation3.2 Coordinated Representation3.2.1 Complementary methods3.2.2 Similarity methods 3.3 Encoder-decoder Representation3.
Meta最新模型LLaMA细节与代码详解 0. 简介1. 项目环境依赖2. 模型细节2.1 RMS Pre-Norm2.2 SwiGLU激活函数2.3 RoPE旋转位置编码 3. 代码解读3.1 tokenizer3.2 model3.2.1 模型细节详解3.2.2 transformer构建 3.3 generate 4. 推理 0. 简介 今天介绍的内容是Facebook Meta AI最新提出的语言模型LLaMA,该模型声称以更小的体积,在多数任务上超越了GPT-3的性能。
模型相关项目已经开源:
https://github.com/facebookresearch/llama
论文地址:https://scontent-tpe1-1.xx.fbcdn.net/v/t39.8562-6/333078981_693988129081760_4712707815225756708_n.pdf?_nc_cat=108&ccb=1-7&_nc_sid=ad8a9d&_nc_ohc=ov6yTHfLfNQAX-guxqd&_nc_ht=scontent-tpe1-1.xx&oh=00_AfDMyTEYewg-cHT9_4_sUaW5h0gqrqwjcNMylD9HtVFCWA&oe=6401C9E2
由于模型较大,目前的设备暂时没有办法支持进一步的实验,但是其模型代码已经开源,所以可以先通过代码了解一下模型结构上的一些细节,今天就针对github上放出的代码,了解一下模型的细节。
此外,该模型其实就是transformer做了一点细节上的改进,真正更有价值的工作应该在数据和训练方面。通过阅读代码,可以对transformer的基础构造进行复习,并且了解大模型如何在多卡上分布推理。
由于该项目源码几乎没有注释,这就肯定会给很多同学阅读时带来困扰,所以本文顺带着就把代码部分详细的介绍一下。
1. 项目环境依赖 此项目给出的环境依赖只有4个:
torchfairscalefiresentencepiece 其中torch不比多讲,fairscale是用来做GPU分布的,一般是当使用DDP仍然遇到超显存的问题时使用fairscale。目前fairscale我还没有试过,在下文的源码介绍中,我会用torch中对应的基础网络替代fairscale中的结构层进行介绍。fire是一个命令行工具,用或者不用他都可以,sentencepiece是用于tokenizer的工具包,会在tokenizer部分简单介绍。
2. 模型细节 由于该模型就是用的transformer的decoder,所以在结构上它与GPT是非常类似的,只是有一些细节需要注意一下。
2.1 RMS Pre-Norm 关于Pre-Norm和Post-Norm是神经网络中老生常谈的话题,目前比较普遍的被大家接受的结论是,相同的深度条件下,Post-Norm的效果要优于Pre-Norm,因为Pre-Norm实际上相当于通过了一个更宽的网络而非更深的网络,所以在同等深度下,Pre-Norm的实际效果相当于一个更浅却更宽的网络,详细的推理过程参考:https://spaces.ac.cn/archives/9009。
然而在LLaMA中却采用了Pre-Norm,或许是因为模型够深(7B,13B,30B,65B的模型,transformer layer数量分别为32,40,60,80),而Pre-Norm的恒等分支更加明显,有利于梯度的传播(这部分暂时没有想到很合理的解释,如果有更好的理解,欢迎在评论区补充)。
RMS Norm(Root Mean Square Layer Normalization),是一般LayerNorm的一种变体,可以在梯度下降时令损失更加平滑。
与layerNorm相比,RMS Norm的主要区别在于去掉了减去均值的部分(re-centering),只保留方差部分(re-scaling),从归一化的表达式上可以直观地看出:
一般的LN: a ‾ i = a i − μ σ g i \overline{a}_i = \frac {a_i- \mu} \sigma g_i ai=σai−μgi
如果你打开了这篇文章,说明你是有兴趣想了解前端的这个行业的,以下是博主2023年总结的一些web前端的学习分享路线,如果你也想从事前端或者有这方面的想法的,请接着往下看!
前端发展前景
前端入门
巩固基础
前端工程化
前端进阶
前端求职
前端未来
写在最后
前端发展前景 前端岗位在互联网公司中是必不可少的存在。无论是腾讯、阿里、百度等互联网龙头,还是字节跳动、滴滴、美团等互联网新贵,还是中小型互联网公司,无一例外都需要前端岗位,需要熟悉的前端框架基本也是Vue、React、Angular。
那么学习前端有前途吗?这个我不敢百分之百的保证,我只能说对于前端来讲,学历的要求不是很高,所以针对每一个人不同的情况,我也不能讲解的面面俱到,大部分的前端,只要有请求到后端的接口,然后能把后端接口的数据处理好,并渲染到页面上就可以了。然后一些不懂的问题,一些复杂的功能模块,其实你一百度,基本上都能解决问题,如果你百度都不能解决的问题,那不是百度解决不了,而是你的项目本身就是有问题的。这里面说的是绝大部分的情况,当然也有一些奇怪的例子,这种只是占少部分。
每个道路都有每个道路的优势与劣势,如果你下定决心选择了一个行业,就应该坚定的走下去!
前端入门 相信每一位前端开发者的前端入门,都是以前端三件套:HTML、CSS、JavaScript开始的,这三者既是基础也是重中之重,将这三门学精也决定着未来的上限有多高。
前端入门第一步需要选好自己的开发工具:
正所谓:工欲善其事,必先利其器。一旦你选择了开发者工具,可能他会伴随着你一辈子,对于前端开发人员来说。最最常用的编译器为:WebStorm、VsCode、HBuilder这三者,博主这三种编译器都使用过,拿VsCode举例,轻量级的编译器丰富的插件简洁的界面,注定了它受欢迎的原因。选择好编译器之后,便需要选择一个网站作为自己前端开发的网页可视工具,这里博主推荐使用谷歌浏览器,因为许多浏览器都是使用chrome浏览器的内核,其兼容性也是比较好的,当然你也可以多下几个浏览器,为了后期考虑浏览器的兼容性问题。
前端入门第二步踏入的也就是HTML+CSS:
博主推荐学习视频:渡一教育的袁进老师前端零基础入门教程,赋予链接:网站传送门 ,做完袁进老师最后讲解的豆瓣页面,可以说你的前端基本可以入门了,当然日常还需要多做一些小案例,加深自己的CSS知识理解,可以说CSS算是前端的一门高深学科了,要将其学深也是比较困难的,当然也是没有太大必要,因为大多命令太多完全不需要记,直接百度就行。
博主推荐查阅网站:记不住的命令平常查阅资料可以在:菜鸟教程 或 MDN 这几个网站即可找到。
博主推荐阅读专栏:这里也可以关注一下博主对HTML和CSS的讲解专栏:HTML专栏,CSS专栏 里面详细介绍并整理了HTML+CSS的详细知识。欢迎大家订阅!!!
前端入门的第三步也是最重要的一步就是JavaScript:
博主推荐学习视频:JS的话博主推荐的是黑马程序员中的pink老师的JS基础语法讲解,未来要学习的各种第三方库或框架都是基于原生JS来书写的,所以说学好JS是重中之重,赋予链接:网站传送门,近来pink老师在2023年也新推出了JS的高级知识核心与进阶讲解,大家有兴趣也可以去看看,赋予链接:网站传送门,学完JS的话,搭配HTML+CSS做几个小案例巩固一下最好。
博主推荐查阅网站:JS的查询网站,博主推荐的是:菜鸟教程 或 蜜蜂教程 ,查询ES6的语法规范的话,推荐查阅阮一峰的:ECMAScript6入门 。
博主推荐阅读专栏:这里也可以关注一下博主对JavaScript和ES6语法规范的讲解专栏:JS专栏 ,ES语法规范专栏 ,里面详细介绍并整理了HTML+CSS的详细知识。欢迎大家订阅!!!
学好前端入门阶段之后,自身能够了解并实践前端三件套的基础语法,并且能够使用开发者工具独立开发一个简单的网站,前端入门可以算是学的差不多了。
巩固基础 作为前端开发者,对于算法的要求不是很高,但仍然需要了解一些计算机及网络的一些知识:
要了解互联网、域名、浏览器、服务器等基础概念,至少知道它是什么吧,这是扎实前端程序员的基本功,推荐看一下博主的文章:网络与服务器 。知道网络的基础知识了,你还需要懂得浏览器调试,知道这么代码调试,这也是判断一个前端程序员合格的标准,推荐看一下博主对前端代码调试讲解的文章:前端编程如何进行代码调试 。
虽然前端对算法要求不高,但是还是应该了解一下,提升自己的核心竞争力,如果后期你跑路了,哦不对,你转后端了,学习起来也不是太困难,当然看个人选择,博主这边只是建议而已,这里也可以关注一下博主对算法的讲解专栏:算法与程序设计 。
计算机基础方面:如果你是科班出身,应好好学习计算机网络与操作系统的课程,如果不是科班也应该花一些时间来专门了解一下。
软件开发基础方面:需要你了解一下软件常见的设计模式,最重要的是需要你懂得Git版本控制的使用,这在后期公司项目中经常会用到,这里也可以关注一下博主对git的讲解专栏:Git专栏 。
前端工程化 前端工程化是使用软件工程的技术和方法来进行前端的开发流程。是技术、工具、经验等规范化标准化,其主要目的是为了提高开发过程中的开发效率,减少不必要的重复时间,一切以提高效率、降低成本、质量保证为目的的手段都属于工程化。
处于前端工程化阶段,便可以接触一下前端相关的第三方库的使用了,有了第三方的插件库的使用便极大的提高了前端程序员的开发效率。下面博主也分享了一些宝藏网站供大家使用:
CSS工程化:
CSS可谓是前端的一个门户的学科了,你前端的样式如何都是基于CSS来实现的,可是如果每次的项目都要从零开始书写CSS,我想大部分的前端程序员都会花大量的时间在设计页面上,为了解决这个问题,许多前端程序前辈竭心齐力开发了许多宝藏的CSS网站,总结如下:
bootstrap:简洁、直观、强悍的前端开发框架,让web开发更迅速、简单。
RGB颜色值与十六进制颜色码转换:颜色选择的工具。
CSS按钮设计:CSS按钮的样式设计。
按钮效果:设计许多按钮的样式,让自己的页面更加绚丽多彩。
波浪生成器:设置了波浪的CSS样式。
平滑阴影:设置了CSS的平滑阴影样式。
阴影生成器:设置了CSS的阴影生成样式。
等等等好多的设置CSS样式的网站,这里博主就举这几个典型的例子,使用好这些网站,自己的设置的网站一定会填出更加绚丽的色彩!希望大家灵活应用。
JavaScript工程化:
JavaScript是前端的一个交互学科,你能做出什么样的动作都依赖于JS的实现,虽然原生JS也能实现一些功能,但是操作DOM的效率太低,为此JS推出了一个专门操作DOM的第三方库:jQuery。这个第三方库极大的提升了前端操作原生DOM的效率,这个库在前几年还是比较流行,随着时代的更替开始走下坡路,当然还是有许多公司的老项目还是使用的jQuery的,拓宽自己的视野的话,学习一下也最好。
博主推荐学习视频:这里推荐pink老师讲解的jQuery视频,赋予链接:网站传送门 。
博主推荐查询网站:这里可以看一下W3c讲解的知识,赋予链接:网站传送门 。
博主推荐阅读专栏: 这里也可以关注一下博主对jQuery的讲解专栏:jQuery专栏 。
Querydsl-JPA 框架(推荐) 官网:传送门
参考:
JPA整合Querydsl入门篇SpringBoot环境下QueryDSL-JPA的入门及进阶 概述及依赖、插件、生成查询实体 1.Querydsl支持代码自动完成,因为是纯Java API编写查询,因此主流Java IDE对起的代码自动完成功能支持几乎可以发挥到极致(因为是纯Java代码,所以支持很好)
2.Querydsl几乎可以避免所有的SQL语法错误(当然用错了Querydsl API除外,因为不写SQL了,因此想用错也难)
3.Querydsl采用Domain类型的对象和属性来构建查询,因此查询绝对是类型安全的,不会因为条件类型而出现问题
4.Querydsl采用纯Java API的作为SQL构建的实现可以让代码重构发挥到另一个高度
5.Querydsl的领一个优势就是可以更轻松的进行增量查询的定义
使用
在Spring环境下,可以通过两种风格来使用QueryDSL。
一种是使用JPAQueryFactory的原生QueryDSL风格, 另一种是基于Spring Data提供的QueryDslPredicateExecutor<T>的Spring-data风格。
使用QueryDslPredicateExecutor<T>可以简化一些代码,使得查询更加优雅。 而JPAQueryFactory的优势则体现在其功能的强大,支持更复杂的查询业务。甚至可以用来进行更新和删除操作。
依赖
<dependencies> <!-- QueryDSL框架依赖 --> <dependency> <groupId>com.querydsl</groupId> <artifactId>querydsl-apt</artifactId> </dependency> <dependency> <groupId>com.querydsl</groupId> <artifactId>querydsl-jpa</artifactId> </dependency> </dependencies> 添加maven插件(pom.xml)
添加这个插件是为了让程序自动生成query type(查询实体,命名方式为:“Q”+对应实体名)。
上文引入的依赖中querydsl-apt即是为此插件服务的。
注:在使用过程中,如果遇到query type无法自动生成的情况,用maven更新一下项目即可解决(右键项目->Maven->Update Project)。
<project> <build> <plugins> <plugin> <!--因为QueryDsl是类型安全的,所以还需要加上Maven APT plugin,使用 APT 自动生成Q类:--> <groupId>com.mysema.maven</groupId> <artifactId>apt-maven-plugin</artifactId> <version>1.1.3</version> <executions> <execution> <phase>generate-sources</phase> <goals> <goal>process</goal> </goals> <configuration> <outputDirectory>target/generated-sources/java</outputDirectory> <processor>com.querydsl.apt.jpa.JPAAnnotationProcessor</processor> </configuration> </execution> </executions> </plugin> </plugins> </build> </project> 补充:
目录
一、拉链表概念
二、拉链表对应的业务需求
三、代码实现
3.1 数据初始化:
3.2 创建ods层增量表:
3.3 创建dwd层拉链表
3.4 数据更新 ,将数据日期为2023-3-4的日期添加到拉链表中
3.4.1 先追加数据到ods层表
3.4.2 更新dwd层表数据
一、拉链表概念 拉链表是一种数据模型,主要是针对数据仓库设计中表存储数据的方式而定义的,顾名思义,所谓拉链,就是记录历史。记录一个事物从开始,一直到当前状态的所有变化的信息。拉链表可以避免按每一天存储所有记录造成的海量存储问题,同时也是处理缓慢变化数据(SCD2)的一种常见方式。
百度百科的解释:拉链表是维护历史状态,以及最新状态数据的一种表,拉链表根据拉链粒度的不同,实际上相当于快照,只不过做了优化,去除了一部分不变的记录,通过拉链表可以很方便的还原出拉链时点的客户记录。
二、拉链表对应的业务需求 数据量比较大;表中的部分字段会被update, 如用户的地址,产品的描述信息,订单的状态等等;需要查看某一个时间点或者时间段的历史快照信息,比如,查看某一个订单在历史某一个时间点的状态,比如,查看某一个用户在过去某一段时间内,更新过几次等等;变化的比例和频率不是很大,比如,总共有1000万的会员,每天新增和发生变化的有10万左右;如果对这边表每天都保留一份全量,那么每次全量中会保存很多不变的信息,对存储是极大的浪费。拉链历史表,既能满足反应数据的历史状态,又可以最大程度的节省存储; 缺点:
开发/使用 成本略高,大量记录频繁变更会导致存储压缩效果降低不分区的话,数据量大的时候,查询效率低如果某个日期同步的数据出现问题需要重跑数据,则需要重跑从出问题的日期到当前日期的每一天数据 三、代码实现 拉链表主要用在dwd层,用来及时记录每个事务状态的。加入ods层数据发生的新增或者更新,相应的dwd层的数据也会改变。拉链表数据生成的思路是:ods更新或者新增的数据 + union +dwd拉链表历史数据(要更改历史数据中状态发生改变的字段)。
方法有两种: 窗口函数和union all 。
3.1 数据初始化: 导入数据到一张初始表 (外部表)
-----------拉链--------------- create database lalian; use lalian; drop table if exists orders; create external table orders( orderid int, createdate string, modifiedtime string, status string ) row format delimited fields terminated by '\t' location '/tmp/lalian/orders'; -- [root@reagan180 ~]# vim /opt/aa.
github项目地址:AUTOMATIC1111/stable-diffusion-webui
前提: git已经安装(这个很简单,可以去其他教程看)
安装python 3.10.9,这里稍微说一下,用Anaconda或者python官网的环境都是可以的。只要能找到下面这个python.exe文件的位置就可以。
使用git下载novel AI源码 ①右键空白的地方-》Git Bash Here -》输入:
git clone https://ghproxy.com/https://github.com/AUTOMATIC1111/stable-diffusion-webui.git ②成功后会出现下面这样一个文件:
③进入到这个文件夹后会找到下面这样一个文件webui-user.bat
④使用记事本打开后把刚才找到的python.exe文件路径放进去、保存
⑤双击webui-user.bat文件
如果你的网络够好,它可以下载,你就等等,直接看第⑦步
如果你网络不好,那么跟我走下一步。
进入到torchvision下载torchvision-0.14.1+cpu-cp310-cp310-win_amd64.whl
进入到torch下载torch-1.13.1+cu117-cp310-cp310-win_amd64.whl
找到这个python.exe文件
接着打开cmd输入如下代码
D:\csdn\stable-diffusion-webui\venv\Scripts\python.exe -m pip config set global.index-url https://pypi.douban.com/simple/ ⑥安装刚刚下载好的两个文件
输入
D:\csdn\stable-diffusion-webui\venv\Scripts\python.exe -m pip install D:\chromeDownLoad\torch-1.13.1+cu117-cp310-cp310-win_amd64.whl 等待安装完成,再输入
D:\csdn\stable-diffusion-webui\venv\Scripts\python.exe -m pip install D:\chromeDownLoad\torchvision-0.14.1+cu117-cp310-cp310-win_amd64.whl ⑦双击webui-user.bat后,会发现不用安装torch和torchvision了。接着会卡在Installing gfpgan。我们关掉这个窗口。
打开cmd,再次输入
D:\csdn\stable-diffusion-webui\venv\Scripts\python.exe -m pip config set global.index-url https://pypi.douban.com/simple/ 输入
D:\csdn\stable-diffusion-webui\venv\Scripts\python.exe -m pip install gfpgan 等待安装完成。
⑧双击webui-user.bat文件,这时候就会显示Installing clip
这个时候我们就不要用pip直接安装了
我们用记事本打开与webui-user.bat在同一目录的launch.py文件,ctrl+f搜索clip,找到下面的代码,右面有一个地址https://github.com/openai/CLIP.git
我们随便找一个地方右键-》git bash here
输入
🤵♂️ 个人主页:@艾派森的个人主页
✍🏻作者简介:Python学习者
🐋 希望大家多多支持,我们一起进步!😄
如果文章对你有帮助的话,
欢迎评论 💬点赞👍🏻 收藏 📂加关注+
喜欢大数据分析项目的小伙伴,希望可以多多支持该系列的其他文章
大数据分析案例合集 大数据分析案例-基于随机森林算法预测人类预期寿命大数据分析案例-基于随机森林算法的商品评价情感分析大数据分析案例-用RFM模型对客户价值分析(聚类)大数据分析案例-对电信客户流失分析预警预测大数据分析案例-基于随机森林模型对北京房价进行预测大数据分析案例-基于RFM模型对电商客户价值分析大数据分析案例-基于逻辑回归算法构建垃圾邮件分类器模型大数据分析案例-基于决策树算法构建员工离职预测模型 大数据分析案例-基于KNN算法对茅台股票进行预测
大数据分析案例-基于多元线性回归算法构建广告投放收益模型大数据分析案例-基于随机森林算法构建返乡人群预测模型大数据分析案例-基于决策树算法构建金融反欺诈分类模型 目录
1.实验背景
1.1背景概述
1.2实验目的
2.数据来源及方法介绍
2.1 数据来源
2.2 属性介绍
2.3 算法介绍
2.3.1 决策树
2.3.2 朴素贝叶斯法
2.3.3 KNN
3、实验步骤
3.1导入模块和数据
3.2特征工程
3.2.1特征工程介绍
3.2.2数据预处理
3.2.3特征选择
3.3数据可视化
3.3.1对职务分布可视化
3.3.2对年龄分布可视化
3.4模型构建
3.4.1拆分训练集测试集
3.4.2导入并拟合模型
3.5模型评估
3.5.1 Recall和Precision评估
3.5.2 ROC曲线评估
4 实验总结
源代码
1.实验背景 1.1背景概述 银行客户流失是指银行的客户终止在该行的所有业务并销号。但在实际运营中,对于具体业务部门,银行客户流失可以定位为特定的业务终止行为。商业银行的客户流失较为严重,流失率可达20%。而获得新客的成本是维护老客户的5倍。因此,从海量客户交易数据中挖掘出对流失有影响的信息,建立高效的客户流失预警体系尤为重要。
客户流失的主要原因有:价格流失、产品流失、服务流失、市场流失、促销流失、技术流失、政治流失。有些时候表面上是价格导致的客户流失,但实际上多重因素共同作用导致了客户的流失。比如说,不现实的利润目标、价格结构的不合理、业务流程过于复杂、组织结构的不合理等等。维护客户关系的基本方法:追踪制度,产品跟进,扩大销售,维护访问,机制维护。
因此建立量化模型,合理预测客群的流失风险是很有必要的。比如:常用的风险因子,客户持有的产品数量、种类,客户的年龄、性别,地理区域的影响,产品类别的影响,交易的时间间隔,促销的手段等等。根据这些因素及客户流失的历史数据对现有客户进行流失预测,针对不同的客群提供不同的维护手段,从而降低客户的流失率。
1.2实验目的 时代与技术的发展使得数据的获取与挖掘成为可能,本实验将通过python对用户做特征分析和顾客流失分析,帮助银行发现并改善顾客体验,以及确定挽留的目标顾客并帮助银行制定方案。
2.数据来源及方法介绍 2.1 数据来源 本次大数据课设实验中,我们小组所用到的银行客户信息数据来源于美林数据技术股份有限公司的公司产品人工智能平台(TEMPO)。数据集包括各个分行支行的银行客户数据。数据包含52类银行客户信息数据,我们将年龄、职务、存款、基金等51个变量作为自变量,将客户是否流失作为因变量。这些数据可用于生成智能计算工具,借此预测银行客户流失情况。
2.2 属性介绍 数据共包括52个属性,下面对各属性进行说明:
为了提高数据分类与分析的准确性,我们对原始数据进行了处理,对部分数据进行删除,以此减少无关数据的干扰,删去的数据如表所示:
2.3 算法介绍
文章目录 前言有参构造方法无参构造方法定义四个类说明情况(如果还不清晰请看)Lombok的基本使用 前言 遇到了就简单写一下吧,如果能够对你有帮助,点个赞吧。首先清晰明了的了解到有参构造方法与无参构造方法、以及应用,然后实战项目一般会使用的Lombok,不会手动再生成get、set。
定义:
在编写一个类时没有添加无参构造方法,那么编译器会自动添加无参构造方法;(如果自己手动添加构造函数,无论有参数或是没参数,默认构造函数都将无效)
编写时添加有参构造方法而未添加无参构造方法,那么编译器只认有参构造方法而不会默认添加无参构造方法。
如果需要使用无参构造方法,一定要在类里面添加。
有参构造方法 在之前我们要为一个对象赋值,先要创建好对象之后然后“对象名.属性名”或者调用属性的setter为属性赋值。但是在很多时候觉得这样做很麻烦,最好的做法是在创建对象的时候完成属性的初始化操作,此时需要使用到有参数构造方法方能完成该功能(有人把构造方法叫做构造器)。
例子:(idea快捷键Alt+insert生成构造方法和get、set等)
1、定义一个Student类
package com.hn.yuan.common; /** * 有参构造方法 */ public class Student { private String name; private String age; public Student(String name, String age) { this.name = name; this.age = age; } public void setName(String name) { this.name = name; } public void setAge(String age) { this.age = age; } public String getName() { return name; } public String getAge() { return age; } public void start(){ System.
前言:
前端工程化一直是一个老生常谈的问题,不管是面试还是我们在公司做基建都会经常提到前端工程化,那么为什么经常会说到前端工程化,并没有听过后端工程化、Java工程化或者Python工程化呢?我们理解的前端工程化是不是一直都是Webpack的性能调优,或者是一个cli工具呢?今天我们带着问题来一起寻找一下答案吧!
文章目录 一、前端工程化简介1. 前端发展历史 二、工程化整体流程三、相关面试题1. 一个新项目由你来做技术选型,你会从那几个方面来考虑?2. 前端项目应该如何部署上线a. 集成b. 发布 四、大厂工程化实践及开源方案五、迷你工程化脚手架实践 一、前端工程化简介 我们整天再说前端工程化,那我我们思考一下,为什么会有前端工程化这个
概念?我们来一起回顾前端的发展历史,通过这个发展历史我们就能知道为什么会有【前端工程化】这个概念。
1. 前端发展历史 看下面流程图我们可以看出来
第一阶段:前端最早期的只是HTML、CSS、JS(此时只是前端发展的一个雏形,【JS】还没有模块化的概念),随着页面发展我们发现一个页面引入太多JS脚本,将大大增加维护成本;
第二阶段:已经出现了模块的概念,会按照模块的概念进行拆分,我们如何拆分模块,如何放置这些模块?此时已经有了一个工程化的概念;
第三个阶段:模块已经划分出来,但是我们部署的时候还是想合并在一起,就涉及到了早起的打包处理;
第四个阶段:前端进一步复杂之后,前端需要承载的功能更多了,逐步开始进行前后端分离,前端也可以独立的开发了。此时前端也出来了一些新的概念,比如说:SPA、Angular、Vue等。此时就要开始考虑路由如何规划?开发时如何调试?开发完如何构建?构建完如何发布?这一切的东西才构成了【前端工程化的概念】;
HTML
CSS
JS AMD:异步模块加载
CMD:同步模块加载
Commonjs:09年Node.js
ES-Model:15年ES6的出现 Grunt
gulp
jade 前后端分离 综上所述我们可以看出来,前端工程化绝不只是webpack或babel构建这一块,前端工程化是一个整体,从前端开始写代码 --> 如何构建 --> 如何发布测试 --> 如何上线 --> 上线后的应用状态如何监控等,这一套的流程我们把他叫做【前端工程化】。
二、工程化整体流程 **下图所示,就是我们从零开始整个前端工程化的考虑范围** 1. 从创建项目与开发阶段--> 我们要使用脚手架,对应的Eslint规范以及我们要使用什么UI组件库 2. CI --> 持续集成: 在一个集中的环境去构建我们的项目(避免不同协作人员环境不同带来的Bug) 3. CD --> 持续部署 下面面试题 【前端项目应该如何部署上线】 会对 CI/CD做详细的介绍 创建项目 开发 构建 测试 上线 脚手架 规范 + Eslint 组件库 CI:持续构建 CD:持续部署 监控 为什么开篇说到后端没有工程化的概念?
1.问题描述 初次打开stable diffusion webui时,需要安装gfpgan等github项目。但在安装gfpgan时,显示RuntimeError: Couldn't install gfpgan
2.解决方案 无法安装gfpgan的原因是网络问题,就算已经科学上网,并设置为全局,也无法从github上下载源代码,从而导致install失败。解决方法是直接到github下载 GFPGAN 代码到本地,并进行本地安装。因为stable diffusion会在其根目录创建虚拟python环境venv,因此安装方法与github有所不同。可参考以下方法: 从github将GFPGAN的源文件下载到本地,这一步可以使用git clone也可以直接下载zip文件。下载后,解压(如果用git clone就不需要)到d:\\stable-diffusion-webui\venv\Scripts目录下(stable-diffusion-webui是你stable diffusion webui的根目录,这个地址只是我电脑中的,请根据自己放的位置调整)。打开cmd,cd到d:\\stable-diffusion-webui\venv\Scripts\GFPGAN-master下。使用命令d:\\stable-diffusion-webui\venv\Scripts\python.exe -m pip install basicsr facexlib安装GFPGAN的依赖。再使用d:\\stable-diffusion-webui\venv\Scripts\python.exe -m pip install -r requirements.txt安装GFPGAN的依赖。使用d:\\stable-diffusion-webui\venv\Scripts\python.exe setup.py develop安装GFPGAN。 安装完毕后,再打开stable diffusion根目录的webui-user.bat会发现不再要求安装GFPGAN。如果遇到其他github上的模块无法安装也可以用同样的方法。 如果clip安装失败,可以参考:打开stable diffusion webui时,提示缺少clip或clip安装不上的解决方案(windows下的操作)
目录
前言
一.堆的介绍
1.堆的本质
2.堆的分类
二.堆的实现(以小根堆为例)
1.关于二叉树的两组重要结论:
2.堆的物理存储结构框架(动态数组的简单构建)
3. 堆元素插入接口(以小根堆为例)
堆尾元素向上调整的算法接口:
4.堆元素插入接口测试
5.堆元素插入接口建堆的时间复杂度分析(建堆时间复杂度)
6.堆元素删除接口(同样以小根堆为例子)
堆元素向下调整算法接口实现:
7.堆元素删除接口测试
8.逐个删除堆顶数据过程的时间复杂度分析(删堆的时间复杂度分析)
9.堆的实现代码总览(以小根堆为例)
10.结语
前言 关于数据结构的文章:写博客的时候我感觉在表达层面上有点费劲,如果文章整体在表述上让人感觉不够清楚,恳请读者原谅,本菜狗已经尽力了.
一.堆的介绍 1.堆的本质 关于二叉树的图论基础参见:http://t.csdn.cn/Nv325http://t.csdn.cn/Nv325青菜友情提示:基础概念对于理解堆的实现与运用非常重要
堆的本质是映射在内存中顺序存储结构(数组)上的完全二叉树(完全二叉树是堆的逻辑结构).
堆的图解:
结点中的数据存储在相应下标的数组元素空间中 2.堆的分类 堆的两个类型:
大根堆:在大根堆中任何子结构的父结点中存储的值大于其左右孩子结点中存储的值(即任何一条连通路径上从上往下满足降序排列)小根堆:在小根堆中任何子结构的父结点中存储的值小于其左右孩子结点中存储的值(即任何一条连通路径上从上往下满足升序排列) 二.堆的实现(以小根堆为例) 1.关于二叉树的两组重要结论: 堆的任何一个父结点的编号parent与其左孩子结点的编号leftchild满足如下关系式:堆的任何一个父结点的编号parent与其右孩子结点的编号rightchild满足如下关系式: 这两组重要结论的推导和分析参见青菜的博客:http://t.csdn.cn/Nv325http://t.csdn.cn/Nv325
2.堆的物理存储结构框架(动态数组的简单构建) 堆是存储在数组上的(大小根)完全二叉树,因此在实现堆之前我们先构建一个简单的动态数组作为物理存储结构框架:
维护动态数组的结构体: typedef int HPDataType; //堆元素类型 typedef struct Heap { HPDataType* arry; //堆区内存指针 size_t size; //堆元素个数 size_t capacity; //数组的空间容量 }HP; 堆的基础操作接口声明: //维护堆的结构体的初始化接口 void HeapInit(HP* php); //销毁堆的接口 void HeapDestroy(HP* php); //堆元素的打印接口 void HeapPrint(HP* php); //判断堆是否为空(堆中有无元素)的接口 bool HeapEmpty(HP* php); //返回堆中元素个数的接口 size_t HeapSize(HP* php); //返回堆顶元素(即编号为0的元素)的接口 HPDataType HeapTop(HP* php); 基础接口的实现: //堆结构体的初始化接口 void HeapInit(HP* ptrheap) { assert(ptrheap); ptrheap->arry = NULL; ptrheap->capacity = 0; ptrheap->size = 0; } //销毁堆的接口 void HeapDestroy(HP* ptrheap) { assert(ptrheap); free(ptrheap->arry); ptrheap->arry = NULL; ptrheap->capacity = 0; ptrheap->size = 0; } //堆的打印接口 void HeapPrint(HP* ptrheap) { assert(ptrheap); size_t tem = 0; for (tem = 0; tem < ptrheap->size; ++tem) { printf("
LVI-SAM是TixiaoShan大佬在他之前LIO-SAM工作基础上耦合了视觉惯性里程计,算法包含雷达惯性里程计模块及视觉惯性里程计模块,其中视觉惯性里程计采用VINS-MONO,其实整体设计是为了在雷达退化的场景中,使用视觉里程计定位结果代替雷达退化方向位姿,同时利用雷达惯性里程计结果初始化整个视觉惯性里程计系统,并使用Lidar点云深度信息融合图像数据,雷达惯性里程计中同样使用视觉词袋回环检测结果参与因子图优化.
之前写过一篇有关LIO-SAM安装并适配自己传感器的文章:LIO-SAM:配置环境、安装测试、适配自己采集数据集,后续因为一直没有使用到视觉传感器,因此一直没有调试LVI-SAM相关算法,现在想要测试一下融合视觉传感器相关算法,因此把自己调试的一些问题做一个记录,也希望其中的某些点能够帮到大家.
其实有关LVI-SAM安装配置,网上也已经有很多大佬进行了相应的阐述,因此在这里不做算法原理记录了,仅仅记录一下自己调试适配自己数据过程中,有哪些需要注意的点,然后如何快速适配自己的数据,我也是菜鸟一个,文章中如果有出现理解并不正确的地方,还希望大家批评指正.
Paper: https://github.com/TixiaoShan/LVI-SAM/blob/master/doc/paper.pdf
Code : https://github.com/TixiaoShan/LVI-SAM
1. 电脑配置 Ubuntu 18.04 + ROS Melodic + GTSAM 4.0.2 + CERES 1.14.0
2. 环境配置 2.1. ROS Melodic安装 可参考ROS wiki官网教程.
2.2. GTSAM 4.0.2安装 GTSAM官网:https://github.com/borglab/gtsam
git clone https://github.com/borglab/gtsam.git mkdir build && cd build cmake -DGTSAM_BUILD_WITH_MARCH_NATIVE=OFF .. sudo make install -j4 2.3. Ceres 1.14.0安装 Ceres官网:https://github.com/ceres-solver/ceres-solver
git clone https://github.com/ceres-solver/ceres-solver.git mkdir build && cd build cmake .. sudo make install -j4 2.4. 创建工作空间并编译 mkdir ~/catkin_ws/src cd ~/catkin_ws/src git clone https://github.
PLC实验—西门子S7 1200读取旋转编码器数据并计算电机转速 注意PTO控制步进电机实验博途软件需要V14版本,不然没有PTO功能块
软件的下载请点击下方百度网盘的链接
链接:https://pan.baidu.com/s/11mQFVnaQxrUy4W9nGIk8Jw
提取码:6lva
详细的操作指导视频已经放到了B站上
Simens S7-1200读取增量式编码器数据
Simens S7-1200根据编码器数据计算电机转速
主块 首先要在设备组态启用高速计数器
硬件输入为I0.0和I0.1
这里将输入滤波器的时间改为0.8ms
先看变量表
main中添加了4个程序段,这是基于PTO控制步进电机基础上实现的,可以先看前面的博客
PLC编程与实践——基础实验
ID1000是HSC_1的地址,将其move到MD1000中
从上面可以看出编码器A相接I0.0,B相接I0.1,接两根信号线即可
CTRL_HSC: 控制高速计数器
使用“控制高速计数器”指令,可以对参数进行设置并通过将新值加载到计数器来控制 CPU 支持的高速计数器。指令的执行需要启用待控制的高速计数器。对于指定的高速计数器,无法在程序中同时执行多个“控制高速计数器”指令
可以在帮助中查看信息
辅助块 新建一个中断OB,周期为200ms
新建一个FB,用于计算电机的实际转速,在中断OB中调用该FB
FB_Counter_to_Speed 先看变量,注意输入/输出/全局变量的设置
用下面的公式计算电机实际转速
功能块实现
Current_Counter - Recoder_Counter = Delta_Counter
Delta_Counter / (Cycle_Time * 1000) = ratio_result
DIV中的1000是编码器的线数,CALCULATE是ms到s的换算,这里的单位是转/秒
注意用move去更新Recoder_Counter
Cyclic interrupt 200ms 在组织块中直接调用函数块即可
实际接线 接线其实很简单
实验结果 通过CTRL_HSC可以给编码器初值添加一个偏置
在main中MD1000显示了编码器的脉冲数
FB_Counter_to_Speed函数块中可以显示步进电机的转速
Cyclic interrupt 200ms组织块中显示的步进电机转速与FB_Counter_to_Speed中相同
文章目录 前言JSP 概述JSP快速入门搭建环境导入JSP依赖创建 JSP 页面编写代码测试 JSP原理JSP 脚本实战案例JSP缺点发展阶段EL 表达式概述实战案例 域对象JSTL 标签用法1用法2 前言 不得不说,JSP 现在已经是一门十分老旧的技术了,学习编程时,不仅要学习优秀的前言技术,还要对基础有一定的把握,所以学习 JSP 时,我们只做了解,不用刨根问底花费大量的时间,得不偿失。
我们主要从以下几个方面学习 JSP 技术:
理解 JSP 及其原理学会使用 EL 表达式和 JSTL 标签理解 MVC 模式和三层架构(重点) 学习 JSP 到什么程度呢?我们只需要能够使用 JSP 相关技术能够实现简单数据的增删改查即可。
JSP 概述 JSP,Java Server Pages,指的是 Java 服务端页面,是一种动态的网页技术,其中既可以定义 HTML,CSS,JavaScript 静态内容,也可以使用 Java 代码定义动态内容。通俗的说,JSP = HTML + Java 。下面就是一个最简单的 JSP 代码:
<html> <head> <title>title</title> </head> <body> <h1>HelloWorld</h1> <% System.out.println("HelloWorld!"); %> </body> </html> 上面的例子中,html 里面的内容会在浏览器渲染,而 Java 代码的输出语句会打印在 idea 控制台。
那么 JSP 到底是用来做什么的?我们如何实现不同用户登录网页显示不同的信息呢?例如,在页面上显示登录的用户名:
Stable Diffusion原理详解 最近AI图像生成异常火爆,听说鹅厂都开始用AI图像生成做前期设定了,小厂更是直接用AI替代了原画师的岗位。这一张张丰富细腻、风格各异、以假乱真的AI生成图像,背后离不开Stable Diffusion算法。
Stable Diffusion是stability.ai开源的图像生成模型,可以说Stable Diffusion的发布将AI图像生成提高到了全新高度,其效果和影响不亚于Open AI发布ChatGPT。今天我们就一起学习一下Stable Diffusion的原理。
文章目录 图像生成的发展扩散模型TransformerStable Diffusion潜在空间(Lantent Space)Latent Diffusion感知压缩语义压缩感知损失扩散损失条件扩散注意力机制文本-图像合成图像-图像合成 整体架构 总结 图像生成的发展 在Stable Diffusion诞生之前,计算机视觉和机器学习方面最重要的突破是 GAN(Generative Adversarial Networks 生成对抗网络)。GAN让超越训练数据已有内容成为可能,从而打开了一个全新领域——现在称之为生成建模。
然而,在经历了一段蓬勃发展后,GAN开始暴露出一些瓶颈和弊病,大家倾注了很多心血努力解决对抗性方法所面临的一些瓶颈,但是鲜有突破,GAN由此进入平台期。GAN的主要问题在于:
图像生成缺乏多样性模式崩溃多模态分布学习困难训练时间长由于问题表述的对抗性,不容易训练 另外,还有一条基于似然(例如,马尔可夫随机场)的技术路线,尽管已经存在很久,但由于对每个问题的实施和制定都很复杂,因此未能产生重大影响。
近几年,随着算力的增长,一些过去算力无法满足的复杂算法得以实现,其中有一种方法叫“扩散模型”——一种从气体扩散的物理过程中汲取灵感并试图在多个科学领域模拟相同现象的方法。该模型在图像生成领域展现了巨大的潜力,成为今天Stable Diffusion的基础。
扩散模型 扩散模型是一种生成模型,用于生成与训练数据相似的数据。简单的说,扩散模型的工作方式是通过迭代添加高斯噪声来“破坏”训练数据,然后学习如何消除噪声来恢复数据。
一个标准扩散模型有两个主要过程:正向扩散和反向扩散。
在正向扩散阶段,通过逐渐引入噪声来破坏图像,直到图像变成完全随机的噪声。
在反向扩散阶段,使用一系列马尔可夫链逐步去除预测噪声,从高斯噪声中恢复数据1。
通过缓慢添加(去除)噪声来生成样本的正向(反向)扩散过程的马尔可夫链(图片来源: Jonathan Ho, Ajay Jain, Pieter Abbeel. 2020) 对于噪声的估计和去除,最常使用的是 U-Net。该神经网络的架构看起来像字母 U,由此得名。U-Net 是一个全连接卷积神经网络,这使得它对图像处理非常有用。U-Net的特点在于它能够将图像作为入口,并通过减少采样来找到该图像的低维表示,这使得它更适合处理和查找重要属性,然后通过增加采样将图像恢复回来。
一个典型的U-Net架构实例 具体的说,所谓去除噪声就是从时间帧 t t t 向时间帧 t − 1 t-1 t−1 的变换,其中 t t t 是 t 0 t_0 t0 (没有噪声)到 t m a x t_{max} tmax(完全噪声)之间的任意时间帧。变换规则为:
由于之前手动抢购枪神7超竞连续失败两次后怒学脚本抢购,今天给大家分享一期超简单+直观+好用的Python脚本。
!!此代码目前仅适用于可以加入购物车的商品
直接上代码!
import datetime import time from selenium import webdriver # 加载所需的库 now = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f') mstime = "2023-03-01 21:00:00.000000" # 首先我们需要设置抢购的时间,格式要按照预设的格式改就可以了,个月数的一定在前面加上0,例如 “01” WebBrowser = webdriver.Chrome() # 选择使用的浏览器,如果没有Chrome浏览器可以更改其他浏览器 WebBrowser.get("https://www.taobao.com") # 京东:WebBrowser.get("https://www.jd.com") time.sleep(3) # 获取网站 WebBrowser.find_element("link text", "亲,请登录").click() # 京东:WebBrowser.find_element("link text","你好,请登录").click() print(f"请扫码登录") time.sleep(10) # 进入网站后读取登录链接,并扫码登录 WebBrowser.get("https://cart.taobao.com/cart.htm") # 京东:WebBrowser.get("https://cart.jd.com/cart_index") time.sleep(3) # 登录后直接转跳到购物车页面 while True: try: if WebBrowser.find_element("id", "J_SelectAll1"): WebBrowser.find_element("id", "J_SelectAll1").click() # 京东:if WebBrowser.find_element("id", "cart-body"): # 京东:WebBrowser.find_element("id", "cart-body").click() break # 这里代码意思是找到购物车全选的按钮并点击全选 except: print(f"
✏️作者:银河罐头
📋系列专栏:JavaEE
🌲“种一棵树最好的时间是十年前,其次是现在”
目录 TCP/IP协议应用层协议自定义应用层协议DNS 传输层协议端口号UDP协议UDP协议端格式 TCP协议TCP协议段格式TCP工作机制确认应答(安全机制)超时重传(安全机制)连接管理(安全机制)滑动窗口(效率机制)流量控制(安全机制)拥塞控制(安全机制)延时应答(效率机制)捎带应答(效率机制)面向字节流异常情况 UDP 和 TCP 对比 网络层协议IP协议地址管理路由选择 数据链路层协议以太网以太网帧格式 MTU TCP/IP协议 应用层协议 自定义应用层协议 为啥要自定义协议? 当前的应用程序要解决的业务场景是错综复杂的,不同的公司有不同的业务,不同的业务有不同的流程,业务复杂,要用程序来解决这个复杂的业务,程序也就复杂了。因此很难有一个通用的协议满足所有的业务需求。
怎样进行自定义协议? 1)结合需求,分析清楚请求响应(客户端服务器之间)要传递哪些信息
2)明确传递的信息是以什么样的格式来组织
可选的方案是很多的。
约定好协议得格式内容之后,客户端就能够按照这个格式构造数据并发送,服务器按照这个格式解析处理。
约定的协议的内容(传递的信息)是和业务相关性非常大的。但是协议的数据组织的格式(传递的格式)和业务关系不大.
典型的用来组织数据的格式:
XML 标签化的数据组织格式。使用标签来表示键值对,以及树形结构 开始标签和结束标签需要成对出现,标签中间的部分就是标签的内容,内容可以是数字,字符串,还可以嵌套放别的标签。
HTML 是 XML 的特殊情况
XML中标签名字叫啥都是自定义的
json 上述 xml 和 json 都是按照文本的方式来组织的,
优点是可读性好,用户不需要借助其他工具,肉眼能看懂。
缺点是效率不高,占用较多的网络带宽。
xml 要额外传很多标签,json 要额外传很多的key
protobuffer (谷歌) 二进制的表示数据的方式,针对上述的数据信息,通过二进制的形式进行压缩表示了。
特点是肉眼观察不了(二进制直接用记事本打开乱码),但是占用空间小了,占用的带宽也就降低了。
DNS 域名解析系统
域名,网址。
eg:www.baidu.com
要访问网络上的服务器,需要 IP 地址。IP地址不好记,于是就使用一些简单的字符串来表示这个地址。
每个域名都对应了 1/N 个IP 地址。
最原始的做法,是使用一个 hosts 文件
C:\Windows\System32\drivers\etc
像 hash 表一样,建立了 IP 和域名之间的映射关系,当然现在打开 hosts 文件,基本都是空的, # 表示注释
报错情况 报错一 在任意python文件下运行这几行命令
print("是否可用:", torch.cuda.is_available()) # 查看GPU是否可用 print("GPU数量:", torch.cuda.device_count()) # 查看GPU数量 print("torch方法查看CUDA版本:", torch.version.cuda) # torch方法查看CUDA版本 print("GPU索引号:", torch.cuda.current_device()) # 查看GPU索引号 print("GPU名称:", torch.cuda.get_device_name(1)) # 根据索引号得到GPU名称 输出、报错如下:
是否可用: True ... RuntimeError: The NVIDIA driver on your system is too old (found version 10020). 然后在尝试降版本后出现第二个报错:
报错二 同样的命令
print("是否可用:", torch.cuda.is_available()) # 查看GPU是否可用 print("GPU数量:", torch.cuda.device_count()) # 查看GPU数量 print("torch方法查看CUDA版本:", torch.version.cuda) # torch方法查看CUDA版本 print("GPU索引号:", torch.cuda.current_device()) # 查看GPU索引号 print("GPU名称:", torch.cuda.get_device_name(1)) # 根据索引号得到GPU名称 输出结果:
是否可用: False ... AssertionError: Torch not compiled with CUDA enabled 解决办法 首先命令行输入nvidia-smi,查看CUDA版本:
自我介绍 我本硕都是双非计算机专业,从研一下开始学习大数据开发的相关知识,从找实习到秋招,我投递过100+公司,拿到过10+的offer,包括滴滴、字节、蚂蚁、携程、蔚来、去哪儿等大厂(岗位都是大数据开发),现在已经签约蚂蚁。秋招一路走来,踩过不少坑,比如,刚开始学习大数据的时候,看见那么多的组件框架,不知道如何下手;还有在找工作的时候,不知道如何做好充分的准备等等问题。接下来我主要介绍 大数据开发的学习路线,以及八股文总结相关内容。
大数据开发学习路线【亲自实践】 接触过大数据的同学都知道,有众多的大数据框架,比如Hadoop,Flume,Hive,Spark,Flink,Doris等等,那么我们应该如何去学习呢,是否需要学完市面上所有的大数据框架呢,学习这些需要有哪些前置基础呢
前置基础知识 linux + java 注意:java刚开始只需要看java基础就可以了,不需要学习一些web框架,因为不管是源码二次开发还是数仓都不需要用到这些框架(除了平台开发之外),像spring这些web框架,在学习完所有的大数据框架之后,找工作之前如果还有时间,可以去学一学这些框架【加分项】 大数据框架学习路线 Hadoop三件套(HDFS,MapReduce,Yarn) -> Zookeeper -> Hive -> Flume -> Kafka -> HBase --> Maxwell-> Scala(面试从来没被问到过,可以不学) -> Spark -> Flink 注意:这些框架中在面试问的多的:Hadoop三件套,Zookeeper,Hive,Kafka,Spark,Flink 项目推荐(适合做数仓的同学) B站《尚硅谷电商离线数仓》
注意:这个项目涵盖了数仓的建模知识(理论相当重要),还有就是这个分层思路基本上可以和很多企业对齐。
数仓书籍推荐 《大数据之路》
注意:这本书真的是数仓同学必看,里面涉及到的理论和企业中的白皮书基本一样。 刷题 算法题
Leetcode+剑指offer SQL题
牛客 + 面试常见HQL(后面会总结到) 注意:大厂非常看重刷题能力,这个没有捷径,只有天天刷!!!
通往大厂的八股文总结 我是主要从 java基础、计算机基础、大数据开发、数仓、大数据场景题、面试常考刷题 这几个方向来进行了总结
java基础
这一部分我主要参考了JavaGuide,进行了很多的补充(面试中经常问到的),另外答案都是自己重新总结的
计算机基础
大数据开发
数仓理论
大数据场景题
面试常考刷题
有需要上述的资料请私信我或关注我个人主页的公众号
目录
🔍一、云计算基础
1、云计算的概念、特点、关键技术
2、云计算的分类
3、云计算的部署模式
4、云计算的服务模式:IaaS、PaaS、SaaS分别是什么,具体含义要清楚
5、物联网的概念
6、物联网和云计算、大数据的关系
7、了解云计算的数据中心是什么,有什么特点
8、主流云计算平台的主要云产品名称及作用
🔦二、大数据基础
1、常用的数据计量单位及其换算
2、大数据的概念,了解大数据的来源及其多样性
3、大数据的5V特征
4、科学研究的4个范式
5、大数据对思维方式的影响
6、大数据的处理流程
7、大数据的关键技术
8、主要的大数据处理系统及代表产品
9、云计算之父、大数据之父
🔑三、虚拟化与容器技术
1、虚拟化的概念、特征
2、虚拟化的好处
3、虚拟化的分类:从计算体系结构层次上分为哪几类
4、系统虚拟化是什么
5、服务器虚拟化的关键技术哪三个
6、知道常用的虚拟化软件有哪些
7、虚拟化和容器的区别
8、Docker是什么,技术支柱是什么,容器、镜像、仓库三个基本概念
📑四、Hadoop
1、Hadoop是什么
2、Hadoop的核心组件有什么
4、Hadoop的优点
6、Hadoop2.0中加入Yarn的原因
7、Hadoop的三种安装模式
8、Hadoop集群配置的步骤
10、Linux中最基本的shell命令:如cd、cat、rm、cp、mv、source、vim….
📚五、HDFS
1、GFS是什么、HDFS是什么
2、HDFS的体系结构
3、HDFS的存储原理:分块策略和副本策略
4、名称节点、数据节点出错时怎么处理
5、支持三种shell 命令格式:hadoop fs、Hadoop dfs、hdfs dfs
⏳六、MapReduce
1、MapReduce是什么
2、MapReduce的核心思想:
3、MapReduce的体系结构,主从式,了解每个组件的功能
4、Map函数和Reduce函数分别做什么以及MapReduce的工作过程
5、MapReduce适合做哪类任务,它的优缺点
⏲️七、HBase
1、HBase是什么,和Bigtable底层技术的对应关系
2、Hbase与Hadoop其他组件的关系
3、Hbase的数据模型,数据模型中各概念的含义,能够举出例子(参考ppt中)
4、Hbase和传统关系数据库的区别
5、region是什么
6、HBase Shell常用命令
🧧八、NoSQL数据库、云数据库
1、NoSQL的含义
2、了解NoSQL数据库兴起的原因
3、NoSQL数据库的四大类型
4、CAP理论
5、BASE
6、强一致性、弱一致性,最终一致性是什么意思
7、知道云数据库是什么,和传统数据库、NoSQL、NewSQL的关系