天道酬勤,学无止境

IIFP之牛刀小试(初识篇)

  其实,关注论坛真的会带给技术人蛮多的思考点和写作点。这不,前一阵子我在两个不同论坛上看到了内容相似的一个问题,一个是来自于winos:http://bbs.winos.cn/thread-94121-1-1.html,另一个则来自微软官方论坛:http://social.technet.microsoft.com/Forums/zh-CN/windowsserversystemzhchs/thread/e64bdc7c-0bc4-4755-8457-e5f08b74e54d。因为提问者描述文字较多,所以这里请大家先自行进入链接阅读一下帖子内容。
  当我看完这两个帖子,脑子里很快过了一遍相关知识点,也不禁暗暗摇头,貌似活动目录方面确实没有现成的方式方法来满足提问者的需求。两个完全不同的域,它们之间的域目录分区只会在自己域的多台域控之间复制,而并不会被拷贝到其他域,即使它们在同一个林中。举例说明,就是A域的DC上新建了一个用户账号,它不会自动被复制到B域的DC上去,哪怕A域和B域是父子域,哪怕A域和B域是双向信任关系,这都不会发生。同一林中的域控只会去同步配置分区以及架构分区中的内容(配置分区中存储的是活动目录拓扑结构和相关元数据,架构分区中存储的是对活动目录中所有对象的类别及属性的定义)。所以,联想到这里,很多朋友给出的结论可能就是提问者的需求无法实现之类的了。
  不,不一定。我突然想到很早之前曾经接触过一款微软的身份认证、身份生命周期管理产品,MIIS(Microsoft Identity Integration Server)。我们用MIIS可以构建一个元目录(metadirectory),这个目录将分散在其他目录或数据库中的信息统一组织起来,并放在一个集中区域。元目录服务于其他目录,并建立一个链接以便于我们能够控制他们间的数据如何共享。例如,一个数据库中的数据修改可以自动被同步到与之关联的其他数据库。在微软对旗下产品的定义中,MIIS主要执行以下工作:
1. 账号的发布与回收
2. 目录同步
3. 认证信息的集成与管理
  对MIIS,它能够服务的对象不止是活动目录,还包括了活动目录应用程序模式ADAM、NT 4.0、Exchange全局通讯簿(GAL)、Novell eDirectory、Oracle 8i和9i、Lotus Notes / Domino、SQL 7 / 2000、SunOne / iPlanet / Netscape、IBM Informix、dBase等等。比如我在exchange的相关版块中最常见到的就是有工程师利用MIIS来同步多个邮件域的GAL或者做Lotus Notes到exchange的帐户迁移。于是,我翻开MIIS的帮助文档,并且寻找到了其中几段文字和几副示意图:
(图一)
图一为我们展示了一个新建用户对象时的MIIS处理模型。可以看到,当一个新的用户帐号被添加到数据库(/活动目录数据库)DataSource1中以后,MIIS先从中拷贝数据将其转储于metaverse(您可以将metaverse理解为元目录数据库中存放身份认证信息的表)中,随后从metaverse再provision给其他的数据源。
(图二)
图二是另外一种常见模型。当几个数据源中已经同步有一个用户对象时,在其中一个数据源中对对象属性做修改都可以传播到其他数据源中的相应位置(图中示例的是用户MikeD的title属性值由district manager变化为vice president)。
  看来,用MIIS来解决前面帖子中的用户需求应该是可行的,甚至可能会超出了我们预想的那么好,因为它不止可以同步两个活动目录数据库的新增用户帐号信息,在已存在的用户帐号属性发生变化时,它依然能够进行精细粒度的增量更新,甚至是用户密码同步。这让做为系统工程师的我们会得到与同一个域内DC之间同步极为相似的体验感。
  OK,那么就为有需求的那几个用户推荐说明一下吧。
  ……
  哦,不急不急,MIIS是如此的强大(虽然上文并未过多地介绍其他功能),自然是需要向微软付费购买才能使用的。但是比较不幸的消息是,MIIS完整版授权费用比较的高昂(有兴趣的朋友可以联系一下当地的软件供应商问问看),另外,试用版的MIIS在当下也不是那么的好找了(当然,如果您有technet或者msdn订阅那就好办了),即使您找到了,180天试用完毕后呢?
  所以,这里,特别地介绍给大家,IIFP(Identity Integration Feature Pack)这款产品。
  与其称IIFP为一款产品,不如称它为一个特性包(Package),一个功能补丁。它其实就是MIIS的一个简化版(非主流叫法:“阉割版”,呵呵),它只能提供AD活动目录,ADAM和Exchange数据库的身份认证集成与同步。但是,最重要的是,IIFP是免费的,您可以在下面的地址中下载到它:http://www.microsoft.com/downloads/details.aspx?FamilyID=d9143610-c04d-41c4-b7ea-6f56819769d5&displaylang=en。
  那么,从这里开始,我将要向您演示的就是如何使用IIFP来实现我们前面看到的用户需求。
  毫无例外,配置之前需要先安装,安装之前先要检查是否满足软硬件条件。
  IIFP对硬件要求并不高,在软件方面呢,需要:
  Microsoft? Windows? Server 2003, Enterprise Edition
  Microsoft? .NET Framework 2.0
  Microsoft? SQL Server? 2000, Enterprise Edition, Standard Edition, or Developer Edition, with Service Pack 3a (SP3a), or
  2005, Enterprise Edition, Standard Edition, or Developer Edition (32-bit or 64-bit) (with Service Pack 1 recommended).
  可以看到,服务器操作系统需要是windows server企业版,然后后台要有一个SQL数据库,我实验环境中使用的是MS SQL server 2008 企业版,也是没有问题的。
  当然了,现在基本上的微软产品都是开发在.net框架之上的,所以首先要安装.netframework2.0了。
  对于IIFP的安装过程,我这里会伴着截图并挑出最关键的一些地方加以说明。
  我的目标是利用IIFP来同步一个名为contoso.com的域中的一个OU内容到另一个名为northwind.com的域中。受限于实验环境,我需要将IIFP安装在contoso.com的PDC上,生产环境中建议使用别的服务器承载IIFP或者单独建置一台IIFP服务器。
1. 在确认具备了所有软硬件条件后,点击IIFP的安装文件,安装包自解压到一个指定目录下,然后会出现很熟悉的安装界面,

没有什么好说的,点击Install Identity Integration Feature Pack .
2. 出现配置向导的的欢迎界面,直接点击“Next”
3. 照例弹出用户接受授权协议的窗口,当然选择同意。
4. 在安装类型选择界面中选择完全安装(complete),下一步
5. 出现数据储存的选择界面,需要输入我们后台SQL数据库的相关信息,

SQL数据库也就是最终IIFP存放metaverse的地方。
6. 随后要求输入IIFP使用的服务帐号,这个帐号是需要在活动目录中先建立好的,并且需要加入到IIFP所安装的服务器的本地系统管理员组中(administrators)
指定好服务帐号,密码及其所在域以后,点击下一步。
7. 出现一个关于IIFP所要用到的组的信息界面,并且里面的内容系统已经自动帮我们配置好了,不用修改,保持默认即可
8. 提示已经准备好了安装前的设置,可以开始安装,点击“start”
9. 如果是将IIFP安装在一台域控制器上(正如我本文所做的一样),会出现一个警告窗口,

这是因为IIFP设计中并不推荐它所使用的服务帐号是域管理员的身份。我在step 6中也提到了,需要把IIFP服务帐号加入要安装IIFP的服务器上的本地管理员组中,而加入域控上的administrators组则意味着成为了拥有至高无上权利的域管理员。这样会存在一定的安全隐患。所以在生产环境中还是建议给IIFP另起个炉灶。
由于实验环境,可以忽略它,点击OK
10. 接着又出现一个警告框,大意是告诉我们需要指定一个位置来存储IIFP密钥集的备份

点击OK
11. 选择一个位置并输入文件名,系统将保存一个bin类型的密钥集副本文件
12. 飞快的安装过程,点击finish完成IIFP的安装。
13. 又出现一个提示窗口,说明需要注销重登录后系统的安全组等等的设定才会生效,点击Yes即刻注销
重新登录后,可以在ADUC中看到前面配置中的多个安全组已经自动建立,
简要的对这几个组做一下说明,
MIISAdmins:这个组的成员对IIFP有完全控制权限,能够访问IIFP中的一切数据。
MIISBrowse:这个组的成员具有使用查询操作来收集用户帐号信息的权限。
MIISJoiners:这个组的成员可以通过Identity Manager访问Joiner和Metaverse Search,在Joiner中MIISJoiners组成员可以join或者project disconnectors,在Metaverse Search中可以查看对象属性或者从Metaverse中断开对象连接。
MIISOperators:这个组的成员权限最低,只有在Identity Manager里的Operations界面下查看操作执行记录的权限而已。
(PS:如果你不知道这段定义中的一些英文关键字,别急,没关系,本文后面会做进一步的联合说明。)
来到数据库服务器上查看,对应的数据库instance也已经建立了出来。
 
至此,对IIFP的安装部分可以算是告一个段落。
装好了以后自然是很想检验一下战果,
找到下图位置,
点击“Identity Manager”,正式进入IIFP的用户管理界面。
一眼看上去,位于此界面上方比较醒目的是几个大的标签,
我们要配置的部分也就集中在这几个标签卡中。
这里先大概对这几个标签做一下说明。
 
Operations
在点击这个标签后看到的界面,是关于所有的Management Agents运行或者别的作业执行时(/后)的记录。你可以在这个界面里中断,清除,或者重新执行IIFP的工作任务。
(因为这里我才新建的IIFP,并没有配置和执行任何任务作业,所以大家看到的是比较空白的样子,待我在后面做些操作后会再截图出来,届时会看到很多记录。)
 
Management Agents
相信很多IT Pro对MA这个东西已经比较熟悉了,现在有各种各样的MA出现在了微软不同产品的配置里,比如SCOM,比如DPM,虽然具体内容可能不尽相同,但是它的功能基本都是一样的,就是此产品和服务对象之间沟通的桥梁。对于本文中的IIFP,MA就是它和连接上的某个AD域(data source or target)之间的数据传递通道。MA负责将数据从Data Source移动到IIFP数据库中,也可以将数据从IIFP数据库移动到Target数据库中去。
做为IIFP配置的最最重要的一块,我后面会对MA这部分进行更多更详细的讲解。
 
Metaverse Designer
与其他两个初始界面中看到的不太一样,在Metaverse Designer下已经存在了很多内容,如下图所示,
可能经常玩活动目录的朋友对这张图上的字眼都会感到非常熟悉,是的,这其实是Metaverse存储在SQL server中的架构信息,我们在活动目录中也能从对象属性或者架构分区中看到类似的信息。通过这个管理界面,可以添加,修改,删除对象类型和属性,甚至是控制哪些属性要被索引,众所周知,索引可以大大提高数据库处理数据的性能。
 
Metaverse Search
这部分很好理解,如图所示,你可以通过定义一些比较和查找条件来搜索存储在SQL数据库中的对象和它们的属性。并且,你还可以更细节地查看是哪个MA创建出的对象,这些个对象被何时修改过,等等等等。
 
Joiner
Joiner这个管理接口是用来查找和查看disconnector对象的,disconnector是在connect space(connect space 是对象及其属性信息进入MA或者从MA出去之前的中转站)中未被连接到Metaverse中现有对象的一种对象(object)。然后可以通过Joiner来修改disconnector object或者手动方式join or project它。
 
(其实在MIIS/IIFP的知识体系中,有非常多的概念点。而这方面的中文资料几乎没有,所以要搞清楚这些知识点建议大家就是去读MIIS/IIFP的帮助文档。
这里我也尽可能的控制了需要提到的这些概念的范围,否则光是铺陈这些知识怕是写几百页也不够的。另外很多知识点在本文的主题中无关轻重的,也会一带而过,避免过多地干扰到读者。还是那句话,如果你对更多关于MIIS/IIFP的内容感兴趣的话,它的help文档相信会是你的不二选择。)
 
大概熟悉了IIFP的相关概念和图形化管理工具以后,后面要做的,便是去配置它。我会在下篇文章中讲述如何创建MA来实现contoso.com和northwind.com这两个毫无关系的域之间的对象属性的同步。
敬请期待!

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • IIFP之牛刀小试(配置上篇)
    在IIFP初识篇中(链接:http://mrfly.blog.51cto.com/151750/341411)我为大家介绍了IIFP的一些基础概念知识和它的安装过程。继而进入配置篇,我将会结合一个实例进一步说明如何使用IIFP在两个不同域之间同步用户对象的属性。 前文中我提到了在Identity Manager中最主要的配置部分是在Management Agents(MAs)这个页面完成的。毫不夸张的说,MA是MIIS/IIFP的命脉。MA是MIIS/IIFP用来控制data source(数据源)中的数据流是如何导入进Metaverse(SQL数据库)或者从Metaverse中导出至data source的,它是由一些内容属性,Rules(规则)和Rules Extension(规则扩展)等组成的这么一个组件。Rules规则是被定义在MA上的,它可以根据在数据源中被发现的对象来决定是否需要在Metaverse中新建对象。规则还被用来决定新增或者已存在的connector objects(connector objects是存储在connector space中的对象,metadirectory元目录使用connector objects来同步已经连接的数据源和Metaverse之间的属性值)该如何连接到Metaverse中的对象上。 这样看这些概念可能比较生涩难懂
  • Google Guice之牛刀小试
    Google Guice由google推出的一开源软件,是超轻量级的,下一代的,为Java 5及后续版本设计的依赖注入容器,其功能类似于如日中天的Spring。 下面我们就来了解一下Guice,在此之前,先看一个官方例子:在应用程序中,要把所有的东西装配起来是一件很乏味的事件,这要涉及到连接数据,服务,表现层类等方面,这是一个比萨饼订购网站的计费代码例子用于这些方面的对比。 public interface BillingService { /** * Attempts to charge the order to the credit card. Both successful and * failed transactions will be recorded. * * @return a receipt of the transaction. If the charge was successful, the * receipt will be successful. Otherwise, the receipt will contain a * decline note describing why the charge failed. */ Receipt chargeOrder(PizzaOrder order, CreditCard creditCard); }
  • 初识编程 | 论如何优雅地学习C语言之命令行参数
    执行程序时,可以从命令行传值给 C 程序。这些值被称为命令行参数,它们对程序很重要,特别是当您想从外部控制程序,而不是在代码内对这些值进行硬编码时,就显得尤为重要了。 命令行参数是使用 main() 函数参数来处理的,其中,argc 是指传入参数的个数,argv[] 是一个指针数组,指向传递给程序的每个参数。 下面是一个简单的实例,检查命令行是否有提供参数,并根据参数执行相应的动作: #include <stdio.h> int main( int argc, char *argv[] ) { if( argc == 2 ) { printf("The argument supplied is %s/n", argv[1]); } else if( argc > 2 ) { printf("Too many arguments supplied./n"); } else { printf("One argument expected./n"); } } 使用一个参数,编译并执行上面的代码,它会产生下列结果: $./a.out testing The argument supplied is testing 使用两个参数,编译并执行上面的代码,它会产生下列结果: $./a.out testing1 testing2 Too many arguments supplied
  • 多线程之数据同步(初识synchronized关键字)
    1 数据不一致问题的引入 之前的一个窗口叫号程序:链接地址 public class TicketRunnable implements Runnable{ /** * 定义50张门票 */ private final int TICKET_TOTAL = 500; private int index = 1; @Override public void run() { while (index <= TICKET_TOTAL) { System.out.println(Thread.currentThread().getName() + " 售出 " + "第 " + index++ + " 张票"); } } public static void main(String[] args) throws InterruptedException { TicketRunnable ticketRunnable = new TicketRunnable(); Thread ticketThread1 = new Thread(ticketRunnable,"售票窗口1"); Thread ticketThread2 = new Thread(ticketRunnable,"售票窗口2"); Thread ticketThread3 = new Thread(ticketRunnable
  • 初识MariaDB之10——MariaDB Galera Cluster
    一、背景介绍无论是采用binlog或者GTID的方式,其本质都是通过I/O_thread和sql_thread的形式进行的同步,因为无法避免复制延迟而饱受诟病,基于上述MariaDB引入了Galera Cluster来解决此问题。二、Galera Cluster介绍Galera Cluster与传统的复制方式不同,不通过I/O_thread和sql_thread进行同步,而是在更底层通过wsrep实现文件系统级别的同步,可以做到几乎实时同步,而其上的MySQL对此一无所知这就要求MySQL能够调用wsrep提供的API来完成,在Mariadb10.1之前的版本,支持Galera Cluster的版本是与Mariadb分开发行的,其版本名称就成为Mariadb-Galera,Mariadb10.1以后的版本中MariaDB Galera Cluste不再单独发行,而是以galera-25.3.12-2.el7.x86_64包的形式出现三、实验目的本次实验操作系统为CentOS7.4,数据库版本为MariaDB10.2.14,验证3节点下通过Galera Cluster实现数据同步。需要说明的是:1.Galera Cluster最少要求3个节点以上,建议是大于3的奇数,2节点虽然可以部署,但无法避免脑裂的出现2.尽管Galera Cluster不再需要binlog的形式进行同步
  • 初识systemd-使用篇
    Linux操作系统的开机过程是这样的,即从BIOS开始,然后进入Boot Loader,再加载系统内核,然后内核进行初始化,最后启动初始化进程。初始化进程作为Linux系统的第一个进程,它需要完成Linux系统中相关的初始化工作,为用户提供合适的工作环境。RHEL 7、CentOS7等linux发行版系统已经替换掉了熟悉的初始化进程服务System V init,正式采用全新的systemd初始化进程服务。systemd初始化进程服务采用了并发启动机制,开机速度得到了不小的提升。 一、systemd概述 systemd即为system daemon,是linux下的一种init软件,由Lennart Poettering带头开发,并在LGPL 2.1及其后续版本许可证下开源发布,开发目标是提供更优秀的框架以表示系统服务间的依赖关系,并依此实现系统初始化时服务的并行启动,同时达到降低Shell的系统开销的效果,最终代替现在常用的System V与BSD风格init程序。systemd是一个专用于 Linux 操作系统的系统与服务管理器。当作为启动进程(PID=1)运行时,它将作为初始化系统运行,也就是启动并维护各种用户空间的服务。 为了与传统的 SysV 兼容,如果将 systemd 以 init 名称启动,并且"PID≠1",那么它将执行 telinit
  • 初识jQuery
    初识jQuery这篇文章是作为自己的第一篇博客,选择jQuery是因为目前正在学习这个,对于jQuery的基本认知在此不会多说(百度即可),只是想记录一下jQuery基本原理,它与JavaScript有什么不同,为什么专业人士称为jQuery库而不是jQuery框架jQuery基本原理jQuery主要是$()的形式,那么,这个$函数大致可以如下写法: function $(str){ //如果str变量是字符串类型 if( typeof(str) == "string" ){ //获取str变量中的第一个字符 var init = str.substring(0,1); //如果第一个字符是#的话 if("#" == init){ //获取str变量中除第一个字符外的其它字符 var other = str.substring(1,str.length); //通过ID定位节点 var element = document.getElementById(other); //如果找到了节点 if(element != null){ //返回 return element; }else{ //返回 return null; } }else{ //继续判断 } }else{ alert("参数必须为string类型"); } } 所以document.getElementById(id
  • react - 3【基础篇】React 与 TypeScript
    3-1 带着问题来学习 3-3 【概念理解】React的前世今生 3-4 【组件化】初识React函数式组件 3-5 【概念理解】JSX 编程思维 3-6 【组件化】配置React的CSS模组 3-7 【延伸阅读】CSS in JS (JSS) 3-8 【资源配置】加载媒体与字体文件 3-9 【组件化】创建class类组件 3-10 【延伸阅读】React的行内样式与CSS 3-11 【概念理解】State vs Props 3-12 【事件驱动】React Event 事件处理 3-13 【异步处理】获取网络API数据 3-14 【异步处理】setState的异步开发 3-15 【死与新生】探索React组件的生命周期 3-16 【概念理解】React 17 版本变化 来源:https://blog.csdn.net/weixin_45345105/article/details/115290520
  • ESの奇妙な冒険前言——初识ES
    ESの奇妙な冒険前言——初识ES ESの奇妙な冒険前言——初识ESElasticSearch与Lucene的关系Lucene全文检索框架什么是全文检索分词原理之倒排索引 ElasticSearch VS Lucene ES vs SolrES vs 关系型数据库ElasticSearch中的核心概念ES数据管理ES数据管理概述基本操作Restful认识基操查询基操 目录CentOS7下安装ES ESの奇妙な冒険前言——初识ES ElasticSearch是用Java开发并且是当前最流行的开源的企业级搜索引擎。 能够达到实时搜索,稳定,可靠,快速,安装使用方便。 客户端支持Java、.NET(C#)、PHP、Python、Ruby等多种语言。 官方网站:https://www.elastic.co/ 下载地址:https://www.elastic.co/cn/start ElasticSearch与Lucene的关系 Lucene全文检索框架 什么是全文检索 全文检索是指: 通过一个程序扫描文本中的每一个单词,针对单词建立索引,并保存该单词在文本中的位置以及出现的次数用户查询时,通过之前建立好的索引来查询,将索引中单词对应的文本位置、出现的次数返回给用户,因为有了具体文本的位置,所以就可以将具体内容读取出来了 分词原理之倒排索引 索引就类似于目录,平时我们使用的都是索引
  • 初识JAVA
    ​ 初次相见,你我都红着脸,希望分别之时,不要红着眼。 大家好,我是不吃肉的小和尚,在接下来的日子里,希望我们可以一起努力,一起进步,出任CEO,迎娶白富美。我相信未来的你肯定会感激现在如此努力的自己。 话不多说,翠花,上酸菜! 要想了解一项事物,必须要了解它的历史,下面我们大致聊一聊JAVA的发展历史。Java 是由 Sun Microsystems 公司于 1995 年 5 月推出的 Java 面向对象程序设计语言和 Java 平台的总称。由 James Gosling和同事们共同研发,并在 1995 年正式推出。 后来 Sun 公司被 Oracle (甲骨文)公司收购,Java 也随之成为 Oracle 公司的产品。 Java分为三个体系: JavaSE(J2SE)(Java2 Platform Standard Edition,java平台标准版) JavaEE(J2EE)(Java 2 Platform,Enterprise Edition,java平台企业版) JavaME(J2ME)(Java 2 Platform Micro Edition,java平台微型版)。 2005 年 6 月,JavaOne 大会召开,SUN 公司公开 Java SE 6。此时,Java 的各种版本已经更名,以取消其中的数字 "2":J2EE 更名为 Java EE,J2SE
  • 初识MariaDB之8——GTID主从复制
    一、背景介绍在MySQL5.6之前,主从复制是通过binlog和position实现的,当A主机宕机后,B主机成为新的主节点,此时在C主机上需要使用sql语句:CHANGE MASTER TO MASTER_HOST='xxx', MASTER_LOG_FILE='xxx', MASTER_LOG_POS='xxx';将自己的复制源指向B主机,难点在于,同一个事务在每台机器上的binlog名字和位置都不一样,怎么找到C主机当前同步停止点在B主机上的master_log_file和master_log_pos位置就成了问题于是MySQL在5.6.2之后产生了GTID,即全局事务ID(global transaction ID),其形式为:DomainID-ServerID-TransactionID,在配置是必须确保每个MySQL服务器的server_id都不相同,同一GTID事务在每个节点上都是相同的。二、GTID与binlog需要注意的是Mariadb的gtid配置方式与MySQL不相同,二者之间不兼容。MaraDB在10.0.2之后的版本默认是启用的,即使从服务器使用的是binlog和position进行主从复制,但他仍是采用GTID进行追踪这就意味着原先的slave配置可以简单的切换到GTID模式STOP SLAVE;CHANGE MASTER TO master_host=
  • 初识JAVA
    初识JAVA 初识JavaJava的发展史Java的优点 初识Java的main方法main方法实例HelloWorld运行Java程序Java中的注释 Java中的整形变量 初识Java Java是一门面向对象编程语言 Java的发展史 任职于太阳微系统的詹姆斯•高斯林等人于1990年代初开发Java语言的雏形,最初被命名为Oak,目标设置在家用电器等小型系统的程序语言,应用在电视机、电话、闹钟、烤面包机等家用电器的控制和通信。 由于这些智能化家电的市场需求没有预期的高,Sun公司放弃了该项计划。随着1990年代互联网的发展,Sun公司看见Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。 Java的优点 Java具有简单性、面向对象、分布式、健壮性、安全性、平台独立与可移植性、多线程、动态性等特点 。Java可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用程序等 初识Java的main方法 首先需要安装JDK并完成环境变量配置 在本地创建一个后缀为.Java的文本文档,然后在Sublime Text3(代码编译器)中打开,随后就可以自己敲代码了,切记在Sublime Text3一定要记得保存,如果未保存那文件大小就为0KB main方法实例HelloWorld
  • Python基础学习(1)
    Python基础学习 第一章:初识Python 一.初识Python Python基础学习前言1、Python简介1.1.1、Python是什么1.1.2、Python书籍推荐1.1.3、Python的安装 总结 前言 适合初学者学习的Python基础学习经验分享,从初学者的角度出发,分享Python基础学习的经验,快来加入学习Python阵营吧! 1、Python简介 1.1.1、Python是什么 Python是一种面向对象的解释型计算机程序设计高级语言。 Python:程序员的“瑞士军刀”。 短小精悍,功能强大 Python特点:简单易学、免费开源、高层语言、可移植性强、面向对象、可扩展性、可嵌入性、丰富的库、规范的代码等。 Python是一门跨平台、开源、免费的解释型高级动态编程语言。 Python支持命令式编程、函数式编程,完全支持面向对象程序设计,语法简洁清晰,拥有大量的几乎支持所有领域应用开发的成熟扩展库。 胶水语言:可以把多种不同语言编写的程序融合到一起实现无缝拼接,更好地发挥不同语言和工具的优势,满足不同应用领域的需求。 ‘‘‘人生苦短,我用Python’’’ Python应用范围非常之广 Python都受欢迎程度也显而易见 Python如此流行,还不赶快开始学习吗?所以,让我们正式进入Python的学习之中! 1.1.2、Python书籍推荐
  • Pycharm小试牛刀(一)——学生管理系统
    Pycharm小试牛刀(一)——学生管理系统 目录 需求分析系统设计功能模块设计 3.1 录入学生信息功能 3.2删除学生信息功能 3.3修改学生信息功能 3.4查询学生信息功能 3.5统计学生总人数功能 3.6显示所有学生信息的功能 3.7显示所有学生信息的功能项目打包 1. 需求分析 首先我们得明确学生管理系统应该具备的功能: 添加学生及其成绩的信息 insert()将学生信息保存到文件中修改modify()和删除信息delete()查询学生信息search()根据学生成绩进行排序sort()统计学生的总分数统计学生总人数total()显示所有学生信息show() 2. 系统设计 流程图: Created with Raphaël 2.2.0 开始 while true 显示主菜单 选择菜单项 判断是否存在该功能? 调用相应函数 yes no 代码演示: def main():#创建主函数 while True: menu() choice=int(input('请选择')) if choice in [0,1,2,3,4,5,6,7]: if choice==0: answer=input('您要退出学生管理系统?Y|F') if answer=='y'or'Y': print('谢谢使用!') break #退出系统 else: continue if choice==1
  • 机器学习笔记(七)——初识逻辑回归、两种方法推导梯度公式
    一、算法概述 逻辑回归(Logistic)虽带有回归二字,但它却是一个经典的二分类算法,它适合处理一些二分类任务,例如疾病检测、垃圾邮件检测、用户点击率以及上文所涉及的正负情感分析等等。 首先了解一下何为回归?假设现在有一些数据点,我们利用一条直线对这些点进行拟合(该线称为最佳拟合直线),这个拟合的过程就称作回归。利用逻辑回归进行分类的主要思想是:根据现有数据对分类边界线建立回归公式,以此进行分类。 线性回归算法后面的笔记会介绍,这里简单对比一下两者,逻辑回归和线性回归的本质相同,都意在拟合一条直线,但线性回归的目的是拟合输入变量的分布,尽可能让所有样本到该条直线的距离最短;而逻辑回归的目的是拟合决策边界,使数据集中不同的样本尽可能分开,所以两个算法的目的是不同的,处理的问题也不同。 二、Sigmoid函数与相关推导 我们想要的函数应该是,能接受所有的输入并且预测出类别,比如二分类中的0或者1、正或者负,这种性质的函数被称为海维赛德阶跃函数,图像如下:但这种函数的问题在于从0跳跃到1的过程非常难处理,比如我们常接触的多次函数,可能在某种条件下需要求导解决问题;而Sigmoid函数也具有类似的性质,并且在数学上更容易处理,其公式如下:下图是Sigmoid函数在不同坐标尺度下的两条曲线图。当x为0时,Sigmoid函数值为0.5,随着x的增大,对应的Sigmoid值将逼近于1
  • Linux之文件元数据与链接
    文件元数据与表结构 每个文件的属性信息,例如文件的大小,时间和类型的信息,这类的信息作为文件的元数据。这些元数据存放特定表内,这个表就是inode。node内有很多的记录组成,主要有以下几个信息: inode的节点号,这个节点的总数据量是在格式化磁盘就已经确定了。 文件的类型 文件的权限信息 文件的所有者ID信息 文件的所有组的ID信息 链接的数量,在存在硬链接时,这个文件会变化 指向实际存放数据的地址指针 关于文件的其他的数据。 上图可以涵盖inode的基本信息,我们通过实验对文件进行操作来实现时间的更改首先准备测试文件,将/etc/fstab复制到/tmp下进行操作查看当前的文件的状态信息对mtime进行修改,将mtime修改到2019年查看修改结果,可以实现。因为属性变化,ctime也会同时变化。 链接 在很多时候,需要将多个访问路径映射到同一个文件 硬链接 硬链接的本质是同一个文件,当创建硬链接时会增加元数据的链接数量,当链接数为1时,再删除才会删除数据文件。硬链接不能跨分区,同时也不能对目录创建硬链接。实例:默认ln 命令创建的就是硬链接可以看到inode号和链接号都有变化 软链接又名符号链接 软链接就是链接文件的一个符号,它并不会对原有文件有影响。可以对目录和跨分区。实例:使用参数s来让ln创建符号链接可以看出符号链接文件fstab2的inode号与源文件不一样
  • 运维学python之爬虫高级篇(六)scrapy模拟登陆GitHub和51cto
    上一篇介绍了如何爬取豆瓣TOP250的相关内容,今天我们来模拟登陆GitHub。 1 环境配置 语言:Python 3.6.1 IDE: Pycharm 浏览器:firefox 抓包工具:fiddler 爬虫框架:Scrapy 1.5.0 操作系统:Windows 10 家庭中文版 2 爬取前分析 分析登陆提交信息分析登陆信息我使用的是fiddler,fiddler的使用方法就不作介绍了,大家可以自行搜索,首先我们打开github的登陆页面,输入用户名密码,提交查看fiddler获取的信息,我这里第一次故意输入错误的密码,结果入下:登陆页面(https://github.com/login ) :输入用户名和错误密码获取的fiddler结果:这里我们用火狐开发者工具也可以看到form提交时会加入authenticity_token参数一起,如下图: 3 开始爬虫 3.1 创建项目 进入你要存储项目的文件夹中执行下面命令: scrpy startproject githubspider 可以根据提示继续创建spider,也可以自己手动创建,使用下面命令: cd githubspider scrapy genspider example example.com 如下图: 项目内容如下: 3.2 开始前准备 在scrapy.cfg同级目录下创建pycharm调试脚本run.py,内容如下
  • 初识MySQL
    初识MySQL MySQL服务的启动和停止MySQL服务的登录和退出MySQL的常见命令MySQL的语法规范参考文献 MySQL服务的启动和停止 方式一:计算机 -- 右击管理 --- 服务 (不建议使用) 方式二 : 启动服务:window10 中 以管理员命令启动 windows PowerShell,命令行输入 net strat mysql0815 停止服务:window10 中 以管理员命令启动 windows PowerShell,命令行输入 net stop mysql0815 其中 mysql0815 为本机MySQL的服务器端的服务名 MySQL服务的登录和退出 前提:确保MySQL处于启动状态 方式一:通过mysql自带的客户端,只限于 root 用户 (不建议使用) 方式二:通过windows自带的客户端 (本机windows 使用windows PowerShell) 登录:(完整命令)mysql -h 主机名 -P 端口号 -u 用户名 -p密码 (登录本机的简洁命令) mysql -u 用户名 -p 密码 退出:exit 或者 快捷键组合:CTRL + C MySQL的常见命令 1.查看当前所有的数据库 : show databases; 2.打开指定的库:use 库名; 3.查看当前库的所有表:show tables; 4.查看其他库的所有表:show
  • 1.初识Python
    1.初识Python 1.1 Python简介 1.1.1 什么是Python 一种开源、免费、跨平台、解释型的高级编程语言 应用领域: web编程、图形处理、黑客编程、大数据处理、网络爬虫、编写脚本、科学计算等 1.1.2 Python的版本 Python 2.x和Python 3.x的区别 print print() 整数相除 整数 浮点 默认编码 ASCII UTF-8 range()和xrange 合并为range() 1.1.3 Python的用途 web开发(google/YouTube/美团/知乎/搜狐/豆瓣的网站开发都有用到) 大数据处理 人工智能 自动化运维开发 云计算 爬虫 游戏开发 1.2 搭建Python环境 1.2.1 开发环境概述 跨平台 Linux/Windows/Mac OS上都可安装 1.2.2 安装Python 下载Python安装包(Python官网直接下载) 直接安装 测试Python是否安装成功 Windows直接打开cmd窗口,出入python,进出交互式Python解释器中>>> 1.2.3 第一个Python程序 print(“Hello World!”) 1.3 Python开发工具 自带的IDLE PyCharm Microsoft Visual Studio Eclipse+PyDev 来源:https://blog.csdn
  • java-启航——关于java入门与java开发环境配置
    java开端——关于java入门与java开发环境配置 java开发环境配置JDK与JVM与JREJDK的安装配置环境变量配置JAVA_HOME 变量配置Path环境变量配置CLASSPATH环境变量 javac和java的使用javac和java使用的注意事项字节码文件与java文件的关系 IDEA的安装 java的入门了解写出你的第一个HelloWorld初识java的main方法public 与类名main方法main方法的运行时参数 println,printf,print 随着C语言的学习慢慢结束,博主也要开始学习一门新语言了,那就是java。所以博主将会开启一个新的关于java的专栏,所以想要慢慢和我一起学习进步的小伙伴记得关注我哦! 那么接下来我们就开始来最开始的入门java吧! java开发环境配置 当然第一步肯定是进行java开发环境的配置 JDK与JVM与JRE 讲到java第一件你要了解的事就是什么是jdk,jvm和jre 为什么呢? 因为java的口号是“一次编译,到处运行”,这是为什么呢?请接着往下看 JDK(Java Development Kit java开发工具包): JDK是java开发工具包,里面包含着java运行环境JRE、一堆java工具(javac/java/jdb等)和 java基础的类库(java API包括rt.jar) JRE