关于windows-server:在Windows-Sever2012中配置NTP服务器

我应用的是近程的3A服务器搭建windows server2012,挺不错的,不便做试验一,服务器配置 批改3个注册表:win+r 输出regedit,关上Windows注册表1.依照如下门路:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Parameters\Type鼠标双击 Type 文件;弹出对话框,在 数据数值(V)项输出 NTP,单击确定 2.依照如下门路:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Config\AnnounceFlags 双击AnnounceFlags文件; 在 编辑DWORD 值 的 数值数据 框中键入 5 (容许他人同步我) ,而后单击 确定按钮。 3.依照如下门路:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpServer\Enabled 双击 Enabled文件; 在 编辑DWORD 值 的 数值数据 框中键入 1 (0是敞开,1是启动),而后单击 确定 按钮。 重启Windows Time服务 win+r 输出cmd进入命令提示符界面(肯定要用管理员账户) net stop w32time                   敞开NTP服务 net start w32time                  启动NTP服务 设置 Windows 工夫服务 win+r 输出:gpedit.msc依照如下门路:计算机配置\治理模板\零碎\windows 工夫服务\工夫提供程序  找到服务器设置文件双击 启用 Windows NTP 服务器,显示状态已启用即可; 关上防火墙端口(入站规定):123/UDP 二,在不同的零碎中测试NTP服务器是否搭建胜利。Linux环境中:centos7通过Windows sever2012搭建的NTP 服务器同步工夫。 Windows10环境中:在Windows10上测试NTP服务器是否配置胜利

August 26, 2022 · 1 min · jiezi

关于windows-server:windows-server2012-r2设置禁ping

环境:VPS服务器1.关上“管理工具”界面,抉择“高级平安Windows防火墙”2.点击“入站规定”-右击“文件和打印机共享(回显申请ICMPv4-ln)”项,抉择“属性”3.抉择“惯例”-“已启用”勾上-抉择“阻止连贯”-单击“利用”4.测试,已设置禁止ping

July 20, 2022 · 1 min · jiezi

关于windows-server:windows-server2012-r2修改密码

环境:VPS服务器1.抉择想扭转明码的账户右击,抉择“设置明码” 2.点击“持续” 3.输出想更改的明码,而后点击“确定” 4.点击“确定” 5.单击左下角的win标,点击本人的账户,抉择“登记” 6.而后输出刚刚更改的明码,测试是否胜利。

July 20, 2022 · 1 min · jiezi

关于windows-server:windows-server2012-r2中搭建PHP

我的server环境是租3A网络的服务器1.关上“服务器管理器”-增加角色和性能确保CGI装置,其余的看集体需要而后就下一步-开始装置装置好之后,关上浏览器拜访127.0.0.1示意曾经胜利2.装置Visual C++ Redistributable for Visual Studio 2012 Update 4(x64)另一个同理3.装置并解压php-5.5.8-nts-Win32-VC11-x86.zip解压后挪动到c盘根目录关上C:\php复制php.ini-production为php.ini用记事本关上php.ini做如下批改:extension_dir = "C:\php\ext"   #设置php模块门路date.timezone = PRC   #设置时区为中国时区register_globals = On  #开启GET数据调用short_open_tag = On  #php反对短标签cgi.force_redirect = 0  #开启以CGI形式运行phpfastcgi.impersonate = 1;cgi.rfc2616_headers = 1以下php扩大模块,依据须要抉择开启,勾销后面的分号为开始相应扩大模块extension=php_curl.dllextension=php_gd2.dllextension=php_mbstring.dllextension=php_exif.dllextension=php_mysql.dllextension=php_mysqli.dllextension=php_sockets.dllextension=php_xmlrpc.dllextension=php_pdo_mysql.dll最初,保留退出4.配置php反对iis关上管理工具点击“增加模块映射”申请门路:*.php模块:FastCgiModule可执行文件(可选):C:\php\php-cgi.exe名称:FastCGI最初,确定点击“FastCGI设置”点击编辑批改门路环境变量,点旁边的"..."点击“增加”Name:PHP_FCGI_MAX_REQUESTSValue:1000而后点击“确定”抉择默认文档右击点“增加”名称:index.php5、测试php程序是否失常运行关上:C:\inetpub\wwwroot新建一个index.php文件内容:<?phpphpinfo();?>关上浏览器测试,输出本机地址

July 19, 2022 · 1 min · jiezi

关于windows-server:Windows-Server-2022-和-SQL-Server-2022-亮点解析

数字化时代,从现代化利用到智能运维,从 AI 预测到疾速决策……企业的每一个环节都离不开数据。据 IDC 预测,2026年寰球大数据储量将达到223ZB,及时处理和剖析数据、实现良好的数据治理变得至关重要。 为满足企业现代化数据管理需要,SQL Server 2022 预览版重磅上线!新版本的 SQL Server 将是目前反对 Azure 性能最多的版本,并在性能和安全性方面领有更多翻新成绩,帮忙企业应答当下数据挑战。同样值得一提的是微软在去年也推出了 Windows Server 2022,帮忙企业“两步走”,减速向现代化迈进。 随着 Windows Server 2022 和 SQL Server 2022 新版本的推出,2012 版本的Windows Server 和 SQL Server 也将终止反对 (End of Support)。 技术大咖全面解读,助力企业实现现代化3月25日14:00-15:30,2022 助力企业实现现代化研讨会精彩开播,邀请微软数据与人工智能部资深架构师邓英达、微软 Azure Stack HCI 业务拓展经理高毅两位资深技术专家从新性能、新服务的角度登程,为您全方位解读 Windows Server 2022 和SQL Server 2022的亮点性能: 分享 SQL Server 2022 在性能、安全性、可用性等方面的翻新成绩,以及与 Azure Synapse Link 和 Azure Purview 集成,如何帮忙客户实现大规模的从数据中获取更深刻的见解、预测和治理。解说 SQL Server 2022 本地降级和在线降级的两种形式,Azure 数据库迁徙上云的劣势,降级 Demo 演示。解析 Windows Server 2022 在容器平台、应用程序兼容性和容器化工具方面的诸多翻新和性能改良。会议日程 想深度理解 Windows Server 2022 和 SQL Server 2022 新性能新服务?点击理解详情 ...

March 22, 2022 · 1 min · jiezi

关于windows-server:Windows-Server-2022-正式发布

Windows Server 2022的正式推出,对于Windows Server社区和更宽泛的生态系统来说是一个重要的里程碑。它在 Windows Server 容器平台、应用程序兼容性和容器化工具方面带来了诸多翻新和性能改良。此版本还引入了一个新的Server容器镜像,可反对更好的应用程序兼容性。 在哪些方面进行了降级?多层级的平安体系始终以来微软都将平安放在首位,因而在 Windows Server 2022 中引入了许多晋升安全性的性能。IT 和 SecOps 团队能够利用Secured-core server高级爱护性能和预防性进攻性能,跨硬件、跨固件、跨虚拟化层,增强零碎安全性。新版本减少了更快、更平安的加密超文本传输协定平安 (HTTPS) 和行业标准 AES-256 加密,反对服务器音讯块 (SMB) 协定。 弱小的混合能力当初能够通过与Azure Arc连贯,在本地 Windows Server 2022 获取云服务。此外,在 Windows Server 2022 中,您能够利用File Server加强性能,例如 SMB Compression,通过在网络传输时压缩数据来改善应用程序文件传输。Windows Admin Center可帮忙您体验古代的服务器治理,例如在连贯Azure 的场景中提供新的事件查看器和网关代理反对。 灵便的利用平台在此版本中,咱们还能够看到一些Windows 容器的改良。Windows Server 2022 进步了 Windows 容器的利用兼容性,其中包含用于节点配置的 HostProcess 容器。它反对 IPv6 和双协定栈,还反对应用 Calico 施行统一的网络策略。 最令人惊喜的局部是……为了确保Windows Server 2022与整个云生态高效交融,微软正在踊跃地与 Kubernetes社区开展单干,将Windows Server 2022引入到Azure Kubernetes Service (AKS) 和Azure Stack HCI (AKS-HCI)上的Azure Kubernetes Service,并反对整个生态系统去采纳。目前咱们曾经获得了不错的成绩,越来越多的开发者在为社区做出奉献,欢迎您也一起退出咱们! 随着dockershim行将在Kubernetes中被弃用,咱们打算在微软第一方的Kubernetes 服务(即AKS 和 AKS-HCI)上反对 containerd 作为 Windows Server 2022 的惟一容器运行时。从Windows Server 2022起,这将更合乎云生态的倒退方向,同时咱们也会为客户提供更弱小、更高性能的体验。 ...

November 5, 2021 · 1 min · jiezi

关于windows-server:Windows下常用网络命令

一、前言二、命令1、ping用处:用于检测网络是否通顺,以及网络时延状况(工作在ICMP协定上);可能以毫秒为单位显示发送申请到返回应答之间的工夫量。若应答工夫短,示意数据报不用通过太多的路由器或网络,连贯速度比拟快。ping相似一个测试程序,若运行正确,根本能够排除网络拜访层、网卡MODEM的输入输出线路、电缆和路由器等存在的故障,从而减小了问题的范畴。但因为能够自定义所发数据报的大小及无休止的高速发送,ping也被某些居心叵测的人作为DDOS(拒绝服务攻打)的工具。留神:胜利地与另一台主机进行一次或两次数据报替换并不示意TCP/IP配置就是正确的,必须执行大量的本地主机与近程主机的数据报替换,能力确信TCP/IP的正确性。前提:装置了TCP/IP协定 1.1 格局ping 主机名ping 域名ping IP地址参数格局: ping [-t] [-a] [-n count] [-l length] [-f] [-i ttl] [-v tos] [-r count] [-s count] [[-j computer-list] | [-k computer-list] [-w timeout] destination-list1.1.1 参数阐明参数阐明示例-t始终ping指定的计算机,直至按下Ctrl+C中断-a将地址解析为主机名-n要发送的回显申请数,可能测试发送数据包的返回均匀工夫,及工夫的快慢水平,默认值是4-l发送指定数据量的ECHO数据包。默认为 32 字节;最大值是65500byte-f在数据包中设置“不分段”标记(仅实用于 IPv4),数据包就不会被路由上的网关分段-i生存工夫,同时查看网络运行状况。若2个地址之间理论节点数大于设置值,那就会显示超时(数据包未送达目的地)-v服务类型(仅实用于 IPv4。该设置已被弃用,对IP标头中的服务类型字段没有任何影响)。 -r记录计数跃点的路由(仅实用于 IPv4) -s计数跃点的工夫戳(仅实用于 IPv4),与参数-r差不多,但此参数不记录数据包返回所通过的路由,最多只记录4个 -j与主机列表一起应用的涣散源路由(仅实用于 IPv4),间断计算机能够被两头网关分隔(路由稠密源) IP 容许的最大数量为 9 -k与主机列表一起应用的严格源路由(仅实用于 IPv4),间断计算机不能被两头网关分隔(路由严格源)IP 容许的最大数量为 9 -w期待每次回复的超时工夫(毫秒),示意只ping指定毫秒后完结命令destination-list指定要 ping 的近程计算机-R同样应用路由标头测试反向路由(仅实用于 IPv6),依据 RFC 5095,已弃用此路由标头。如果应用此标头,某些零碎可能抛弃回显申请。 -S要应用的源地址 -c路由隔离舱标识符 -pPing Hyper-V 网络虚拟化提供程序地址 -4强制应用 IPv4 -6强制应用 IPv6 通过ping指标地址,会返回TTL(Time To Live)值,示意DNS记录咋DNS服务器上存在的工夫,是IP协定包的一个值,用于通知路由器该数据包何时须要被抛弃。通过TTL值能够大略判断指标主机的零碎类型是Windows还是UNIX/Linux。在用户没有批改TTL值的状况下,Linux零碎的TTL值为64或255,WindowsNT/2000/XP零碎的TTL值为128,Windows98零碎的TTL值为32,UNIX主机的TTL值为 255。 由此个别TTL值在 100~130ms 之间是Windows零碎,在240~255ms 之间,UNIX/Linux 零碎。 ...

July 16, 2021 · 2 min · jiezi

关于windows-server:Windows卸载工具Geek-Uninstaller-v147142

咱们在用Windows零碎的时候,有时候想卸载一些程序,官网自带的卸载工具“有些软件死活卸载不掉,让人及其焦躁。” 于是咱们就会去下第三方卸载工具,就人不知;鬼不觉装置了360全家桶,当初中国最大的流氓软件就是“360”,也不是说360不好。就是感觉他每次回让咱们平白无故装置些全家桶,浏览器全是广告。而且弊病就是:占用零碎内存。当初介绍一款绿色无毒轻程序Geek Uninstaller 软件介绍Geek Uninstallers是一款高效、疾速、玲珑、收费的软件卸载与清理工具,旨在帮忙用户删除零碎上装置的程序。不同于其余的卸载程序,Geek Uninstaller执行深刻扫描过程,并革除软件卸载后留下的垃圾;它是一款绿色软件,无需装置。 本文由博客群发一文多发等经营工具平台 OpenWrite 公布

July 18, 2020 · 1 min · jiezi

windows安装web服务器看这一篇就够了Apache-PHP-MySQL

本文将为您描述Windows Server Install Apache PHP MySQL(图文详解),Windows下Apache+PHP+MySQL搭建web服务器的方法 环境准备: Windows Server 2012mysql-5.7httpd-2.4php-5.6 (记得官网下载时看好版本x64 VC11)Apache(httpd)apache 官网下载网址 下载之后新建一个wamp目录然后解压进去 然后开始修改默认配置,进入 Apache24 目录,找到 \wamp\Apache24\conf\httpd.conf 用编辑器打开 找到 Define SRVROOT 将后面引号中的值 修改为你存放 Apache24 的 绝对路径(我这里是F盘) #示例Define SRVROOT "F:/wamp/Apache24"按需打开 apache mod_rewrite 模块 LoadModule rewrite_module modules/mod_rewrite.so将 AllowOverride None 修改为 AllowOverride All #查找<Directory "${SRVROOT}/htdocs">AllowOverride None#修改为AllowOverride All继续安装Apache服务,打开cmd窗口(参照官网文档) 找到 Apache24 目录下 httpd.exe 文件的绝对路径然后 后面跟上  httpd.exe -k install -n Apache2.4 安装成功,在Apache24目录下找到 ApacheMonitor.exe 双击运行(F:\wamp\Apache24\bin\ApacheMonitor.exe) 桌面右下角出现 图标,双击打开窗口界面,  点击 Start 开始运行 ...

November 2, 2019 · 1 min · jiezi

URL-重写模块导致-IIS7-应用程序池自动关闭

系统用的是windows server 2012 R2 ,准备使用IIS的ARR,配置好一走应用池就关闭,差点没把我郁闷死,看日志提示 iis 模块 DLL C:Windowssystem32inetsrvrewrite.dll 未能加载。 各种查啊,什么加用户啊权限啊,重新安装修复啊都试过就是不行,后来重新下载安装了一个旧版的rewrite.exe,问题好了,差点哭了由此可以判断,最新版的这个 rewrite.dll 跟 iis7 真的是有 BUG 存在... 如果你的 IIS 配置 URL 重写之后网站打不开,503 错误,应用程序池自动关闭。可以试试旧版本的 URL 重写模块。 目前最新版: 正常可用版: 附下载地址: rewrite_x64_zh-CN.zip 参考链接:https://blog.fyun.org/262.html 如果下载链接失效的话:附赠百度云盘链接:https://pan.baidu.com/s/1eaeD...

October 17, 2019 · 1 min · jiezi

win10远程桌面工具自带的怎么用

远程连接是我们在win10中经常会使用到的一个功能,有的用户会选择使用qq等软件中的远程功能来连接其他用户的电脑。小编在使用win10系统的时候经常会使用系统中自带的远程工具mstsc来连接其他用户的电脑,这样的连接方式既安全又简单,连接也很稳定。但是很多用户都不知道这个功能该如何使用,小编在下方准备了使用mstsc来连接远程桌面的教程,需要使用远程连接的同学快来试一试吧! 操作方法: 1、打开电脑中的运行界面,使用组合键win+r就可以将它打开了 2、接着在输入框中键入命令:mstsc,输入无误之后按下回车键就可以了! 3、这样我们就可以进入到远程连接的界面了,打开之后在窗口中点击下方的“显示选项”一栏! 4、输入之后接着在常规选项卡下方输入需要连接的计算机的名称以及该计算机正在使用的用户名称! 5、完成之后点击连接按钮就可以正常的连接了!若是弹出提示界面,继续点击连接按钮即可! 6、在随后进入到的界面中输入密码即可,接着输入即将连接计算机的密码即可! 7、完成以上的操作之后接着我们就可以看见对方的电脑界面了!到这里就连接成功了! 虽然windows系统一直在升级,但是mstsc这个功能一直保留在了系统中,大家可以在需要远程的时候使用这个工具来进行连接。如果不喜欢这个自带的话,可以试试iis7远程桌面管理工具,还是很好用的。如果你在使用教程的时候有遇到不清楚的步骤,你可以在下面的留言板中给小编留言!

October 16, 2019 · 1 min · jiezi

win7远程桌面管理工具怎么登陆

win7系统其实自身都带了远程登录程序,使用这个程序我们就可以进行用户远程登录别的电脑,帮助相互之间的沟通和协作。那么很多人在具体操作的时候并不知道该怎么办我们首先可以用iis7远程桌面管理工具来解决这个问题,iis7远程桌面连接工具,又叫做iis7远程桌面管理软件,是一款绿色小巧,功能实用的远程桌面管理工具,其界面简洁,操作便捷,能够同时远程操作多台服务器,并且多台服务器间可以自由切换,适用于网站管理人员使用。 像下图那样的先把开始菜单打开,接着单击所有程序命令按钮 在里面找到附件命令夹将其展开,然后就看到远程登录桌面工具选项,单击打开 此时就会弹出来下面那样的设置框,找到常规选项卡并根据提示要求输进去需要远程登录电脑的ip地址和远程登录的帐号,同时把红框中的选项勾上,接着就单击下面的连接键,然后输入密码,这样就可以顺利进行远程登录电脑桌面操控 win7系统桌面右下角图标想要隐藏起来该怎么办?win7系统的桌面找到打开任务栏选项并打开,接着直接点击属性选项 任务栏页面里面有不少的选项,时候找到里面的始终合并隐藏图标并点击 当图标隐藏设置好了,刚才修改的设置进行保存,接着再转到电脑桌面,我们就会发现左面上原来的图标都没有了,在右下角则出现了三角形符号的图标。当在操作的时候需要找到某个软件或者查看信息,那么直接在这个里面就可以了。 怎么查win7系统启动时间?首先,在桌面右键计算机图标选择管理选项,弹出“计算机管理”窗口,再依次打开窗口左侧的系统工具—事件查看器—Windows日志—系统选项 然后在弹出的窗口中通过查看“时间和日期”查找最近的系统事件信息,通过手动查找相关的系统事件,即可查看到对应日期下系统所花费的启动时间

October 8, 2019 · 1 min · jiezi

windows7远程桌面管理工具64位远程管理xp系统的解决办法

现如今很多 win7系统 用户的工作都延伸到了休息时间,很多win7系统用户下班之后回到家还要继续工作,如果公司员工有什么问题,一般情况下需要通过Windows远程桌面连接帮忙解答,尤其是对于互联网行业的用户。现在很多用户使用的是win7系统,但还是有一部分的用户继续使用着xp系统,那么就遇到一个问题,win7系统如何远程管理xp系统桌面呢?下面小编就以 win7 64位系统 为例,为大家介绍远程win7系统远程管理xp系统桌面的解决方法!如果不想碰到那么多的问题的话,我们可以用更专业的iis7远程桌面管理工具来直接管理,iis7远程桌面连接工具,又叫做iis7远程桌面管理软件,是一款绿色小巧,功能实用的远程桌面管理工具,其界面简洁,操作便捷,能够同时远程操作多台服务器,并且多台服务器间可以自由切换,适用于网站管理人员使用。 开启客户端电脑的远程桌面连接 1、进行远程桌面管理前,先对被管理的xp系统电脑进行设置; 2、进入客户端系统,创建一个管理员账户并设置密码; 3、右击桌面的“我的电脑”图标,选择“属性”选项; 4、出现窗口,切换到“计算机名”选项卡,单击“更改”按钮; 5、设置当前电脑的计算机名和工作组,工作组和管理员的工作保持一致; 6、修改后单击“确定”要重新启动电脑; 7、切换到“远程选项”,选择“远程桌面”下的“允许用户远程连接到此计算机”; 8、单击“选择远程用户”按钮出现对话框,单击“高级”; 9、在单击“立即查找”按钮选择创建的管理员账户,再连续单击“确定”按钮即可。 设置Windows 7系统 1、单击“开始→所有程序→附件→远程桌面连接”,单击“选项”按钮; 2、展示设置面板,输入远程计算机名和账户,出 现提示框选择“是”进行连接; 3、连接后会要求输入远程计算机当前登录账户的密码,输入密码; 4、单击“确定”即可登录到远程计算机; 5、切换到“显示”选项设置远程计算桌面的分辨率; 6、在“本地资源”选项中可设置远程计算机的音频、键盘、打印机等属性; 7、在“程序”选项中可设置连 接到远程计算机时,自动启动远程计算机中的某个程序; 8、在“体验”中可设置连接速度,取消某些远程计算机的设置等,如果感觉连接速度慢,可取消远程计算机的桌面背景等功能。

October 8, 2019 · 1 min · jiezi

IDC是什么

IDC:互联网数据中心,是电信部门利用已有的互联网通信线路、贷款资源,建立标准化的电信专业级机房环境,为企业、政府提供服务器托管、服务器租用以及相关增值等方面服务。IDC是全球协作的特定设备网络,用来在Internet网络基础上加速信息的传递,简称机房。正规的IDC公司必须具备有通信管理局发放的互联网数据中心业务许可的IDC证件,由于目前国内ICD行业有90%以上的企业没有相关证件,因此他们就不具备为客户提供此类服务的许可,客户选择他们风险相对较高。华信网通本着诚信发展,创新及服务为本,在全国有多家数据中心运营,可供客户选择的范围较大,以高性价比的绝对优势为用户提供服务。华信网通基于运营多年的IDC数据中心主机托管、主机租用、云主机、虚拟主机、传输链路及与多数据中心间的光纤链路互通优势,具备快速部署能力,及自有的客户多资源管理运营平台,致力于为互联网公司和传统行业公司提供高效、可靠、安全的一站式服务。华信网通已经获得工业和信息化部《互联网数据中心》IDC/ISP、许可证、且同时提交等保三级、ISO27001、ISO9001等经营许可证牌照及资质。网址:https://huaxinnetcom.com

September 10, 2019 · 1 min · jiezi

windows安装git服务器

我选择的是国人自己开发的gogs1.根据文档,选择二进制包下载,我下载的是mws内置windows服务的 nssm我试过,反正我没成功,注册服务的时候提示我OpenServer指定的服务未安装 下载好解压到指定的文件夹下,打开cmd命令框,以管理员身份运行cd gogs,在cmd输入命令gogs.exe web在浏览器输入127.0.0.0:3000,进入gogs配置页面,注意:得提前创建一个gogs的数据库,名字自己定,得和配置填写的一致注册windows服务,修改 D:/Gogs/custom/conf/app.ini 文件的相应信息: RUN_USER = COMPUTERNAME$ //运行应用的用户名称,我们建议您使用 git,但如果您在个人计算机上运行 Gogs,请修改为您的系统用户名称 根据官网说的,我们将端口改为80(前提是80端口不能被别的应用程序占用),将HTTP_ADDR更改为自己的ip,ROOT_URL改为http://域名,DOMAIN改为域名,在C:/Windows/System32/drivers/etc/hosts,添加127.0.0.1 自己的域名或者ip6.使用内置功能cmd.exe以管理员身份打开命令提示符()。运行以下命令: sc create gogs start= auto binPath= "\"C:\gogs\gogs.exe\" web --config \"C:\gogs\custom\conf\app.ini\""确保每个后面都有空格=。您可以选择添加其他参数以进一步修改服务,或在服务管理控制台中手动修改它。成功后可以在服务中看到 要启动服务,请运行以下命令: C:\> net start gogs如果启动不了,将刚开始输入gogs.exe web命令的那个窗口关闭,再试试,如果还不行,就打开任务管理器,点击服务那栏,找到gogs,鼠标右键,点击开始运行,如果还不行就去看系统日志吧

September 9, 2019 · 1 min · jiezi

windows-安装-OpenSSH-Server

按下菜单键 鼠标点击设置 点击并安装 安装完成后打开任务管理器并打开服务 默认是禁用的,鼠标右键选择属性,启动类型更改为自动 回到任务管理器,在服务那栏中找到 鼠标右键选择开始

August 27, 2019 · 1 min · jiezi

rdo远程桌面不可以连接

方法如下: 1、按WIN+Q组合键打开搜索框,输入"远程桌面连接",点击下方提示的远程桌面连接 2、在打开的连接窗口,输入远程机器的计算机名或IP地址,和端口 3、系统可能会有一些提示,点击确认。 4、登入远程主机后,输入远程主机的用户名和密码即可 iis7远程控制: 一款电脑远程监控的工具,IIS7远程桌面管理是一款专业的远程桌面连接软件,无需安装。操作简单方便。完美的界面设计、强大的监控功能、稳定的系统平台,满足了用户实现远程桌面连接的需求。 1、分组功能。 2、导入文本格式选择,杜绝编码错误的发生。 3、单个服务器手动添加。 4、支持特征搜索。 5、到期功能提醒。 6、导入服务器信息一键生效。 7、程序自动更新。

August 7, 2019 · 1 min · jiezi

Scrum的五个价值观勇气-承诺-尊重-专注和开放

Scrum的五个价值观:勇气,承诺,尊重,专注和开放。了解自组织首先要了解这些价值观是如何融入您的项目中的实际事物: 每个人都致力于项目的目标当团队有权做出决策以实现这些目标时,可以实现这种承诺水平,每个人都对项目的计划和执行方式有发言权。第3章中的电子书阅读器团队最初被要求建立一个互联网店面。为了使产品成功,他们不得不忽略这一要求,以便提供更有价值的项目。这是唯一可能的,因为他们被允许做出这个决定 只有团队,Scrum Master和产品负责人。他们不需要通过官僚机构来完成任务。 团队成员互相尊重当团队成员相互尊重时,他们能够相互信任,以完成他们所做的工作。但对于程序员和其他技术人员而言,这种尊重并不总是那么容易。许多程序员,尤其是高技能程序员,往往纯粹基于技术能力。这可能是有效采用Scrum的障碍。如果程序员不尊重产品负责人,他在谈论项目目标时不会听取产品负责人的意见。 一个优秀的Scrum Master会找到方法来增加团队成员之间的相互尊重。例如,他可以向程序员展示产品负责人对用户的思考方式以及公司需求有深刻的理解。随着程序员开始了解该知识如何对项目成功有用,他们开始重视并尊重产品负责人的意见。 每个人都专注于工作当Scrum团队成员正在进行sprint工作时,这是他在sprint 期间唯一的工作。 他可以自由地完成完成sprint积压所需的任何工作,并处理sprint期间对该积压所做的任何更改。当每个团队成员专注于sprint目标并且可以自由地完成满足这些目标所需的任何工作时,整个团队能够组织自己并在需要变更时轻松地重定向。 另一方面,分心的团队是一个效率较低的团队。在现代工作场所中有一个神话,人们 - 特别是程序员 - 在多任务处理时工作得最好,因为他们可以在第一个项目被阻止时转移到第二个项目的任务。这不是人们在现实生活中的工作方式!在项目之间切换,甚至在同一项目中的不相关任务之间切换会增加意外的延迟和工作量,因为上下文切换需要大量的认知开销。放下你目前的工作需要花费大量的心理努力,然后从另一个项目的中心开始。你最终不得不回顾你上次做的事情,只是为了提醒自己你试图解决的问题。告诉团队成员切换到另一个项目上的任务不仅需要执行新任务所需的时间, 不买吗?试试这个思想实验。假设你有两个为期一周的任务。并假装通过物理定律的一些惊人的弯曲,多任务处理不会增加任何开销。您可以无缝地切换这些任务,而无需增加一秒的开销或延迟,因此这两项任务将花费两周的时间。即使在这些完美(和不可能)的情况下,多任务也没有意义。如果你没有多任务,你将在第一周结束时完成第一个任务,第二个任务在第二周结束时完成。但是,如果你执行多任务,那么你必须在第一周花费至少一些时间完成第二项任务,所以直到下周某个时候它才会完成。这就是为什么即使人类擅长多任务处理(我们也不是),这样做也没有意义。 多任务处理不是团队成员分心的唯一方式。他们经常被要求参加无用的会议和无关的委员会,开展与项目无关的活动,并为其他项目提供支持工作。一个好的Scrum团队被允许忽视这些分心而不冒他们的职业或晋升风险。24(现在必须完成的当前项目的支持工作可以添加到sprint backlog中 - 但是只有在取出其他东西才能使其适合时间框时。) 团队重视开放性当您在Scrum团队工作时,团队中的其他人应该始终了解您正在进行的工作以及如何将项目推向其当前目标。 这就是为什么基本Scrum模式中的实践旨在鼓励团队成员之间的开放性。例如,任务板允许每个人看到每个团队成员正在完成的所有工作,以及剩下多少工作要做。Burndown图表让每个人都可以自己测量sprint实现sprint目标的速度。每日Scrum在有效完成时,是一项几乎纯粹的开放式练习,因为每个人都分享他或她的任务,挑战和整个团队的进步。所有这些都可以帮助团队营造相互支持和鼓励的氛围。 为Scrum团队创造一种开放文化听起来很棒,也很积极,而且确实如此。但它通常是Scrum团队最困难的事情之一,因为它是Scrum价值观与公司先前存在的文化冲突的最常见方式之一。 许多公司都有一种不鼓励透明度的文化,并用一种依赖于不透明的严格等级来取而代之。建立这样一种文化的管理者可以通过多种方式从中受益。在一个不透明的组织中,告诉团队实现一个不切实际的目标(“我不关心你是怎么做的,只是完成它!”)会更容易,迫使团队加班加点来实现它。当球队不可避免地无法实现这一目标时,它会让经理对CYA有可能的拒绝(“这不是我的错,他们搞砸了!”)。 这就是为什么开放性和自组织通常是Scrum采用的不可触及的“第三轨”。这是使Scrum采用正确的一个核心概念,但它也要求公司以不同于过去的方式对待团队。接触发展的细节否定了不透明的经理人对CYA的掩护。许多初出茅庐的Scrum团队发现,一旦不透明的管理人员开始看到香肠是如何制作的,他们的采用工作就会受到影响。 开放性威胁着卡通,尖尖,不透明的经理。但实际上,即使是一支优秀的团队也很难采用。从开发人员的角度考虑开放性,开发人员被视为代码的一部分的专家,或者是计划的“守护者”的项目经理,或者是许多用户的唯一联系人的产品负责人关于软件内容的主要决策者。这些团队成员中的每一个都有权将这些事物视为对项目的贡献。将这些内容打开给团队是非常困难的,并且鼓励其他团队成员在未获得许可的情况下共享所有权并进行更改。 这是个人团队成员抵制开放的一种非常自然的方式。但是,当他们通过这个并分享所有权 - 包括在出现问题时的责任 - 与整个团队的所有这些事情,每个人都会受益,因为这是相互信任并快速提供更有价值的软件的唯一方式。 团队成员有勇气站出来参与该项目当你选择开放而不是不透明时,你会让团队变得更强大,而不是以牺牲团队为代价来强化自己。这样做需要勇气,但是当你这样做时,你最终会得到更好的产品和更好的工作环境。 Scrum团队有勇气通过有益于项目的价值观和原则来生活。要想避免价值与Scrum和敏捷价值观发生冲突的公司不断回击,需要勇气。这需要每个团队成员,特别是Scrum Master保持警惕。但它也要求每个人都愿意相信提供有价值的软件将有助于他或她克服对这些价值观的抵制。这也需要勇气,尤其是在与老板坐下来进行审查的时候。要对自己说,“帮助这个团队生产有价值的软件对我来说比对自己的个人贡献吹嘘权利更重要。” 那么你将如何在团队中建立勇气?您如何让团队相信自己,并相信Scrum不仅可以帮助他们构建更有价值的软件,而且他们的公司将看到他们新方法的价值? Agile & Scrum Basis Comprehensive Scrum GuideWhat are Scrum's Three Pillars?What is Agile Software Development?Scrum in 3 MinutesWhat are the 5 Scrum Values?What is the Evolution of Scrum?Classical Project Management vs Agile Project ManagementWhy is Scrum Difficult to Master?What is Velocity in Scrum?What is Agile? What is Scrum?What are the Three Amigos Development Strategy in Agile?Empirical Process Control vs Defined Process ControlHow to Maintain Transparency in Scrum?Scrum vs Waterfall vs Agile vs Lean vs KanbanWhat is 3355 in Scrum Framework?Why Scrum? How Does Scrum Overcome 8 Pain Points We Always face?The Best Free and Commercial Agile Tools - Every Scrum Team Needs!What are the 8 Wastes in Lean?Extreme Programming (XP) vs ScrumWhat is Timeboxing in Scrum?Agile Myth: Documentation and Planning not Needed?

July 3, 2019 · 1 min · jiezi

如何利用NAS搭建网站服务器

利用铁威马NAS,你可以将TNAS架设成一个网站服务器。如需启用网站服务器功能,请前往 TOS 桌面 > 控制面板 > 网络服务 > 网站服务器。1.勾选“启用网站服务器”;2.设置网站服务器的端口号,设置网站根目录(网站根目录:是网站程序的指定存储目录);3.如需强制使用80 端口,请勾选 “强制使用80 端口”;4.如需使用SSL 联机,请勾选“使用安全 联机(SSL)”,并设置端口;5.点击“应用”;6.访问网站服务器(网站服务器的访问地址:http://TNAS IP 地址 + 端口号);注意事项:当前仅支持PHP协议,请使用支持webDAV协议的客户端软件访问网站服务器。

July 2, 2019 · 1 min · jiezi

C-三个Timer

在C#中存在3种常用的 Timer : System.Windows.Forms.TimerSystem.Timers.TimerSystem.Threading.Timer零、System.Windows.Forms.Timer这个 Timer 是单线程的,也就是说只要它运行,其他线程就要等着。 这个 Timer 有如下特点: 完全基于UI线程,定时器触发时,操作系统把定时器消息插入线程消息队列中,调用线程执行一个消息泵提取消息,然后发送到回调方法Tick中;使用 Start 和 Stop 启动和停止 Timer;UI操作过长会导致 Tick 丢失;可以使用委托Hook Tick事件;精确度不高;通过将 Enabled 设置为 True,使 Timer 自动运行从上面的第一个特点可以得知,该 Timer 会造成 WinForm UI 假死,因此如果需要定时处理大量计算或者大量IO操作的任务,不建议使用该 Timer ,接下来我们看一个例子体会一下在IO操作的情况下出现的假死情况: 我们在Form中放入两个Button 一个Lable和一个Timer private void Button_Click(object sender, EventArgs e){ timer.Interval = 1000; timer.Tick += Timer_Tick; timer.Start();}private void Timer_Tick(object sender, EventArgs e){ for (int i = 0; i < 10000; i++) { File.AppendAllText(Directory.GetCurrentDirectory()+"test.txt", i.ToString()); this.label_output.Text = "当前操作:插入数字" + i; }}我们单击计算按钮,我们会发现WinForm出现了假死(无法移动窗口、按钮无法点击等) ...

July 1, 2019 · 2 min · jiezi

Entity-Framework-一对多关系映射

EF中关系映射也是一个很关键的内容,关系映射和属性映射一样,也是在 OnModelCreating 中配置映射。EF中的关系映射有如下三种: One-to-Many Relationship(一对多)Many-to-Many Relationship(多对多)One-to-One Relationship(一对一)我们今天先讲解 One-to-Many Relationship(一对一关系) 零、创建所需类所有实体类公用的抽象基类public abstract class Base{ public int Id { get; set; } public DateTime CreateTime { get; set; } public DateTime ModifiedTime { get; set; }}客户类和订单类public class Customer : Base{ public string Name { get; set; } public string Email { get; set; } public virtual ICollection<Order> Orders { get; set; }}public class Order : Base{ public byte Quanatity { get; set; } public int Price { get; set; } public int CoustomerId { get; set; } public virtual Customer Customer { get; set; }}一、One-to-Many Relationship创建Map映射类在编写代码之前,我们先分析一下客户和订单的关系。一个客户可以有多个订单,但一个订单只能属于一个客户,所以我们用到了EF中的 HasRequired,一个客户又存在多个订单,因此也使用到了 WithMany ,同时 Order 表中有 CustomerId 作为外键,因此我们用到了 HasForeignKey 。根据我们的分析,编写代码如下: ...

July 1, 2019 · 2 min · jiezi

控制反转依赖注入简明教程

在面向对象中IOC是一个重要的设计思想。这篇文章将带领大家快速掌握控制反转和依赖注入。 注:代码基于c#零、IocIoc 英文是 Inversion of Control,中文是控制反转。所谓控制反转,就是A类中有对B类方法的调用,我们调用之前一般都会先new,这样就增加了类和类之间的耦合度。为了降低耦合度,将A类对B类的的控制权交给Ioc容器,让双方都依赖Ioc容器。 一、DIDI 的英文是 Dependency Injection,中文是依赖注入。依赖注入是实现Ioc的一种方式,也是常用的方式。依赖注入的方式主要有三种:构造函数注入、接口注入 和 属性注入。(因为这篇文章知识一个简单的入门,因此我们不讲解这三种注入)我们来通过一个例子,来看一下依赖注入的好处: 故事:小吴是一个公司的CEO,每天都需要司机开车送他上下班,开始他只有一个司机,每次司机生病,他就只能自己开车上下班。因此小吴设立了一个司机部门,部门中有多名司机,由司机部门给小吴指派司机。 分析:从上面的故事可以分析得出,刚开始小吴是依赖者,司机是被依赖者,小吴依赖于小刚。后来通过增加司机部门这个Ioc容器,小吴和小刚之间的关系变为了,小吴依赖于司机部门。 我们通过代码看一下(这里使用到了 .NET 依赖注入容器 AutoFac): static void Main(string[] args){ //接小吴 IContainer driverCont = DriverDepartment(); //司机部门分配一个司机给CEO小吴 CE0_Wu wu = driverCont.Resolve<CE0_Wu>(); wu.Car(); Console.Read();}/// <summary>/// 司机部门/// </summary>/// <returns></returns>private static IContainer DriverDepartment(){ ContainerBuilder builder = new ContainerBuilder(); builder.RegisterType<CE0_Wu>(); builder.RegisterType<Driver>().As<IDriver>(); return builder.Build();}}/// <summary>/// 抽象以来/// </summary>public class Driver : IDriver{/// <summary>/// 开车/// </summary>public void Drive(){ Console.WriteLine("开车送老板");}}public interface IDriver{void Drive();}/// <summary>/// 小吴/// </summary>public class CE0_Wu{private IDriver driver;public CE0_Wu(IDriver driver){ this.driver = driver;}public void Car(){ driver.Drive();}}

July 1, 2019 · 1 min · jiezi

Entity-Framework-小知识四

在EF中并没有提供包含索引和过滤索引的创建方法,那么我们就么发创建了吗?答案是否定的,我们可以通过迁移类进行创建包含索引和过滤索引。首先我们通过 Add-Migration 命令创建一个空的迁移类,然后在 Up方法中输入如下代码: Sql($"CREATE NONCLUSTERED INDEX [{IndexName}] ON [dbo].[User]([Name] INCLUDE ([IdNumber]))");在 Down 方法中输入如下代码: DropIndex("dbo.User","IndexName")

June 18, 2019 · 1 min · jiezi

Entity-Framework-索引

Entity Framwework 6 设置和使用索引,是一个比较 egg 疼的事情,为什么这么说呢?因为Entity Framwework 6的不同版本有不同的设置和使用方法,按照版本来划分,有三种方法: EF6 方法EF6.1.x方法EF6.2.x方法EF6EF6中设置索引比较麻烦,我们需要先进行code first 迁移,然后在迁移类中的 Up 方法中输入如下代码: //创建索引且值唯一CreateIndex("dbo.User","Name",unique:true);//创建复合索引,索引名称为 **NameAndIdNumber**CreateIndex("dbo.User",new []{"Name","IdNumber"},name:"NameAndIdNumber");在 Down 方法中输入如下代码: DropIndex("dbo.User","Name");DropIndex("dbo.User",new []{"Name","IdNumber"});注:EF6中通过迁移类创建的索引无法重命名EF6.1.x该版本定义索引的方法如下: public virtual void OnModelCreating(DbModelBuilder modelBuilder){ modelBuilder.Entity<User>().Property(p => p.Name).HasColumnAnnotation("Index", new IndexAnnotation(new IndexAttribute() { IsUnique=true }));}上面这段代码的意思是,给User表创建一个唯一索引Name。同样上面的代码也可以单独定义在一个类中: public class UserMap : EntityTypeConfiguration<User>{ public UserMap() { Property(p => p.Name).HasColumnAnnotation("Index", new IndexAnnotation(new IndexAttribute() { IsUnique=true })); }}我们前面知道在EF6中创建的索引无法重命名,那么在EF6.1.x中创建的索引是否可以重命名吗?答案是当然可以,我们只需在前一类中的 Up 和 Down 方法写入如下代码即可: public override void Up(){ RenameIndex(table:"db.User",name:"Name",newName:"NameIndex");}public override void Down(){ RenameIndex(table:"db.User",name:"NameIndex",newName:"Name");}EF6.2.x在EF6.2.X中创建索引比较简单,只需要调用 HasIndex 方法即可。 ...

June 17, 2019 · 1 min · jiezi

Entity-Framework-小知识三

零、乐观并发在单服务器上运行的站点,为了防止出现脏读现象,我们一般使用Lock语句关键字,但是如果在分布式站点上使用Lock语句关键字是不起作用的,因为程序锁住了服务器1数据库实例,但服务器2并不知道服务器1已被锁住,这样依然会出现脏读现象。这时我们就用到了EF的乐观并发。 EF中解决并发有两种方式: 利用并发Token;利用行版本的方式代码如下: public class EfDbContext : DbContext{ public EfDbContext() { Database.SetInitializer(new DropCreateDatabaseIfModelChanges<EfDbContext>()); } public virtual void OnModelCreating(DbModelBuilder modelBuilder) { // 利用并发Token modelBuilder.Entity<Users>().Property(t=>t.Name).IsConcurrencyToken(); // 利用行版本 modelBuilder.Entity<Users>().Property(t=>t.Name).IsRowVersion(); }}注:在并发量不是很大的时候可以使用EF的乐观并发,在访问量很大的时候应该使用其他技术处理并发问题。

June 14, 2019 · 1 min · jiezi

Entity-Framework-小知识二

零、基于代码配置基于代码配置是EF6新增的一个特性,操作步骤如下: 创建DbConfig派生类;配置默认连接工厂;设置Database Provider;设置数据库初始化器;1. 创建DbConfig派生类public class EF6Config:DbConfiguration{ public EF6Config(){}}接下来使用 DbConfigurationType 属性在上下文类中设置基于代码的配置类: [DbConfigurationType(typeof(EF6Config))]public partial class EF6DbContext:DbContext{ public EF6DbContext():base("name=EF6DbContext"){} }2. 配置默认连接工厂使用 SetDefaultConnectionFactory 方法设置默认连接工厂(以SQL SERVER 数据库为例): public class EF6Config:DbConfiguration{ public EF6Config() { this.SetDefaultConnectionFactory(new System.Data.Entity,Infrastructure.SqlConnectionFactory()); }}3. 设置Database Provider使用 SetProviderServices() 方法配置数据库提供程序: public class EF6Config:DbConfiguration{ public EF6Config() { this.SetDefaultConnectionFactory(new System.Data.Entity,Infrastructure.SqlConnectionFactory()); this.SetProviderServices("System.Data.SqlClient",System.Data.Entity.SqlServer.SqlProviderServices.Instance); }}4. 设置数据库初始化器在使用 code first 的情况下,可以使用基于代码的配置数据库的初始值: public class EF6Config:DbConfiguration{ public EF6Config() { this.SetDefaultConnectionFactory(new System.Data.Entity,Infrastructure.SqlConnectionFactory()); this.SetProviderServices("System.Data.SqlClient",System.Data.Entity.SqlServer.SqlProviderServices.Instance); this.SetDatabaseInitializer<EF6DbContext>(new CustomDBInitializer(EF6DbContext)()); }}注:.config 中 <entityframework> 的配置优于代码配置,也就是说,如果同时在 .config 中和代码中都设置了配置选项,则优先使用 .config 中的设置。

June 13, 2019 · 1 min · jiezi

Entity-Framework-约定

约定,类似于接口,是一个规范和规则,使用Code First 定义约定来配置模型和规则。在这里约定只是记本规则,我们可以通过Data Annotaion或者Fluent API来进一步配置模型。约定的形式有如下几种: 类型发现约定主键约定关系约定复杂类型约定自定义约定零、类型发现约定在Code First 中。我们定义完模型,还需要让EF上下文你知道应该映射那些模型,此时我们需要通过 DbSet 属性来暴露模型的。如果我们定义的模型由继承层次,只需要为基类定义一个DbSet属性即可(如果派生类与基类在同一个程序集,派生类将会被自动包含),代码如下: public class Department{ public int DepartmentId { get; set; } public string Name { get; set; } public virtual ICollection<Blog> Blogs { get; set; }}public class EfDbContext : DbContext{ public EfDbContext() { } public DbSet<Department> Departments { get; set; }}当然,有时候我们不希望模型映射到数据库中,这时我们可以通过Fluent API 来忽略指定的模型映射到数据库中,代码写在EF上下文中: protected override void OnModelCreating(DbModelBuilder modelBuilder){ modelBuilder.Ignore<Department>();}一、主键约定Code First 会根据模型中定义的id,推断属性为主键(如果类中没有id属性,会查找定义成类名称+id的属性,将这个属性作为主键)。如果主键类型是int 或者 guid 类型,主键将会被映射为自增长标识列。例如我们上一小节中定义的类 Department,类中没有名称为id的属性,但是存在名称为类名称+id的属性DepartmentId,因此DepartmentId属性,将会被映射为自增长的主键。如果一个类中既没有id属性,也没有类名+id的属性,那么代码在运行时将会报错,因为EF没有找到符合要求的字段创建主键。 二、关系约定在数据库中,我们可以通过多张表的关联查询出数据,这多张表之间的关联,就是他们的关系。同样,也可以在模型中定义这样的关系。EF中定义关系要使用到导航属性,通过导航属性可以定义多个模型之间的关系。大部分情况下我们会将导航属性和外键属性结合在一起使用。导航属性的命名规则如下:导航属性名称+主体主键名称 或者 主体类名+主键属性名称 或者 主体主键属性名。当EF检测出外键属性后,会根据外键属性是否为空来判断关系,如果外键可以为空,那么模型之间的关系将会配置成可选的,Code First 不会再关系上配置级联删除。看一个简单的代码: ...

June 13, 2019 · 2 min · jiezi

Entity-Framework复杂类型属性映射

零、创建项目必须代码public class BaseModel{ public int Id { get; set; } public DateTime CreateDateTime { get; set; }}public class Address{ public string Street { get; set; } public string City { get; set; } public string ZipCode { get; set; }}public class User:BaseModel{ public string Name {get;set;} public string Birthdate {get;set;} public string IdNumber {get;set;} public Address Address {get;set;}}以上代码在ORM中称为组合类,EF会将这两个类映射在一张表中。当Code First发现不能推断出类的主键,并且没有通过Data Annotations或Fluent API注册主键,那么该类型将被自动注册为复杂类型。 注意:复杂类型检测要求该类型不具有引用实体类型的属性,还要求不可引用另一类型的集合属性复杂类型的在数据库中映射的列名称为:负载类型类名_属性名我们接下来创建 DbContext 类 public class EfDbContext : DbContext{ public EfDbContext() { Database.SetInitializer(new DropCreateDatabaseIfModelChanges<EfDbContext>()); } public DbSet<User> Users { get; set; }}创建完DbContext类后,我们编写将数据存入数据库的方法: ...

June 13, 2019 · 2 min · jiezi

Entity-Framewor简单属性映射

本节我们只介绍在EF中比较常见的映射 零、表名映射默认情况下可以不配置表名,我们的模型名称将会作为数据库的表名。但是大部分项目会要求数据库表名称的规范,例如我们要将模型 User 在数据库中映射为 Users,那么我们可以这么做,在派生类上下文中的 OnModelCreating 中进行如下定义: modelBuilder.Entity<User>().ToTbale("Users");一、主键映射表的主键我们一般习惯使用 Id 或者以 Id 结尾的方式来命名,EF默认情况下会将 Id 或以 Id 结尾的属性作为主键,如果两者都存在的话,默认会以 Id 作为主键。但是,还存在如下几种情况: 设置联合主键;主键为 int 类型,但是不是自增长的,而是手动分配的。针对上面两种情况,我们分别进行如下配置: //设置联合主键modelBuilder.Entity<User>().HasKey(k => new{ Id=k.Id, UserId=k.UserId});//手动分配主键值modelBuilder.Entity<User>().HasKey(k => k.Id).Property(p => p.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);DatabaseGeneratedOption 是枚举类型,值如下: 值说明Identity标识列Computed计算列None手动分配值二、数值映射数据库中的数值类型有很多种,C#中也有很多数值类型,但是我们无法直接将C#中的数值类型转换为数据库中的数值类型。那么怎么将C#数值类型映射为数据库数值类型呢?这里我们以 C# float 为例,来看一下代码: modelBuilder.Entity<User>().Property(p=>p.Float);通过上面的代码,我们将 C# float 类型映射为了数据库的 real 类型。下表是C#数值类型对应的数据库的数值类型: C#数值类型数据库数值类型intintdoublefloatfloatrealdecimaldecimal(18,2)Int64bigint我们看到上表中有一个C#数值类型 decimal 对应的数据库数值类型是 decimal(18,2) ,括号中的2代表小数点后保留2位,但是在一些情况下我们需要保留小数点后面N位,这时我们可以这么做: modelBuilder.Entity<User>().Property(p=>p.Money).HasPrecision(18,4);三、字符串映射当我们未对string类型的属性配置映射时,默认的数据库类型是 nvarchar(max),但是大部分情况下不会使用这个默认的映射。举几个例子来讲解一下怎么来改变这个默认映射。 字段不可为空//设置Name属性在数据库映射不可为空modelBuilder.Entity<User>().Property(p=>p.Name).IsRequired();字段可为空//设置Birthday属性在数据库映射可为空modelBuilder.Entity<User>().Property(p=>p.Birthday).IsOptional();四、日期映射EF中的日期类型在数据库中默认映射为Date,但是数据库中的日期类型还有很多,并且有时候我们需要将日期类型映射为数据库其他类型,那么我们该怎么做呢?这里我们以映射为 DateTime 为例: modelBuilder.Entity<User>().Property(p=>p.CreateDateTime).HasColumnType("DATETIME");注:数值类型和日期类型属于值类型,因此我们不需要通过 IsRequired 来配置映射字段不可为空,因为默认就是不为空的。但是可以通过 IsOptional 设置可为空。

June 13, 2019 · 1 min · jiezi

技术沙龙-从高并发架构到企业级区块链探索零售创新

伴随消费新理念的不断升级和技术创新发展,零售业逐渐被推到风口浪尖,对此京东曾表示,推动“无界零售”时代的到来理念,倡导实现成本、效率、体验的升级才是终极目标。 此概念一出,零售行业的侧重点开始由销售端向技术端倾斜,趁着一年一度618来临之际,京东云特别在上海举办了主题为"从高并发架构到企业级区块链,探索无界零售的数字化创新"的技术沙龙活动。 本次活动以京东云在零售业以及社交电商方面的核心技术以及成功解决方案为出发点,例如探求大促高并发流量数据库保障经验、社交电商的创新思路以及技术架构等细节,并结合京东云在零售领域的诸多落地实践,详解无界零售数字化创新的方方面面,并与在场的开发者们展开深入探讨。 *从高并发架构到企业级区块链— 探索无界零售的数字化创新—* 01郭理靖京东数据库服务如何应对“大促活动” 众所周知,京东商城流量业务多。很多业务在研发设计初期并不想选用太多种类的数据库,因为并不知道着手的业务规模大小,所以在开始使用MySQL有时候会把日志和大数据字段也写入数据库,随着数据积累量增多,用户规模扩大,未来会涉及数据切换的问题。 ——郭理靖 京东云产品研发部高级总监一直以来每逢大促,与剁手党们共同忙活到“天荒地老”的当属各大电商网站了。为了及时释放各类商品的“杀猪价格”,积极鼓励用户参与琳琅满目的抢购与秒杀环节,电商们可真是十八般武艺样样精通。 此时一门心思“买买买”的你可否想到,面对瞬间爆发的访问压力以及海量的交易数据,TA们如何做到“临高不乱”场景呢?很显然,位于底层架构的数据库实在功不可没。对此京东云产品研发部高级总监郭理靖现场带来了“京东数据库服务如何应对“大促活动”的技术分享。 作为在数据库领域有丰富经验的技术专家,郭理靖分别从京东商城如何运作618的大促实践以及京东云怎样支撑商城以及商城ISV等共同应对高流量大促等角度入手详细加以阐明。 对于一些复杂离线的查询,可以迁移到Elasticsearch或者Hadoop,通过定义一些结转策略,把数据库的数据定期或者实时同步到Elasticsearch、Hadoop中去。 京东商城的订单以及商品库存量较大众所共知。如果选择在一个表单上读写几十亿的数据集,单机肯定无法承受这样的工作量,要是选择拆分为64个表或者128个表单的话,再加上有工具支撑就可以高效解决上述问题,京东内部的分布式数据库服务Jproxy就能派上用场。 关于智能分析,京东云在助力电商的过程中,非常重视SQL慢日志分析以及容量分析,同时也对会运行状态进行详细的监控,比如连接数是不是一直在增长、IO压力、CPU压力等;也尝试做一些故障自愈以及磁盘自动化清理等。 在”京东云的服务实践”方面,在云端提供数据库服务,例如MySQL、Percona、MariaDB、MongoDB、SQl Server等等。另外京东云还在数据库安全、审计、日志等诸多方面提供了丰富的管理功能,也支持Binlog的自动备份和下载。 在监控方面,京东云的尝试也是比较细致的,其中包括监控服务、报警服务等。值得提及的是,其中所有监控项都可以设置规则,比如可以设置CPU及内存使用量超过70%,就进行短信报警。而所有的指标都是对接到云监控系统。“如果用户流量较大,需要进行读写分离的话,我们也支持只读实例创建,最大支持创建8个只读实例,每个只读实例都可以分配一个独立域名,可以直接用域名进行访问。”他补充道。 分享之后,开发者还针对Binlog格式的修改、分布式分表的高可用性等问题展开了细致探讨。 02郑永宽企业级监控系统设计与实践 结合运维知识库,我们可以真正把故障和报警联动起来,对于相关的报警,监控系统可以自动调度对应的预案,从而达到系统的故障自愈。 ——郑永宽 京东云产品研发部总监有人说,做运维,如果从传统部署到大规模自动化,对Coding的能力要求势必越来越高;也有人说,很多IT企业走在“重研发轻运维”的老路上,如今云计算大势所趋肯定要大改;还有人说,现在都聊场景化,高并发下的运维监控要处处“到位”,必须突破原有思维模式…… 监控是什么?监控是运维的生命线。 监控解决什么问题?远远不止发现问题,还需解决发现问题以后的定位,和定位后的止损。从而整体降低故障MTTR,即持续时间。毕竟针对京东这种体量的电商,是不允许长时间宕机的情况发生的。郑永宽总结道:无论是发现问题、定位问题还是解决问题,了解系统状态十分重要,都需要监控系统做及时的反馈。接下来郑永宽谈到了京东云如何做好监控以及如何做好对应的监控系统的问题。 据了解,京东云会针对每个系统做专门的监控梳理,同时对各种异常准备相应的预案,来保证系统的高效运转;首先我们定义了一套统一的监控标准:即监控需要覆盖基础-存活-性能-业务四个层面,从而保证了采集数据的全面,进而避免监控遗漏。具体来说,基础监控涵盖了机器的基本指标,比如CPU、内存、硬盘等;存活监控则聚焦机器和服务进程的存活性;性能监控关注服务对外表现的性能指标,比如PV、平响、错误码等;业务监控则是从用户角度,监控系统是否提供正常服务。进一步,根据不同的报警,我们可以定位到相应的问题,再辅以对应的预案,从而确保了故障的第一时间定位与恢复。 对于监控系统的设计,郑永宽则首先强调了系统设计要以监控业务需求为基础,同时要结合京东云的实际情况。郑永宽接下来介绍了京东云监控系统架构,进一步分析了数据抽象、监控数据采集、数据汇聚与计算、数据存储与查询、异常检查、报警通路等监控系统设计中的关键问题,另外还分享了对日志数据处理和挖掘的相关经验。 据悉,未来京东云还会着手配置化管理,同时做故障自动恢复。"结合运维知识库,我们可以真正把故障和报警联动起来,对于相关的报警,监控系统可以自动调度对应的预案,从而达到系统的故障自愈。 03赵金勇社交电商SaaS产品技术架构 无论是宝宝树还是小红书的场景化社交,这种势头的兴起是有目共睹的;现在的消费群体更注重设计感及品牌的内在价值等,面对电商发展的四化,传统电商群体遇到了前所未有的瓶颈。 ——赵金勇 京东云应用研发部社交电商负责人你了解社交电商吗? 你知道微信小程序SAAS化吗? 实力强大并有口皆碑的京东电商云在社交电商领域究竟有哪些技术优势呢? 有关这些问题的答案,京东云应用研发部社交电商负责人赵金勇表示,从整个电商发展来看可以被总结为“四化”,分别是去中心化、场景化、碎片化以及个性化。逐一说明,我们发现流量成本越来越高,“带领着”获客成本、品牌商运营成本也一路居高不下,这恐怕就是品牌商自己不做运营选择其他途径的原因,正所谓“品牌形象宣传去中心化” 就是这个道理。 “同样,无论是宝宝树还是小红书的场景化社交,这种势头的兴起是有目共睹的;现在的消费群体更注重设计感及品牌的内在价值等,面对电商发展的四化,传统电商 群体遇到了前所未有的瓶颈。”他补充道。 所谓社交电商,必然与”社交”关系密切,进而社交工具自然必不可少。除了凭借五花八门的推送工具,京东云社交电商还凭借京东与生俱来的海量商品以及优势供应链屡获成绩。基于京东大数据营销的能力,海量用户的精准画像以及商品推销、智能选品等这些稳定可靠的基础服务来打造系统。 据了解,京东社交电商分三端,分别是买家端、供应商端和PC端。未来社交电商的系统会接入到京东庞大的商品池,大家可以在整体的商品池中挑选自己的产品,共同的良性生态就此构建。 04张作义基于企业级区块链框架系统JD Chain的技术实践 京东区块链品牌名叫京东智臻链,京东区块链的架构体系分为JD Chain和JD BaaS(Blockchain as a Service)两部分。在今年发布的《2019京东区块链技术实践白皮书》中,5大类、14个应用案例的信息都在列。 ——张作义 京东数科区块链产品创新负责人一直以来,商品的防伪溯源被认为是当今最有前景的区块链落地领域之一,也被戏称为让零售行业创新发展的“无上法宝”。 与传统溯源比较而言,区块链溯源究竟有怎样的技术、产业优势?能够帮助解决零售业务中怎样的痛点?如今还有哪些相关技术创新应用在传统零售行业中? 对此京东数科区块链产品创新负责人,区块链联合实验室创新生态负责人张作义特别在现场聊了聊京东区块链防伪追溯的实践经验。从京东区块链技术与应用着手,详细解析了京东区块链技术的整体技术架构、演进过程以及在零售业落地的应用案例与宝贵经验等内容。 ...

June 6, 2019 · 1 min · jiezi

重启电脑真的可以解决问题吗是的

小时候,电脑出问题了,我以为这句话只有网管会跟我说......长大后,我发现专业人士也会对我说...... 在我们遇到问题时,通常的解决办法是“从头开始”。从头开始解决问题,可以使我们有效地避免之前出现的错误,同时更好地了解问题发生的方式和原因。 在技术领域,这一战略也同样适用。 电脑运行缓慢或没有响应?重启! 还是不行?放轻松!再重启试一次! 大家可能会疑惑,为什么重启电脑可以解决那些不知道从哪儿来的问题呢? 首先,计算机有两种不同类型的内存: 非易失性存储器:即使关闭计算机,非易失性存储器也允许您长期存储数据。但这种类型的存储器相对较慢。一些示例可以是硬盘,光盘(CD,DVD或蓝光)或USB棒。 易失性存储器:易失性存储器速度非常快,但它需要持续的能量来维持其内容。由于其速度上的优势,因此易失性存储器也被用作计算机的工作存储器。 内存是由操作系统来管理的,操作系统控制正在运行的进程并为每个进程分配空间。每个进程在此空间中存储它此时正在操作的数据,并从操作系统请求资源(例如更多内存,访问CPU或访问外围设备),当它不再需要它时就必须要释放它们。 程序可能会出现编程错误,导致计算机以不稳定的方式运行: 例如,编程错误可能导致程序进入无限循环,消耗CPU而不做任何事情并减慢其余进程的速度。众多编程错误集中,对资源的占用:一个进程请求大量资源,或者随着时间的推移发出小请求但不释放先前获得的资源。最终的结果是其余的进程只有很少的可用资源,必须等到它们被释放后空出来才行。内存的管理可能是一个很大的问题。在只占用、不释放内存的情况下,进程可能会尝试访问未请求或之前已释放的内存。这种错误的访问有可能会以意想不到的方式修改进程的数据。在更极端的情况下,将会修改其他进程的数据或某些进程的二进制代码。操作系统也可能有自己的缺陷,导致资源无法使用或者进程结束执行但仍然占用资源。重新启动计算机是一种“以强制方式”修复工作内存的方法:消除它并从头开始。使用这种方法,没有必要担心问题的原因:我们返回工作记忆的“正确”状态,如果导致错误的相同情况不再发生,它们将不会再发生。 因此,重启计算机其实是很有效的操作: 它可以同时解决不同类型的问题:资源积累,僵尸进程,进入无限循环的程序,内存损坏等。我们不需要花时间来诊断问题的原因。如果由于异常情况的组合而出现错误,重启后这样的情况通常不会再次出现,并且看起来我们已经“修复”了问题。但是,必须记住,重新启动不是解决所有问题的方法。 例如,它不能解决硬件问题或消除恶意软件(如果存在)。如果我们的计算机不够强大,或者因为我们在启动计算机时运行了太多程序,或者因为我们想要使用的程序需要的资源比我们拥有的资源多,这些都是“重启”所无法解决的问题。

June 4, 2019 · 1 min · jiezi

verdaccio搭建npm私有库

Serverserver:all developers can have access to it, the server environment is windows.We need to use the npm command to install verdaccio, so we have to have a node environment. step1: install the node environment Download node install nodeVerify that the installation was successfulOpen cmd and input 'node -v' step2:Installation start verdaccio Install verdaccioOpen cmd and input 'npm install -g verdaccio' Start verdaccioinput 'verdaccio' ...

May 16, 2019 · 2 min · jiezi

Entity-Framework初体验

零、初体验新建控制台程序,名称为:MyFirstEF在NuGet中搜索 Entity Framework,如下图: 创建 Blog 类:public class Blog{ public int Id { get; set; } public string Name { get; set; } public string Url { get; set; } public DateTime? CreatedTime { get; set; } public double Double { get; set; } public float Float { get; set; }}创建一个继承自EF上下文的类,此上下文是与数据库交互的一个中间桥梁,我们可以称之为会话,并且为每一个模型公开一个DbSet:public class EfDbContext : DbContext{ public EfDbContext() { } public DbSet<Blog> Blogs { get; set; }}注:上下文派生类中定义DbSet有如下三种方式: //用DbSet属性public class EfDbContext : DbContext{ public EfDbContext() { } public DbSet<Blog> Blogs { get; set; }}//用IDbSet属性public class EfDbContext : DbContext{ public IDbSet<Blog> Blogs { get; set; }}//只读属性public class EfDbContext : DbContext{ public DbSet<Blog> Blogs { get {return Set<Blog>();} }}在主函数上添加如下代码:static void Main(string[] args){ using (var efDbContext = new EfDbContext()) { efDbContext.Blogs.Add(new Blog() { Name = "张三", Url = "http://www.baidu.com" }); efDbContext.SaveChanges(); }}运行控制台程序,如果未出现任何报错,则会在VS对应的本地数据库中看到新创建的 Blogs 表和一条新数据。 ...

May 14, 2019 · 1 min · jiezi

Entity-Framework简介

零、什么是Entity FrameworkEntity Framework (简称EF),是.NET的 Object/Relational Mapping 实体框架(简称ORM),可以在 SQL Server、MySQL、Oracle、等数据库上使用。可以将数据作为业务对象和实体进行操作,使用LINQ进行查询,使用C#进行操作和检索。 一、领域建模方式Entity Framework 有三种领域建模方式:Code First、Model First和Data First Code First Code First 可以通过类来描述模型,然后通过类来创建数据库,这种类简称为POCO(Plain Old CLR Object)。POCO中的C是指 .NET Framework公共语言运行时(Common Language Runtime,CLR)中的一个简单对象。POCO对域对象使用尽可能简单的类,可以包含属性、方法等,但是方法不能实现持久化逻辑,也就是说POCO也可以包含业务逻辑。Code First 优点如下: 可以创建一个更富有逻辑、更灵活的应用程序;因为没有自动生成难以修改的代码,所以我们可以对代码完全控制;只需要定义映射,其余一切交给Entity Framework来处理;可以用修改代码的方式来修改数据库;可以使用它来映射表结构到一个已存在的数据库。Model First Model First 允许我们使用实体设计器在空模型中创建模型实体,及其关系和继承层次结构,然后创建数据库。优缺点如下: 无法控制实体和数据库,因为自动生成的代码难以修改,但是对于小型且简单的项目,它仍行之有效;在实体中添加额外的功能,不得不修改T4模板或者使用部分类来完成;数据库模型的更改不是最佳选择,因为是由模型定义了数据库。Data First Data First 使我们能够从现有数据库创建模型,减少了自动生成代码所需编写的代码量,也限制了我们使用生成代码的结构。优缺点如下: 如果已有DBA设计的数据来单独开发或已存在数据库,将作为首选通过EDM向导为我们创建实体、关系和继承层次结构,修改映射后还可以生成实体;要在实体中添加额外的功能,必须通过T4修改模板或者使用部分类;数据库的手动更改变为可能,如果要修改数据库表结构,只需要从数据库更新实体模型即可。

May 11, 2019 · 1 min · jiezi

阿里云windows转linux系统后数据盘文件系统更改

**windows数据盘的文件格式为ntfs,linux的文件格式为ext2/3/4等现在讲服务器系统由windows切换为linux后,系统盘的格式自动切换问linux,但是数据盘还是ntfs。虽然可以不更换数据盘格式,直接通过软件,挂载读取数据盘的内容,但这会导致读取速度异常缓慢,所以决定要格式化数据盘。** 1。fdisk -l查看服务器中的盘 可得,数据盘路径为/dev/xvdd1。2.fdisk /dev/xvdd1数据盘分区。*此处得到一个错误:/dev/xvdd1 is mounted; will not make a filesystem here!由于xvdd1这个盘被挂载了,需要卸载umount /dev/xvdd1重启服务器*按照界面的提示,依次输入“n”(新建分区)、“p”(新建扩展分区)、“1”(使用第1个主分区),两次回车(使用默认配置),输入“w”(保存分区表),开始分区。这里是以创建1个分区为例,开发者也可以根据自己的需求创建多个分区。3.格式化新分区在进行分区格式化时,开发者可以自行决定文件系统的格式,如ext2、ext3等。这里以“ext3”为例:使用下面的命令对新分区进行格式化。 mkfs.ext3 /dev/xvdd14.挂载新分区使用命令“mkdir /mydata”创建mydata目录,再通过“mount /dev/xvdd /mydata”命令手动挂载新分区后,用“df -h”命令查看,出现以下信息说明挂载成功,即可以查看到数据盘了。 阿里云关于linux数据盘挂载教程:https://help.aliyun.com/docum...

April 24, 2019 · 1 min · jiezi

Windows平台安装Oracle Database 18.3

Windows平台安装Oracle Database 18.3对于Win10同样适用,大同小异。软件环境Windows Server 2019评估版虚拟机(不破解的话180天试用)Oracle Database 18.3 64bitJava 81. 检查Jdk是否完成配置JDK安装和配置在搜索引擎上很多很详细,这里就不赘述了。2. 下载Oracle Database 18.3安装包18c下载地址,选到18.3 Windows x64版本,下载到的会是一个ZIP的压缩包。3. 解压并运行setup.exe4. 安装Oracle Database 18.3来了来了,要跳坑了!a. Configuration Option:Create and configure a single instance databaseb. System Class:Destop Classc. Oracle Home User: Use Virtual Accountd. Typical Installation:默认的配置是这里设置Oracle base、Database file location指向相对的位置和设置Oracle Database的password。注意:这里不修改base文件所在位置,会出现以下的错误[INS-30011]–The specified Oracle base location is invalid。错误[INS-32014]是说我设置的密码不符合Oracle的标准。这里,我又新建了一个文件夹叫做“Oracle Base”,然后再Oracle Base那一栏选择刚建好的文件夹,下方Database file location也会自动变成E:Oracle Baseoradata,然后改了下密码下一步。e. Prerequisite Checks:这里需要一点时间。然后会弹出来这个界面,勾上Ignore All选项就可以继续往下了f.Summary:点install开始安装g. Install Project:这里等待安装时间比较久h. Finsih:看到这个界面,那么数据库安装已经完成。i. 测试是否已安装,使用安装时候附带sqlplus或者进入cmd后键入sqlplus命令都可以,登陆用户名为system,密码为你刚才上面设置的密码。出现 SQL> 说明登陆成功。工具连接Oracle Database命令行窗口操作并不方便,所以我们需要让工具连接到我们的数据库来操作。数据库管理工具有很多,比如DataGrip、Navicat、PL/SQL Developer、DBEaver、SQLyog等,我这里用Navicat。该软件收费,文末附上补丁,有条件还是支持正版好。下载后安装打开,新建connection,选择Oracle。这里要选择连接类型要选择TNS,否则会出错。Navicat补丁 提取码:9wss 链接失效可以留言或关注微信公众号“大大大西西瓜皮”后台回复。

April 20, 2019 · 1 min · jiezi

Mac地址修改,解决Teamviewer商业限制

Mac地址修改,解决Teamviewer商业限制方案MAC地址(Media Access Control Address),直译为媒体访问控制地址,也称为局域网地址(LAN Address),以太网地址(Ethernet Address)或物理地址(Physical Address),它是一个用来确认网上设备位置的地址。在OSI模型中,第三层网络层负责IP地址,第二层数据链接层则负责MAC地址。MAC地址用于在网络中唯一标示一个网卡,一台设备若有一或多个网卡,则每个网卡都需要并会有一个唯一的MAC地址。Teamviewer被检测为商业用途,每次连接5分钟就会被弹下来,现在teamviewer有提供解封,我试着解封到现在还没收到回复……官方解封看这里噢我也下载过Teamviewer 14的自动改ID版本(貌似能用),但是出于安全考虑我没继续用下去,这里试着修改Mac地址解决Teamviewer的商业限制。网卡类型网卡分为有线网卡和无线网卡,有线网卡的Mac地址容易修改,但无线网卡Mac地址稍微麻烦一些。因为我用的是笔记本所以该的是无线网卡。有线网卡和无线网卡Mac地址修改如下。有线网卡Mac地址修改调用命令行窗口,键入“ipconfig /all ”命令查看有线网卡的信息,它的抬头是Ethernet adapter 以太网,这里可能会列出vmware或者virtaulbox的一些信息,这些也是以Ethernet adapter开头的,注意区分。途中红框位置就是Mac地址,接下来我们来修改它。打开Manager(设备管理器)找到Network adapters(网络适配器)找到有线网卡,名称可以看上方的命令行窗口中的显示的Description,我的有线网卡名称是 Realtek PCIe GBE Family Controller右键有线网卡那一项,选到Properties(属性)弹出来的窗口上选到Advance(高级)选项卡找到列表中的Network Address(网络地址)单选框选中Value,填入一个合适的值(12位的数字或者字母,这里不带 - )保存即可我这里以000C29E7B28C为例,在cmd里重新执行“ipconfig /all ”会看到有线网卡Mac地址已更改无线网卡修改无线网卡的修改步骤其实就是比有线网卡多了一步写注册表的步骤。图中红框是我的无线网卡,但是进入到Properties的Advance选项卡中会发现找不到Network Address这一项,这里需要通过写注册表来把这项给加上去。win + r -> cmd -> regedit导航到 HKEY_LOCAL_MACHINESYSTEMCurrentControlSet ControlClass{4D36E972-E325-11CE-BFC1-08002BE10318}\展开这层目录会看到很多文件夹,例如0000,0001,0003……这里需要找到无线网卡和有线网卡的两个文件夹,可以点开文件夹,看右手边的窗口显示的AdapterModel的名称,对应上就是你的有线网卡或无线网卡(每台机器可能不太一样)。在这里我的无线网卡是0001文件夹,我的有线网卡是0002文件夹。在无线网卡(以我的为例,是0001文件夹下)的"Ndi"的“Params"文件夹下右键新建一个Key,叫“NetworkAddress”接下来要到有线网卡的目录(以我的为例,是0002文件夹下)下同样找到NetworkAddress的key下面的value对应的在无线网卡的目录(以我的为例,是0001文件夹下)下建立一份相对应的。新建是在右边面板右键new -> String Value之后的步骤就是回到Manager中,右键Properties,Advance,找到NetworkAddress,填入Value。注意:这里网友说Mac地址填入的字符,第二个字符必须使用2,6,A或E,否则不成功!不过我好像没遇到。保存后,cmd使用“ipconfig /all ”就能看到无线网卡Mac地址修改成功。Teamviewer解决商业限制卸载Teamviewer的应用,最好把设置也remove删除Teamview的注册表信息,我怕残留,直接ctrl + f,搜索所有teamviewer的注册表信息,都删除了重启后,先修改Mac地址,重新安装Teamviewer。到此,解决了Teamviewer的限制问题,但是每过一段时间又要重新修改Mac地址,是有点麻烦。(唉!)如果能解封还是去解封吧,我这是要连接Linux服务器上的会被限定。官方解封看这里噢

April 16, 2019 · 1 min · jiezi

在阿里云上单机使用Nginx负载均衡发布网站

恕我见识短浅,不知道Nginx有Windows版本,可以运行在Windows系统下,当初遇到Socket并发压力增长,学习负载均衡的时候,找的是LVS的4层负载均衡,没有考虑7层负载均衡,所以一直不了解Nginx的Windows版本。今天写此教程,就是为了告诉大家怎么在Windows下配置Nginx。首先说,Nginx正常用法应当是在 网站发布在多机器上,实现网站压力大的时候,增加网站的负载能力和提高可用性能。本文选择单机发布多站点,首先是为了学习下Nginx的配置,其次是可以这样来实现网站的“高可用”。对于正式业务,可以选购阿里云的负载均衡SLB产品,不应当使用这种单机多站点的发布方法。本文将使用阿里云的ECS作为测试站点,使用条件:ECS有公网IP,使用Windows系统并装有IIS服务,安全组和防火墙提前放行80端口。【准备工作】首先在IIS里,建立几个的80之外的端口的临时网站(不要占用80端口,因为一会要把80端口给Nginx用):只有一个首页,内容分别是编号 web01、web02、web03……发布端口分别设置为81、82、83……在阿里云ECS内部使用浏览器检查下(http://127.0.0.1:81、http://127.0.0.1:82、http://127.0.0.1:83……),能分别看到各自的内容表示演示站点搭建无误【下载Nginx 1.15.9(windows版本)】官网地址:http://nginx.org/download/ngi… (需要其他版本请访问 http://nginx.org/en/download…. 自行寻找)【配置过程】使用远程桌面连接登录到阿里云服务器上,将Nginx文件下载到在服务器上解压缩,我的路径是 C:webnginx-1.15.9找到配置文件 C:webnginx-1.15.9conf 目录下的 nginx.conf 使用记事本(推荐notepad++)打开,这里就是配置文件,需要对新手说明一下的是,前面带有#的表示注释。1,添加配置,把前面准备好的几个站点放进去这里是自己添加的,本文单机演示,同ip不同端口,实际应用环境应该是不同内网ip,相同端口upstream linuxidc {server 127.0.0.1:81; server 127.0.0.1:82; server 127.0.0.1:83; #如果还有其他站点(机器),在这里添加即可}2,找到 location 配置节点,添加 proxy_pass 节点,内容配置为 http://linuxidc; (linuxidc是upstream的节点名称)location / {root html;index index.html index.htm;#添加转发配置,这里的 linuxidc是upstream的节点名称proxy_pass http://linuxidc;}然后访问下,在远程桌面里,打开系统自带的浏览器,反复刷新访问下Nginx的端口 127.0.0.1:80 ,会看到不同的站点的内容,说明Nginx配置成功3,最后一步,在自己其他的设备上,使用浏览器访问阿里云ECS的公网IP,看下是否跟第二步的结果相同,能正常打开表示网站发布完成!【写在最后】本文只做了最简单的入门教程,教大家使用Nginx实现网站的负载均衡最基础的部分,通过配置文件,可以看到其他配置信息:设置错误页面,设置文件访问权限,绑定SSL证书,配置不同节点的权重等等,这些还需要进一步试验学习原文地址: https://www.opengps.cn/Blog/V… 文章的更新编辑依此链接为准。欢迎关注源站原创文章!

March 25, 2019 · 1 min · jiezi

记录一次windows server上,反向代理服务器的配置和使用

背景我司的软件在一个客户处测试功能和性能,这个客户比较特殊:他们客户端是很旧的java代码,且要求不能改动,客户端的主要业务简单说就是上传下载文件他们提供了客户端demo,http请求是用裸socket手动加http头,写死了http1.1,但又不带’host’这个http header客户要求中间必须经过一台windows server服务器代理后端的实际服务器是linux系统,用的是nginxhost header问题(此时先直连后端服务,不考虑代理)最开始是请求直接返400,nginx access log可以看到400但是没有更多信息,error log则没有任何信息打印,一开始另一位同事负责定位,我跟着一起用wireshark抓包看了很久,没得出结论。后来我又看了一下,nginx error log默认的日志级别是crit,那么直接改到debug,看到这个信息:那么问题就一目了然了,查了一下,这个header是http1.1要求必须带的且nginx严格遵守该协议,没有提供可配置的方式忽略这个头,按理说其实服务端不应该强行处理这种问题,但客户要求最高,没办法这时候好在,正好我们需要一层反向代理,那么,看看能不能找一个允许不带该header的反向代理服务器实现,接下来可以暂时忽略这个问题,我们使用压测工具测性能,压测工具在这个header上是没有问题的代理布署及性能问题windows server系统的服务器,一开始我们直接用Nginx,但简单测后就知道性能很差,搜了一下基本是说nginx和apache在windows上性能都没啥希望,首推的基本还是微软自家的IIS,于是我们配起了IIS,果然性能与直连后端相比基本没有损耗,但是经过很长时间查资料,找不到配置忽略host header的方法,而且IIS的确不好用,配置比较难看懂,大家都不熟悉windows平台,接下来只能另辟蹊径python:老本行,用twisted写了个4行的反向代理,性能比nginx倒是好一点,但大概也只有直连的1/6,时间紧迫,没来得及分析,继续尝试其他语言nodejs:在github找到个redbird库,代码也是只需要两行,但性能跟python半斤八两java:捡了个undertow的框架,折腾挺久终于搞起来,倒是基本没有性能损耗,于是就要解决header问题,但是这个版本的400返回没带提示信息,java框架源码要反编译看,这个倒还好,但是没有错误信息,不好直接搜代码,只能看流程,比较难看go:代码倒是长一些,要二三十行,性能不出意外也是等于直连,惊喜的来了,它的400带了个错误信息提示:missing required Host header,当时那个幸福感。。。无法形容,直接对go产生了满分好感于是直接打开源码目录全局搜,找到src/net/http/server.go,如下一段// hosts, haveHost := req.Header["Host"]isH2Upgrade := req.isH2Upgrade()// if req.ProtoAtLeast(1, 1) &amp;&amp; (!haveHost || len(hosts) == 0) &amp;&amp; !isH2Upgrade &amp;&amp; req.Method != "CONNECT" {// return nil, badRequestError("missing required Host header")// }// if len(hosts) &gt; 1 {// return nil, badRequestError("too many Host headers")// }// if len(hosts) == 1 &amp;&amp; !httpguts.ValidHostHeader(hosts[0]) {// return nil, badRequestError("malformed Host header")// }果断注释掉了上面这些,跑起来没有问题。但是到这还没结束,压测跑了一会儿发现请求全部失败,看了一下报错,socket爆了,在cmd里netstat查了一下,果然go进程接近2w的socket消耗,全部是TIME_WAIT状态查一下就知道,本端主动关闭的socket,就会进入该状态,被对方关闭是CLOSE_WAIT。那么查一下,有说设置注册表的[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetservicesTcpipParameters]“TcpTimedWaitDelay”=dword:0000001e感觉并不是解决办法?实测也不能解决问题。想想就知道,关键应该是找到为什么go会频繁关闭socket,那么google的关键字就应该是这样了:go socket time_wait(而不是windows socket time_wait)搜索结果第一条stackoverflow的就是答案:https://stackoverflow.com/que…在main函数里加上配置:http.DefaultTransport.(*http.Transport).MaxIdleConns = 8192http.DefaultTransport.(*http.Transport).MaxIdleConnsPerHost = 8192这个值的含义见链接,简单说就是允许接收的最大并发数,我们压测工具跑的是100并发,实际只需要这个值是200就够了 ...

March 8, 2019 · 1 min · jiezi

win10下vue-devtools的安装和使用

网上关于vue-devtools的安装数不胜数,但是自己操作起来却总是遇到问题。写下这篇随笔,以防以后忘记。vue-devtools是一款基于chrome游览器的插件,用于调试vue应用,这可以极大地提高我们的调试效率。当然网上教程确实多,很容易理解,但是新手操作实在会卡住。这里介绍一篇,大家可以去看看https://blog.csdn.net/zhousen…。我这里写下我安装的全过程,以及走过的弯路,及解决办法。方法一:chrome商店直接安装vue-devtools可以从chrome商店直接下载安装,非常简单,这里就不过多介绍了。不过要注意的一点就是,需要FQ才能下载。方法二:(主要讲方法二)一、下载chrome扩展插件GitHub下载地址:https://github.com/vuejs/vue-…这个下载的话:下载zip格式的文件二、解压到本地记得看清楚文件的目录,等会需要访问到此目录,当然你也可以解压在c盘,不建议什么东西都往c盘扔;三、win+r 输入 cmd 打开命令行操作为了方便新手,cmd也敲出来;像很多操作都是cnpm install,npm install ,npm run build等操作;等下再介绍,先进入我们解压文件的目录:进入后输入 cnpm install;可以看下,会有错误,当然如果你下载了npm,cnpm,自然不会报错;之前卡这里很久,到处找,没有找到,毕竟新手。npm:node.js下的包管理,下载node.js 会附带npm。然后我又跑去找node.jsde的下载方法。介绍大家可以去看这个node.js下载博客:https://www.cnblogs.com/goldl…node.js的下载网址:http://nodejs.cn/download/由于我的电脑是64位的windows系统;下载完成后,双击安装一路next,到了安装目录后,默认C盘,(建议改成D盘,自己新建的目录)我的是D盘,nodejs,选好后点击next。这里需要主要,点击add to path,不需要配置环境,不然又得去操作环境配置,还有这边下载安装完成后,不要随便改变文件夹,不然得重新配置环境变量。。。。。点击next,install,finish。。。下载完成后会在你的文件夹有:那个.msi是我之前下的,可以删除现在可以去操作npm 了,记得重新打开命令行,首先查看环境变量,会发现自动配好了node,和npm,你会发现现在两个居然不在同一个文件夹输入node -v ,npm -v可以查看刚才下载的node,npm的版本;注意不要忘记输入空格。现在只是安装了npm,还有cnpm需要安装输入这个命令: npm install -g cnpm –registry=https://registry.npm.taobao.org输入: cnpm -v 检查版本,四、cnpm install,npm run build 等操作 现在我们可以回到vue-devtool的下载了。。。。。。记得需要进入自己下载解压文件的位置虽然我也不知道是在干啥,但是我知道应该是成功了:时间有点长,需要耐心等一等。。。。cnpm install操作完成后进行npm run build完成后显示:然后进去到文件夹内,一定是shells下的chrome的manifest.json文件,进入本地编辑器,做如下图修改,false 改成 true五、扩展Chrome插件打开chrome浏览器,打开设置>点击或者程序>点击开发者模式>加载已解压的扩展程序

March 8, 2019 · 1 min · jiezi

netty搭建web聊天室(1)

之前一直在搞前端的东西,都快忘了自己是个java开发。其实还有好多java方面的东西没搞过,突然了解到netty,觉得有必要学一学。介绍Netty是由JBOSS提供的一个java开源框架。Netty提供异步的、事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可靠性的网络服务器和客户端程序。也就是说,Netty 是一个基于NIO的客户、服务器端编程框架,使用Netty 可以确保你快速和简单的开发出一个网络应用,例如实现了某种协议的客户、服务端应用。Netty相当于简化和流线化了网络应用的编程开发过程,例如:基于TCP和UDP的socket服务开发。一些IO概念NIO (non-blocking IO) 非阻塞BIO (blocking IO) 阻塞以上两种又可分为同步和异步,即同步阻塞,同步非阻塞,异步阻塞,异步非阻塞。阻塞:数据没来,啥都不做,直到数据来了,才进行下一步的处理。非阻塞:数据没来,进程就不停的去检测数据,直到数据来。至于这块的详细概念,大家可以自行百度学习。总之,netty处理io很高效,不需要你担心。netty结构可以看出它支持的网络传输协议,以及容器支持,安全支持,io.工作流程:所有客户端的连接交给住主线程去管理,响应客户端的消息交给从线程去处理,整个线程池由netty负责。搭建服务创建maven工程引入最新的依赖<project xmlns=“http://maven.apache.org/POM/4.0.0" xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=“http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.mike</groupId> <artifactId>netty</artifactId> <version>0.0.1-SNAPSHOT</version> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>io.netty</groupId> <artifactId>netty-all</artifactId> <version>4.1.32.Final</version> </dependency> </dependencies></project>创建消息处理器package netty;import io.netty.buffer.Unpooled;import io.netty.channel.Channel;import io.netty.channel.ChannelHandlerContext;import io.netty.channel.SimpleChannelInboundHandler;import io.netty.channel.group.ChannelGroup;import io.netty.channel.group.DefaultChannelGroup;import io.netty.handler.codec.http.DefaultFullHttpResponse;import io.netty.handler.codec.http.FullHttpRequest;import io.netty.handler.codec.http.FullHttpResponse;import io.netty.handler.codec.http.HttpHeaderValues;import io.netty.handler.codec.http.HttpHeaders;import io.netty.handler.codec.http.HttpResponse;import io.netty.handler.codec.http.HttpResponseStatus;import io.netty.handler.codec.http.HttpVersion;import io.netty.handler.codec.http2.Http2Headers;import io.netty.util.concurrent.GlobalEventExecutor;/** * /public class ChatHandler extends SimpleChannelInboundHandler{ public static ChannelGroup channels = new DefaultChannelGroup(GlobalEventExecutor.INSTANCE); /* * 每当从服务端收到新的客户端连接时,客户端的 Channel 存入ChannelGroup列表中,并通知列表中的其他客户端 Channel / @Override public void handlerAdded(ChannelHandlerContext ctx) throws Exception { Channel incoming = ctx.channel(); for (Channel channel : channels) { channel.writeAndFlush("[SERVER] - " + incoming.remoteAddress() + " 加入\n”); } channels.add(ctx.channel()); } /* * 每当从服务端收到客户端断开时,客户端的 Channel 移除 ChannelGroup 列表中,并通知列表中的其他客户端 Channel / @Override public void handlerRemoved(ChannelHandlerContext ctx) throws Exception { Channel incoming = ctx.channel(); for (Channel channel : channels) { channel.writeAndFlush("[SERVER] - " + incoming.remoteAddress() + " 离开\n”); } channels.remove(ctx.channel()); } /* * 会话建立时 / @Override public void channelActive(ChannelHandlerContext ctx) throws Exception { // (5) Channel incoming = ctx.channel(); System.out.println(“ChatClient:"+incoming.remoteAddress()+“在线”); } /* * 会话结束时 / @Override public void channelInactive(ChannelHandlerContext ctx) throws Exception { // (6) Channel incoming = ctx.channel(); System.out.println(“ChatClient:"+incoming.remoteAddress()+“掉线”); } /* * 出现异常 / @Override public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) { // (7) Channel incoming = ctx.channel(); System.out.println(“ChatClient:"+incoming.remoteAddress()+“异常”); // 当出现异常就关闭连接 cause.printStackTrace(); ctx.close(); } /* * 读取客户端发送的消息,并将信息转发给其他客户端的 Channel。 / @Override protected void channelRead0(ChannelHandlerContext ctx, Object request) throws Exception { FullHttpResponse response = new DefaultFullHttpResponse( HttpVersion.HTTP_1_1,HttpResponseStatus.OK , Unpooled.wrappedBuffer(“Hello netty” .getBytes())); response.headers().set(“Content-Type”, “text/plain”); response.headers().set(“Content-Length”, response.content().readableBytes()); response.headers().set(“connection”, HttpHeaderValues.KEEP_ALIVE); ctx.writeAndFlush(response); }}这里面其实只需要重写channelRead0 方法就可以了,其他是它的生命周期的方法,可以用来做日至记录。我们在读取消息后,往channel里写入了一个http的response。初始化我们的消息处理器package netty;import io.netty.channel.ChannelInitializer;import io.netty.channel.ChannelPipeline;import io.netty.channel.socket.SocketChannel;import io.netty.handler.codec.http.HttpRequestDecoder;import io.netty.handler.codec.http.HttpResponseEncoder;/* * 用来增加多个的处理类到 ChannelPipeline 上,包括编码、解码、SimpleChatServerHandler 等。 /public class ChatServerInitializer extends ChannelInitializer<SocketChannel>{ @Override protected void initChannel(SocketChannel ch) throws Exception { ChannelPipeline pipeline = ch.pipeline(); pipeline.addLast(“HttpResponseEncoder”,new HttpResponseEncoder()); pipeline.addLast(“HttpRequestDecoder”,new HttpRequestDecoder()); pipeline.addLast(“chathandler”, new ChatHandler()); System.out.println(“ChatClient:"+ch.remoteAddress() +“连接上”); }}这个pipeline可以理解为netty的拦截器,每个消息进来,经过各个拦截器的处理。我们需要响应http消息,所以加入了响应编码以及请求解码,最后加上了我们的自定义处理器。这里面有很多处理器,netty以及帮你定义好的。服务启动类package netty;import io.netty.bootstrap.ServerBootstrap;import io.netty.channel.ChannelFuture;import io.netty.channel.ChannelOption;import io.netty.channel.EventLoopGroup;import io.netty.channel.nio.NioEventLoopGroup;import io.netty.channel.socket.nio.NioServerSocketChannel;/* * The class ChatServer */public class ChatServer { private int port; public ChatServer(int port) { this.port = port; } public void run() throws Exception { EventLoopGroup bossGroup = new NioEventLoopGroup(); EventLoopGroup workerGroup = new NioEventLoopGroup(); try { ServerBootstrap b = new ServerBootstrap(); b.group(bossGroup, workerGroup) .channel(NioServerSocketChannel.class) .childHandler(new ChatServerInitializer()) .option(ChannelOption.SO_BACKLOG, 128) .childOption(ChannelOption.SO_KEEPALIVE, true); System.out.println(“ChatServer 启动了”); // 绑定端口,开始接收进来的连接 ChannelFuture f = b.bind(port).sync(); // (7) // 等待服务器 socket 关闭 。 // 在这个例子中,这不会发生,但你可以优雅地关闭你的服务器。 f.channel().closeFuture().sync(); } finally { workerGroup.shutdownGracefully(); bossGroup.shutdownGracefully(); System.out.println(“ChatServer 关闭了”); } } public static void main(String[] args) throws Exception { new ChatServer(8090).run(); }}这个启动类就是按照上面那个结构图来的,添加两个线程组,设置channel,添加消息处理器,配置一些选项option。测试启动程序,浏览器访问 http://localhost:8090可以在浏览器看到我们返回的消息,但是控制台却显示连接了多个客户端,其实是因为浏览器发送了无关的请求道服务端,由于我们没有做路由,所以所有请求都是200。可以看到,发送了两次请求。现在我们换postman测试。这次只有一个客户端连接,当我们关闭postman:客户端显示掉线,整个会话过程结束。总结我们完成了服务端的简单搭建,模拟了聊天会话场景。后面再接着完善。别忘了关注我 mike啥都想搞还有其他后端技术分享在我的公众号。 ...

January 21, 2019 · 2 min · jiezi

vue项目路由在history模式下布置在Tomcat下解决刷新404问题

1、首先打包之前需要修改config文件夹下的index.js2、其次记得要添加404路由页面3、在tomcat的webapps下的前端文件夹下新建WEB-INF文件夹,并在该文件夹下建立web.xml文件,具体内容如下<?xml version=“1.0” encoding=“UTF-8”?><web-app xmlns=“http://xmlns.jcp.org/xml/ns/j...; xmlns:xsi=“http://www.w3.org/2001/XMLSch...; xsi:schemaLocation=“http://xmlns.jcp.org/xml/ns/j… http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version=“3.1” metadata-complete=“true”><display-name>Router for Tomcat</display-name><error-page> <error-code>404</error-code> <location>/index.html</location></error-page></web-app>

January 18, 2019 · 1 min · jiezi