首页 文章 精选 留言 我的

精选列表

搜索[混合检索],共10000篇文章
优秀的个人博客,低调大师

企业级开源意在加速开放混合云

如今,几乎所有的企业都在拥抱开源。这是一件好事,说明整个世界正在走向开源、开放,会加快实现数字化转型目标。问题是,什么是开源,企业开源和社区开源有到底有啥区别? 所谓“开源”,即开放代码,与过去传统的商业软件模式好像背道而驰,传统商业软件更强调私有和转型特性。当然,在开源浪潮的推动下,传统软件也在改变路线,积极拥抱开源。虽然,开源好像看上去已经统一了整个世界,但也有小的细分,除了技术路线的不同分支,还有商业模式的区别,大体被分为企业级开源和社区开源。 什么企业级开源?答案是,以红帽为代表的开源企业,以企业用户为服务对象,将最新的社区开源技术与源代码进行优选和产品化,并以企业级全生命周期产品为辅助支持,同时提供开源技术和方案咨询、实施、培训等服务,满足企业稳定性与创新能力的双重需求。而社区开源比较好理解,就是让企业或个人开发者通过参与上游开源社区,获得最新的开源技术与源代码支持,通过自服务或社区的支持促进企业的数字化发展。 社区开源虽然秉承的是“我为人人,人人为我”的技术理念,但也有一个明显的弊端,就是自服务能力差,当用户碰到一些安全漏洞、补丁缺失的问题时,无法得到企业资源的支持,可能会存在风险。 而使用企业级开源,可以获得诸多好处。第一,能够获得更高质量的软件;第二,是能够访问更具引领性的创新技术,第三,拥有更高的安全性;第四,具备安全使用开源技术的能力。简单来说,就是“高质量”、“创新能力强”和“更安全”。 其中,安全是很重要的一点。过去,很多人以为开源不安全,如今也在慢慢改变理念。红帽在一份调查报告中显示,87%的受访者认为企业级开源更加安全,或者如专有软件一样安全。83%的受访者表示,他们更喜欢选择一家为开源社区做出贡献的厂商。另外,很多IT领导人认为,容器作为最底层架构,对于它的云原生战略非常重要。有85%的受访企业认为,云原生在容器云当中的应用非常重要。此外,有72%的IT领导者期望在未来12个月内,增加对容器的使用。目前,有47%已经将容器用于生产环境。预计未来两年内,有79%的受访企业会在新兴技术领域内,更多地应用企业级开源软件。比如:边缘计算(Edge Computing)和物联网(IoT)领域,预计会从现在的55%增长到两年以后的72%,包括在目前很火的人工智能(AI)和机器学习(Machine Learning),都会增加新的开源技术的应用。 与其他走开源路线的企业相比,红帽秉承的是“上游优先”的原则,所以很多企业级的代码回馈给上游之后,又有成几千万的工程师会同时看到这个软件,以检查是否有安全漏洞。 鸿蒙官方战略合作共建――HarmonyOS技术社区 【责任编辑:赵宁宁 TEL:(010)68476606】

优秀的个人博客,低调大师

DB 与 Elasticsearch 混合应用之数据离线同步

作者介绍 李猛,Elastic Stack 深度用户,通过 Elastic 工程师认证,2012年接触 Elasticsearch,对 Elastic Stack 技术栈开发、架构、运维等方面有深入体验,实践过多种大中型项目;为企业提供 Elastic Stack 咨询培训以及调优实施;多年实战经验,爱捣腾各种技术产品,擅长大数据,机器学习,系统架构。 序言 首先解释下 即时、实时与离线 概念定义,最近碰到很多的认知误区,需要纠正下。 即时概念 当数据变更之后马上就可以查询变更,内部采用事务隔离机制,查询的数据必须阻塞直到数据更新完毕,如单实例关系数据库数据发生变更后,然后马上可查询到。 实时概念 在数据同步场景中,包括异构数据源和同构数据源之间,泛指在可接受的很快时间范围内同步完成,一般的认知是秒级左右,也可以毫秒或者微秒,依据业务需求与实现

优秀的个人博客,低调大师

MyExcel 3.6.0 版本发布,支持列表&模板混合导出

MyExcel,是一个集导入、导出、加密Excel等多项功能的Java工具包。 MyExcel采用声明式语法来构建、读取Excel,屏蔽POI的具体操作细节(对POI无感知),以开发常用的技术替代,使得构建(从简单到高度复杂Excel)以及读取Excel变得极为便利,且构建、读取性能极为优异,占用内存极低(具体,请移步参考MyExcel&阿里EasyExcel性能对比)。 如导入: List<ArtCrowd> result = SaxExcelReader.of(ArtCrowd.class) .sheet(0) // 0代表第一个,如果为0,可省略该操作,也可sheet("名称")读取 .rowFilter(row -> row.getRowNum() > 0) // 如无需过滤,可省略该操作,0代表第一行 .beanFilter(ArtCrowd::isDance) // bean过滤 .read(path.toFile()); 本次更新如下: 重构模板构建器ExcelBuilder,使用TemplateHandler处理模板解析; DefaultStreamExcelBuilder支持模板追加; 新增MyExcelConfiguration,支持对MyExcel进行全局设置,如自定义临时文件目录; 优化ExcelBuilder资源处理,提升模板构建效率; 重命名@ExcelModel等注解对应配置类名称,易于理解; 优化单元测试文件存放目录,避免clone后无法直接执行单元测试问题; 在某些情况下,可能需要个性化的表头,或者汇总等等,这些需求可能会涉及合并行、列、样式等复杂布局,而且导出的数据可能又比较大,DefaultStreamExcelBuilder本身对Bean的能力不足以支撑复杂布局,为兼容海量数据导出与复杂布局,版本3.6.0以及以后,DefaultStreamExcelBuilder支持模板的追加,在模板中定义复杂布局,追加模板方式如下 代码示例: try (DefaultStreamExcelBuilder<ArtCrowd> streamExcelBuilder = DefaultStreamExcelBuilder .of(ArtCrowd.class) .templateHandler(FreemarkerTemplateHandler.class)// 追加模板数据,可选,适合极度个性化数据导出 .start()) { // 模板数据追加 Map<String,Object> dataMap = this.getDataMap(); streamExcelBuilder.append("/templates/test.ftl", dataMap); // 普通数据追加 List<ArtCrowd> dataList = this.getDataList(); streamExcelBuilder.append(dataList); // 最终构建 Workbook workbook = defaultExcelBuilder.build(); AttachmentExportUtil.export(workbook, "艺术生信息", response); } 首先,需要指定模板处理器:templateHandler(FreemarkerTemplateHandler.class),除FreemarkerTemplateHandler,还有BeetlTemplateHandler、EnjoyTemplateHandler、ThymeleafTemplateHandler等其他5种常用模板处理器; 其次,使用append方法追加模板数据,该方法接受相对路径以及绝对路径模板,绝对路径方式如下: append("C:/User/project/templates","test.ftl",dataMap); 最终效果如下: 具体,请移步文档,参见流式导出部分:文档

优秀的个人博客,低调大师

组建多可用区多地域的混合云

场景描述 无特定行业属性,对云下有IDC的用户,上云建立多地域多可用区高稳定性的业务架构,组建合云用户都可适用。物理专线是打通IDC 到云上内网通道的最高质量和稳定性最好方式,但成本较高,交付周期长。 解决问题 云下用户 IDC 应对业务突增弹性扩容能力 云下用户 IDC 业务需要多地域冗余 云上阿里云业务需要多地域冗余 云上阿里云业务需要多可用区冗余 产品列表 专有网络 VPC 云企业网 CEN 高速通道(专线) 负载均衡 SLB 云服务器 ECS 直达最佳实践 》》

优秀的个人博客,低调大师

混合事务分析处理“HTAP”的技术要点分析

HTAP是近些年来比较火的一个概念,本文将聊聊HTAP的前世今生及技术特点。 一、数据应用类别 根据数据的使用特征,可简单做如下划分。在选择技术平台之前,我们需要做好这样的定位。 1.1 OLTP 联机事务处理OLTP(On-Line Transaction Processing) OLTP是事件驱动、面向应用的,也称为面向交易的处理过程。其基本特征是前台接收的用户数据可以立即传送到计算中心进行处理,并在很短的时间内给出处理结果,是对用户操作的快速响应。例如银行类、电子商务类的交易系统就是典型的OLTP系统。 OLTP具备以下特点: 直接面向应用,数据在系统中产生。 基于交易的处理系统。 每次交易牵涉的数据量很小;对响应时间要求非常高。 用户数量非常庞大,其用户是操作人员,并发度很高。 数据库的各种操作主要基于索引进行。 以SQL作为交互载体。 总体数据

优秀的个人博客,低调大师

甜橙金融私有云混合部署综合探索实践

背景 甜橙金融目前有众多的金融及相关衍生产品,且业务的范围和体量也在不断增加,相应的各类应用系统以及微服务的规模也在高速的扩张,这对于后端的运维平台的支撑能力提出了很高的要求。 那么,如何能快速、合理地将现有资源分配给生产的各个服务,并能同时保证分布式、高并发、高可用、高性能等成为整个运维技术团队一直在尝试和探索的方向。 跟大部分互联网公司的发展路线很相似,也是经历了以下几个阶段: 本次主要会针对目前私有云当中容器与虚拟机混部这块的探索和实践做一个分享 简介 我们基于探索性业务系统的一些特征(生命周期不稳定、业务量级增长规模难预估、具有周期性业务高峰等)。 考虑使用容器技术更好更快的支撑业务发展,但同时由于之前基于虚拟机的运维体系架构已较为成熟,所以一定是要在基础设施、系统、网络等层面做很多的适配和尝试,才能在用户几乎无感知的情况下,最终达到虚

优秀的个人博客,低调大师

elasticsearch 支持中英文搜索和混合搜索

环境: ubuntu16.04 安装: elasticsearch 5.22 1. 第一步,安装javaapt-get install default-jreapt-get install default-jdk 2.第二步,安装elasticsearch. 5.22wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.2.2.debdpkg -i elasticsearch-5.2.2.deb 3.启动服务systemctl daemon-reloadsystemctl enable elasticsearchsystemctl restart elasticsearch 碰到问题:[2018-07-02 18:36:32,700][INFO ][node ] [Captain Fate] version[1.7.3], pid[25545], build[NA/NA][2018-07-02 18:36:32,701][INFO ][node ] [Captain Fate] initializing ...[2018-07-02 18:36:32,900][INFO ][plugins ] [Captain Fate] loaded [], sites [][2018-07-02 18:36:32,930][INFO ][env ] [Captain Fate] using [1] data paths, mounts [[/ (/dev/vda1)]], net usable_space [27gb], net total_space [39.2gb], types [ext4][2018-07-02 18:36:35,634][WARN ][common.network ] failed to resolve local host, fallback to loopbackjava.net.UnknownHostException: iZhp3ig1mh8lh6acp6sx0xZ: iZhp3ig1mh8lh6acp6sx0xZ: Name or service not known at java.net.InetAddress.getLocalHost(InetAddress.java:1505) at org.elasticsearch.common.network.NetworkUtils.<clinit>(NetworkUtils.java:55) at org.elasticsearch.http.netty.NettyHttpServerTransport.<init>(NettyHttpServerTransport.java:165) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)修改etc/hosts文件,加上你自己的hostname里面的值127.0.0.1 localhost iZhp3ig1mh8lh6acp6sx0xZ4.验证是否成功curl -XGET "http://localhost:9200" 5.注意的几点: a.新建用户elasticsearch useradd elasitcsearch b.让上面的用户拥有目录:/usr/share/elasticsearch 的权限 chown elasitcsearch:elasitcsearch /usr/share/elasticsearch chown -R 777 /usr/share/elasticsearch sudo chown -R elsearch:elsearch /etc/elasticsearch sudo chmod -R 775 /etc/elasticsearch/ 6.添加支持中文分词的插件等,所有插件,必须和elasticsearch版本一致,下载解压到/usr/share/elasticsearch/plugins目录下面,名字如下=命名: 7.启动的时候可以切换到目录/usr/share/elasticsearch/bin/ . 直接执行./elasticsearch 就可以进行启动了 需要的插件地址都可以在这里找到:https://github.com/medcl 下载如下 elasticsearch-5.2.2.deb elasticsearch-analysis-stconvert-5.2.2.zip elasticsearch-analysis-ik-5.2.2.zip kibana-5.2.2-amd64.deb 问题: 1、Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x0000000085330000, 2060255232, 0) failed; error='Cannot allocate memory' (errno=12) 由于elasticsearch5.0默认分配jvm空间大小为2g,修改jvm空间分配 # vim config/jvm.options -Xms2g -Xmx2g 修改为 -Xms512m -Xmx512m 2.Exception in thread "main" org.elasticsearch.bootstrap.BootstrapException: java.nio.file.NoSuchF ileException: /usr/share/elasticsearch/config 解决方法:cp -R /etc/elasticsearch/* ./config/ Likely root cause: java.nio.file.NoSuchFileException: /usr/share/elasticsearch/config

优秀的个人博客,低调大师

Android与H5混合开发「kotlin,WebView」

Android与H5的交互「kotlin,WebView」 文章参考自尚硅谷-Android与H5的互调,由衷感谢。语言是使用了kotlin,如果不熟悉kotlin,建议看看这篇文章,kotlin还是很值得学习的。 Android与H5的交互,实际上就是通过Android的一个控件WebView来完成的 开头.gif 项目的基础配置,如Log封装类,修改主题,Anko的配置请查看这篇文章。相关代码已经上传到仓库的AndroidToH5文件夹 加载一个网页 WebView控件有点类似于在我们的App中嵌入一个微型浏览器。 加载页面 在module下创建webStudy包,创建WebActivity,在activity_web.xml布局下声明webView控件。 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.administrator.androidtoh5.module.webStudy.WebActivity"> <WebView android:id="@+id/mWebView" android:layout_width="match_parent" android:layout_height="match_parent"> </WebView> </RelativeLayout> 回到Activity,使用loadUrl方法把我们要加载的网页加载进去 package com.example.administrator.androidtoh5.module.webStudy import android.support.v7.app.AppCompatActivity import android.os.Bundle import com.example.administrator.androidtoh5.R import kotlinx.android.synthetic.main.activity_web.* class WebActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_web) mWebView.loadUrl("https://www.jianshu.com/u/8c6b4be8770b") } } WebView的操作是加载网页,所以记得在AndroidMaifest.xml下添加网络权限 <uses-permission android:name="android.permission.INTERNET"/> 运行程序 网页效果.gif 重写返回方法 效果出来了,但是如果我们在webView连续点击去几个子页面后,点击手机物理键返回,我们会发现程序直接挂了,并没有返回到我们之前浏览的网页。 所以我们需要重写程序的返回方法 import kotlinx.android.synthetic.main.activity_web.* class WebActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_web) mWebView.loadUrl("https://www.jianshu.com/u/8c6b4be8770b") } /** * 重写返回回调监听 */ override fun onBackPressed() { //判断WebView是否可返回 if (mWebView.canGoBack()) { //返回上一个页 mWebView.goBack() return } super.onBackPressed() } } 这样我们就可以点击手机物理返回键来返回之前浏览的网页页面啦 滑动到顶部 修改xml布局,增加一个滑动到页面顶部的ImageView <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.example.administrator.androidtoh5.module.study.WebActivity"> <WebView android:id="@+id/mWebView" android:layout_width="match_parent" android:layout_height="match_parent"> </WebView> <ImageView android:id="@+id/mUp" android:src="@drawable/up" android:layout_width="30dp" android:layout_height="30dp" android:layout_alignParentBottom="true" android:layout_alignParentRight="true" android:layout_margin="33dp" /> </RelativeLayout> 设置图片的点击事件,当点击图片时,网页滑动到顶部 import kotlinx.android.synthetic.main.activity_web.* class WebActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_web) mWebView.loadUrl("https://www.jianshu.com/u/8c6b4be8770b") mImgUp.setOnClickListener(View.OnClickListener { //滑动到当前网页的顶部 val pageUp: Boolean = mWebView.pageUp(true) L.d("滑动到底部是否成功:$pageUp") }) } /** * 重写返回回调监听 */ override fun onBackPressed() { //判断WebView是否可返回 if (mWebView.canGoBack()) { //返回上一个页 mWebView.goBack() return } super.onBackPressed() } } 一键到达页面顶部.gif 读取一段html代码,显示到页面上 private fun readHtml() { //WebUtil在项目的util包下,getHtml方法的作用是读取main-assets文件夹下的html文件的代码 val json:String=WebUtil.getHtml("index.html",this) L.d("读取到的html代码:"+json) mWebView.loadData(json,"text/html",null) } 销毁webView mWebView.destroy() 暂停webView mWebView.onPause() 恢复webView mWebView.onResume() 隐藏垂直滚动条 mWebView.setVerticalScrollBarEnabled(false) 还有的情况是当我们需要完整的浏览器时,我们不使用WebView,而是通过Intent直接跳转到手机的浏览器 //当我们需要完整的浏览器的时候不使用WebView,而是直接跳转到默认浏览器 val uri = Uri.parse("https://www.baidu.com/") val intent = Intent(Intent.ACTION_VIEW, uri) startActivity(intent) Java和Js的互调 创建JavaToActivity,在activity_java_to_js.xml下写一个用户名输入框和一个确定按钮 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.example.administrator.androidtoh5.module.webStudy.JavaToJsActivity"> <EditText android:id="@+id/mEditView" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="请输入用户名" /> <Button android:id="@+id/mBtnNext" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="下一步" /> </LinearLayout> 在这里我们并不使用WebActivity那样在xml布局里面把WebView控件写好。而是通过代码方式生成,等到我们需要它的时候,通过setContentView来把WebView填充到界面上 import kotlinx.android.synthetic.main.activity_web.* import org.jetbrains.anko.toast /** * 1,Java调用javaScript方法 * 2,javaScript方法调用Java方法 */ class JavaToJsActivity : AppCompatActivity() { /** * 声明WebView */ private var webView: WebView? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_java_to_js) //进行WebView的基础基础配置 initView() mBtnNext.setOnClickListener(View.OnClickListener { L.d("按钮的点击事件") }) } /** * 进行基础的配置 */ private fun initView() { webView= WebView(this) val webSettings = webView!!.getSettings() //设置支持javaScript脚本语言 webSettings.javaScriptEnabled = true //设置支持js调用java //JsToJava是js回调的类,Js调用的Java方法都应该写在里面 webView!!.addJavascriptInterface(JsToJava(), "Android") //加载网络资源 webView!!.loadUrl("https://a704.gitee.io/web/JavaToJs.html") } /** *js可以调用该类的方法 */ internal inner class JsToJava { //必须有该注解 @JavascriptInterface fun show() { toast("我被js调用了啦") } } } 我们在initView()方法内,通过设置webSetting类的javaScriptEnabled属性为true,以及WebView的addJavascriptInterface方法来使得WebView支持Js和Java的互调 分析下 webView!!.addJavascriptInterface(JsToJava(), "Android") 第一个参数是一个内部类JsToJava,我们网页端要回调的Android方法都应该写在里面,方法名要与js里面约定写好的方法名相同,如下图 画红框的Android字段则是我们addJavascriptInterface()方法要填入的第二个参数 js调java.png 接着在按钮的点击事件里面写我们的登录方法 /** * 登录方法 */ private fun login() { val string: String = mEditView.text.toString().trim() if (!TextUtils.isEmpty(string)) { webView!!.loadUrl("javascript:javaToJs('$string')") setContentView(webView) } } 获取输入框内容,webView通过loadUril方法把输入框内容作为参数传递到js的方法里,将new 出来的webView通过setContentView显示到界面上 java调js.png 完整代码 import kotlinx.android.synthetic.main.activity_web.* import org.jetbrains.anko.toast /** * 1,Java调用javaScript方法 * 2,javaScript方法调用Java方法 */ class JavaToJsActivity : AppCompatActivity() { /** * 声明WebView */ private var webView: WebView? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_java_to_js) //进行WebView的基础基础配置 initView() mBtnNext.setOnClickListener(View.OnClickListener { L.d("按钮的点击事件") login() }) } /** * 登录方法 */ private fun login() { val string: String = mEditView.text.toString().trim() if (!TextUtils.isEmpty(string)) { //调用页面的js代码的javaToJs方法把参数传递进入 webView!!.loadUrl("javascript:javaToJs('$string')") //将webView显示到界面上 setContentView(webView) } } /** * 进行基础的配置 */ private fun initView() { webView= WebView(this) val webSettings = webView!!.getSettings() //设置支持javaScript脚步语言 webSettings.javaScriptEnabled = true //设置支持js调用java //JsToJava是js回调的类,Js调用的Java方法都应该写在里面 webView!!.addJavascriptInterface(JsToJava(), "Android") //加载网络资源 webView!!.loadUrl("https://a704.gitee.io/web/JavaToJs.html") } /** *js可以调用该类的方法 */ internal inner class JsToJava { //必须有该注解 @JavascriptInterface fun show() { toast("我被js调用了啦") } } } 运行程序,在输入框内输入文本,跳转到界面后,用户名确实已经显示到界面上,证明我们Java调用js代码成功。点击按钮,弹出吐司,说明js调java也成功了,通过show方法,将吐司展示了出来 js与java的互调.gif 在Java和Js的互调中,https://a704.gitee.io/web/JavaToJs.html这个网页链接是我通过码云的码云Pages服务生成的,它是一个类似免费服务器的东西。 网页的代码是使用WebStrom写的,IDEA全家桶,十分好用

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册