首页 文章 精选 留言 我的

精选列表

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

阿里云快速搭建 WordPress 个人网站

创建服务器 登录轻量应用服务器控制台,点击页面右上方的 创建服务器。 在弹出的页面上,为列出的各选项做出选择,可同时领取阿里云优惠劵 点击 立即购买。 浏览订单详情,确认无误后,点击 去支付。 点击 确认支付。 点击 进入管理控制台,在 服务器列表中,您可以看到刚刚创建的服务器。 您的服务器状态从 准备中 变为 运行中 后,点击 详情,查看应用 概览。 快速配置 WordPress 在左侧导航栏中,点击 应用管理 > 应用详情。 在 应用详情 页面,复制 管理员密码下的命令行,单击 远程连接。 获取管理员密码:在弹出的命令窗口中,单击鼠标右键,选择 粘贴,回车。 复制管理员账号密码。 回到控制台界面,点击 管理员登录地址。 输入账号 admin,并粘贴之前复制好的密码,单击 登录。 登录成功后,您可以自由配置 WordPress。 为方便后续操作,建议您更

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

龙果支付系统搭建与部署

1. 开发工具 eclipse、git或svn、maven 2. 技术框架 核心框架:Spring Framework 3.2.4 持久化框架:MyBatis 3.4. 安全框架:Apache Shiro 1.2.5 日志管理:SLF4J 1.7.21、Log4j 1.2.17 数据库连接池:Druid 1.0.19 消息总线:ActiveMQ 5.11.4 工具包:fastjson 1.2.11 jQuery框架:DWZ 3. 系统运行环境 3.1 软件环境: MySQL JDK1.7或以上 apache-tomcat-7.0或其他容器 ActiveMQ 5.11 3.2 硬件环境(最小配置): CPU:1核 内存:1G 4. 安装部署 4.1 说明 运营管理系统登录账号密码:admin/123456 商户后台系统登录账号密码:在boss运营后台添加用户时录入手机和密码 roncoo-pay-common-core:公共类工程,不用单独部署 roncoo-pay-service:核心业务类工程,不用单独部署 roncoo-pay-app-notify:通知应用工程,独立jar方式启动 roncoo-pay-app-reconciliation:对账应用工程,独立jar方式启动 roncoo-pay-app-settlement:结算应用工程,独立jar方式启动 roncoo-pay-web-boss:运营管理后台,部署tomcat启动 roncoo-pay-web-gateway:支付网关工程,部署tomcat启动 roncoo-pay-web-sample-shop:模拟商城工程,部署tomcat启动 roncoo-pay-web-merchant:商户后台工程,部署tomcat启动 4.2 步骤 4.2.1 创建数据库,导入初始化脚本《database.sql》 4.2.2 修改系统数据库连接roncoo-pay-service/src/main/resources/jdbc.properties 4.2.3 从roncoo-pay-service工程的lib文件夹下加载支付宝支付sdk“alipay-sdk-java20151021120052.jar”和 “alipay-trade-sdk.jar” 4.2.4 下载ActiveMQ 5.11并安装,修改MQ配置roncoo-pay-service/src/main/resources/ mq_config.properties, 以独立jar方式启动roncoo-pay-app-notify工程 (注:商户通知是独立的一块,不影响支付及其他功能,可以省略该步骤) 4.2.5 以独立jar方式启动roncoo-pay-app-settlement工程 4.2.6 修改对账文件下载后存放地址roncoo-pay-service/src/main/resources/reconciliation_config.properties, 以独立jar方式启动roncoo-pay-app-reconciliation 4.2.7 添加支付宝和微信测试账号信息roncoo-pay-service/src/main/resources/alipay_config.properties 和weixinpay_config (注:不需要本地测试支付,可以省略该步骤) 4.2.8 通过mvn install命令打包编译系统 4.2.9 拷贝roncoo-pay-web-boss.war、roncoo-pay-web-gateway.war、roncoo-pay-web-sample-shop.war、roncoo-pay-web-merchant.war至tomcat启动 在线支付演示:http://demo.pay.roncoo.com 后台运营管理:http://demo.pay.roncoo.com/boss GitHub地址:https://github.com/roncoo/roncoo-pay 开源中国地址:http://git.oschina.net/roncoocom/roncoo-pay 官方QQ群:287684257,欢迎大家加入,共同探讨互联网金融支付行业业务、技术等。

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

My Baits入门(一)mybaits环境搭建

1)在工程下引入mybatis-3.4.1.jar包,再引入数据库(mysql,mssql..)包. 2)在src下新建一个配置文件conf.xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <!-- 引入外部配置文件 --> <properties resource="jdbc.properties" /> <!-- 配置mybatis运行环境 --> <environments default="development"> <environment id="development"> <!-- type="JDBC" 代表使用JDBC的提交和回滚来管理事务 --> <transactionManager type="JDBC" /> <!-- mybatis提供了3种数据源类型,分别是:POOLED,UNPOOLED,JNDI --> <!-- POOLED 表示支持JDBC数据源连接池 --> <!-- UNPOOLED 表示不支持数据源连接池 --> <!-- JNDI 表示支持外部数据源连接池 --> <dataSource type="POOLED"> <property name="driver" value="${driver}" /> <property name="url" value="${url}" /> <property name="username" value="${username}" /> <property name="password" value="${password}" /> </dataSource> </environment> </environments> <mappers> <mapper resource="userMapper.xml"/> </mappers> </configuration> 这里是通过外部配置文件来存储数据库存信息的,所以加入一个jdbc.properties的数据库存信息 driver=com.microsoft.sqlserver.jdbc.SQLServerDriver url=jdbc:sqlserver://127.0.0.1;databaseName=test username=sa password=123456 3)建立一个映射文件 userMapper.xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="hw.com.ser.IUser"> <!-- 查询全部用户 --> <select id="queryUsers" resultType="hw.com.pojo.User"> select * from MS_User </select> <selectid="queryUserById" resultType="hw.com.pojo.User" parameterType="int"> Select * From Ms_User Where id=#{id} </select> </mapper> (这里要注意的是,namespace属性,因为,此实例是通过接口映射的方式,所以,namespace属性一点要写成接口的路径)附图: 4)建一个映射接口类 package hw.com.ser; import java.util.List; import hw.com.pojo.User; public interface IUser { public List<User> queryUsers(); public User queryUserById(int id); } 5)建立一个SqlSessionFactory package hw.com.util; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.Reader; import java.util.Properties; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; public class SqlSessionFactoryUtil { private static SqlSessionFactory sqlSessionFactory = null; private static final Class CLASS_LOCK = SqlSessionFactoryUtil.class; private SqlSessionFactoryUtil() { } public static SqlSessionFactory initSqlSessionFactory() { String resource = "conf.xml"; InputStream inputStream = null; try { inputStream = Resources.getResourceAsStream(resource); } catch (IOException e) { e.printStackTrace(); } synchronized (CLASS_LOCK) { if (sqlSessionFactory == null) { sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); } } return sqlSessionFactory; } public static SqlSession openSqlSession(){ if(sqlSessionFactory==null){ initSqlSessionFactory(); } return sqlSessionFactory.openSession(); } } 6)建一个pojo package hw.com.pojo; import java.util.Date; public class User { private String Id; private String UserName; private String UserPwd; private int DeptmentId; private String UserTrueName; private String Email; private int LearnCenterId; private Date CreateDate; private Date LastModifyDate; private int UserStatus; public User() { super(); // TODO Auto-generated constructor stub } public String getId() { return Id; } public void setId(String id) { Id = id; } public String getUserName() { return UserName; } public void setUserName(String userName) { UserName = userName; } public String getUserPwd() { return UserPwd; } public void setUserPwd(String userPwd) { UserPwd = userPwd; } public int getDeptmentId() { return DeptmentId; } public void setDeptmentId(int deptmentId) { DeptmentId = deptmentId; } public String getUserTrueName() { return UserTrueName; } public void setUserTrueName(String userTrueName) { UserTrueName = userTrueName; } public String getEmail() { return Email; } public void setEmail(String email) { Email = email; } public int getLearnCenterId() { return LearnCenterId; } public void setLearnCenterId(int learnCenterId) { LearnCenterId = learnCenterId; } public Date getCreateDate() { return CreateDate; } public void setCreateDate(Date createDate) { CreateDate = createDate; } public Date getLastModifyDate() { return LastModifyDate; } public void setLastModifyDate(Date lastModifyDate) { LastModifyDate = lastModifyDate; } public int getUserStatus() { return UserStatus; } public void setUserStatus(int userStatus) { UserStatus = userStatus; } @Override public String toString() { return "User [Id=" + Id + ", UserName=" + UserName + ", UserPwd=" + UserPwd + ", DeptmentId=" + DeptmentId + ", UserTrueName=" + UserTrueName + ", Email=" + Email + ", LearnCenterId=" + LearnCenterId + ", CreateDate=" + CreateDate + ", LastModifyDate=" + LastModifyDate + ", UserStatus=" + UserStatus + "]"; } } 7) 在main方法下做测试 package hw.com.Day1.main; import java.util.List; import org.apache.ibatis.session.SqlSession; import hw.com.pojo.User; import hw.com.ser.IUser; import hw.com.util.SqlSessionFactoryUtil; public class UserTest { public static void main(String[] args) { SqlSession sqlSession=null; try { sqlSession=SqlSessionFactoryUtil.openSqlSession(); IUser iUser=sqlSession.getMapper(IUser.class); List<User> users=iUser.queryUsers(); if(users.size()>0){ for (User user : users) { System.out.println(user.toString()); } } } catch (Exception e) { e.printStackTrace(); } } } 转自:http://www.cnblogs.com/lijianhua/p/6201158.html

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

linux7 搭建ELK日志分析

官网地址:https://www.elastic.co/cn/ 官网权威指南:https://www.elastic.co/guide/cn/elasticsearch/guide/current/index.html 安装指南:https://www.elastic.co/guide/en/elasticsearch/reference/5.x/rpm.html ELK是Elasticsearch、Logstash、Kibana的简称,这三者是核心套件,但并非全部。 Elasticsearch是实时全文搜索和分析引擎,提供搜集、分析、存储数据三大功能;是一套开放REST和JAVA API等结构提供高效搜索功能,可扩展的分布式系统。它构建于Apache Lucene搜索引擎库之上。 Logstash是一个用来搜集、分析、过滤日志的工具。它支持几乎任何类型的日志,包括系统日志、错误日志和自定义应用程序日志。它可以从许多来源接收日志,这些来源包括 syslog、消息传递(例如 RabbitMQ)和JMX,它能够以多种方式输出数据,包括电子邮件、websockets和Elasticsearch。 Kibana是一个基于Web的图形界面,用于搜索、分析和可视化存储在 Elasticsearch指标中的日志数据。它利用Elasticsearch的REST接口来检索数据,不仅允许用户创建他们自己的数据的定制仪表板视图,还允许他们以特殊的方式查询和过滤数据 准备 ELK 要求本地环境中安装了 JDK 。如果不确定是否已安装,可使用下面的命令检查:[root@jiaxin-ceshi src]# java -version一、安装Elasticsearch官网https://www.elastic.co/cn/downloads/elasticsearch[root@jiaxin-ceshi src]# wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.4.2.tar.gz[root@jiaxin-ceshi src]# tar xf elasticsearch-6.4.2.tar.gz [root@jiaxin-ceshi src]# cd elasticsearch-6.4.2[root@jiaxin-ceshi bin]# ./elasticsearch直接运行报错创建用户和组[root@jiaxin-ceshi elasticsearch-6.4.2]# groupadd elsearch[root@jiaxin-ceshi elasticsearch-6.4.2]# useradd elsearch -g elsearch -p elasticsearch切换成 elsearch 用户 运行又报错在切换回 root

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

zookeeper集群搭建及java程序测试

下载官网:http://zookeeper.apache.org/releases.html 下载:zookeeper-3.4.8.tar.gz 安装因为资源有限,所以我在同一个服务器上面创建3个目录 server1、server2、server3 来模拟3台服务器集群。 cd server1 tar -zxvf zookeeper-3.4.8.tar.gz mkdir data mkdir dataLog data 为数据目录,dataLog 为日志目录。 配置 zookeeper-3.4.8/conf 创建文件 zoo.cfg,内容如下: tickTime=2000 initLimit=5syncLimit=2dataDir=/opt/zookeeper/server1/datadataLogDir=/opt/zookeeper/server1/dataLogclientPort=2181server.1=127.0.0.1:2888:3888server.2=127.0.0.1:2889:3889server.3=127.0.0.1:2890:3890 tickTime:zookeeper中使用的基本时间单位, 毫秒值。 initLimit:这个配置项是用来配置 Zookeeper 接受客户端(这里所说的客户端不是用户连接 Zookeeper 服务器的客户端,而是 Zookeeper 服务器集群中连接到 Leader 的 Follower 服务器)初始化连接时最长能忍受多少个 tickTime 时间间隔数。这里设置为5表名最长容忍时间为 5 * 2000 = 10 秒。 syncLimit:这个配置标识 Leader 与 Follower 之间发送消息,请求和应答时间长度,最长不能超过多少个 tickTime 的时间长度,总的时间长度就是 2 * 2000 = 4 秒。 dataDir 和 dataLogDir 看配置就知道干吗的了,不用解释。 clientPort:监听client连接的端口号,这里说的client就是连接到Zookeeper的代码程序。 server.{myid}={ip}:{leader服务器交换信息的端口}:{当leader服务器挂了后, 选举leader的端口} maxClientCnxns:对于一个客户端的连接数限制,默认是60,这在大部分时候是足够了。但是在我们实际使用中发现,在测试环境经常超过这个数,经过调查发现有的团队将几十个应用全部部署到一台机器上,以方便测试,于是这个数字就超过了。 修改zoo.cfg非常简单,然后还需要创建myid文件: cd server1 echo 1 > myid 然后拷贝server1为server2和server3,并修改其中的zoo.cfg配置,当然也要修改myid的内容为2和3。 下面给出3个server的zoo.cfg 内容: server1 tickTime=2000initLimit=5syncLimit=2dataDir=/opt/zookeeper/server1/datadataLogDir=/opt/zookeeper/server1/dataLogclientPort=2181server.1=127.0.0.1:2888:3888server.2=127.0.0.1:2889:3889server.3=127.0.0.1:2890:3890 server2 tickTime=2000initLimit=5syncLimit=2dataDir=/opt/zookeeper/server2/datadataLogDir=/opt/zookeeper/server2/dataLogclientPort=2182server.1=127.0.0.1:2888:3888server.2=127.0.0.1:2889:3889server.3=127.0.0.1:2890:3890 server3 tickTime=2000initLimit=5syncLimit=2dataDir=/opt/zookeeper/server3/datadataLogDir=/opt/zookeeper/server3/dataLogclientPort=2183server.1=127.0.0.1:2888:3888server.2=127.0.0.1:2889:3889server.3=127.0.0.1:2890:3890 这里做下说明:因为我们是在同一个机器上模拟的集群,所以要注意server端口号和clientPort不要重复了,不然会出现端口冲突。所以,如果我们是3个不同的机器上做的3个server,那么我们的zoo.cfg配置都是一样的(注意server.{myid}=后面的IP地址使用具体的IP地址,如192.168.0.88)。还有就是,每一个server的myid内容都不能一样,这也可以理解为不同server的标识。 启动进入 zookeeper-3.4.8/bin 目录,使用 ./zkServer.sh start 启动zk服务。(你也可以使用 ./zkServer.sh start myzoo.cfg 指定配置文件启动,这在自动化运维的时候很有用) 使用 tail -f zookeeper.out 查看日志。 要说的是:在启动第一个的时候,日志中会出现一堆错误,仔细一看就能明白,是因为另外2个server还没有启动它连接不上的错误。然后当我们启动第二个server的时候,日志中的错误将会减少。最后我们把所有server都启动起来后,日志中便没有错误了。 测试随便进入一个zk目录,连接一个server测试。 cd zookeeper-3.4.8/bin zkCli.sh -server 127.0.0.1:2181 如果你要连接别的服务器,请指定具体的IP地址。 几个基本命令说明: ls 查看指定节点中包含的子节点(如:ls / 或 ls /app1/server1) create 创建节点并赋值 get 读取节点内容 set 改变节点内容 delete 删除节点 注意zk中所有节点都基于路径确定,如你要删除 /app1/server1/nodeA 的命令为: delete /app1/server1/nodeA 下面是基本操作截图: 这里写图片描述 Java程序Demo创建一个Maven工程 打开pom.xml文件添加zookeeper依赖 <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.4.6</version> </dependency> 创建Demo.java,代码如下: package com.shanhy.demo.zookeeper; import java.io.IOException; import org.apache.zookeeper.CreateMode;import org.apache.zookeeper.KeeperException;import org.apache.zookeeper.WatchedEvent;import org.apache.zookeeper.Watcher;import org.apache.zookeeper.ZooDefs.Ids;import org.apache.zookeeper.ZooKeeper; /** Zookeeper测试* @create 2018年7月10日*/ public class Test { // 会话超时时间,设置为与系统默认时间一致 private static final int SESSION_TIMEOUT = 30 * 1000; // 创建 ZooKeeper 实例 private ZooKeeper zk; // 创建 Watcher 实例 private Watcher wh = new Watcher() { /** * Watched事件 */ public void process(WatchedEvent event) { System.out.println("WatchedEvent >>> " + event.toString()); } }; // 初始化 ZooKeeper 实例 private void createZKInstance() throws IOException { // 连接到ZK服务,多个可以用逗号分割写 zk = new ZooKeeper("192.168.19.130:2181,192.168.19.130:2182,192.168.19.130:2183", Test.SESSION_TIMEOUT, this.wh); } private void ZKOperations() throws IOException, InterruptedException, KeeperException { System.out.println("\n1. 创建 ZooKeeper 节点 (znode : zoo2, 数据: myData2 ,权限: OPEN_ACL_UNSAFE ,节点类型: Persistent"); zk.create("/zoo2", "myData2".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT); System.out.println("\n2. 查看是否创建成功: "); System.out.println(new String(zk.getData("/zoo2", this.wh, null)));// 添加Watch // 前面一行我们添加了对/zoo2节点的监视,所以这里对/zoo2进行修改的时候,会触发Watch事件。 System.out.println("\n3. 修改节点数据 "); zk.setData("/zoo2", "shanhy20160310".getBytes(), -1); // 这里再次进行修改,则不会触发Watch事件,这就是我们验证ZK的一个特性“一次性触发”,也就是说设置一次监视,只会对下次操作起一次作用。 System.out.println("\n3-1. 再次修改节点数据 "); zk.setData("/zoo2", "shanhy20160310-ABCD".getBytes(), -1); System.out.println("\n4. 查看是否修改成功: "); System.out.println(new String(zk.getData("/zoo2", false, null))); System.out.println("\n5. 删除节点 "); zk.delete("/zoo2", -1); System.out.println("\n6. 查看节点是否被删除: "); System.out.println(" 节点状态: [" + zk.exists("/zoo2", false) + "]"); } private void ZKClose() throws InterruptedException { zk.close(); } public static void main(String[] args) throws IOException, InterruptedException, KeeperException { Test dm = new Test(); dm.createZKInstance(); dm.ZKOperations(); dm.ZKClose(); } } 我想代码不用解释了,该注释的里面都注释了。 下面有一种特殊的情况的处理思路: 有server1、server2、server3这三个服务,在client去连接zk的时候,指向server1初始化的过程中是没有问题的,然而刚刚初始化完成,准备去连接server1的时候,server1因为网络等原因挂掉了。 然而对client来说,它会拿server1的配置去请求连接,这时肯定会报连接被拒绝的异常以致启动退出。 所以优雅的解决这个问题的方法思路就是“在连接的时候判断连接状态,如果未连接成功,程序自动使用其他连接去请求连接”,这样来避开这种罕见的异常问题。 代码如下: // 初始化 ZooKeeper 实例 private void createZKInstance() throws IOException { // 连接到ZK服务,多个可以用逗号分割写 zk = new ZooKeeper("192.168.19.130:2181,192.168.19.130:2182,192.168.19.130:2183", Test.SESSION_TIMEOUT, this.wh); if(!zk.getState().equals(States.CONNECTED)){ while(true){ if(zk.getState().equals(States.CONNECTED)){ break; } try { TimeUnit.SECONDS.sleep(5); } catch (InterruptedException e) { e.printStackTrace(); } } } } 上面的代码是基于zk提供的库的API来你使用的,为了更易于使用,有人写了开源的zkclient,我们可以直接使用它来操作zk。 zkclient 开源地址:https://github.com/sgroschupf/zkclient maven 依赖配置: <!--zkclient --> <dependency> <groupId>com.101tec</groupId> <artifactId>zkclient</artifactId> <version>0.7</version> </dependency> zkClient 针对 zk 的一次性watcher,做了重新封装,然后定义了 stateChanged、znodeChanged、dataChanged 三种监听器。 监听children变化监听节点数据变化监听连接状态变化代码如下: package com.shanhy.demo.zookeeper; import java.util.List;import java.util.concurrent.TimeUnit; import org.I0Itec.zkclient.DataUpdater;import org.I0Itec.zkclient.IZkChildListener;import org.I0Itec.zkclient.IZkDataListener;import org.I0Itec.zkclient.IZkStateListener;import org.I0Itec.zkclient.ZkClient;import org.apache.zookeeper.Watcher.Event.KeeperState; /** ZkClient的使用测试 @create 2018年7月11日*/ public class ZkClientTest { public static void main(String[] args) { ZkClient zkClient = new ZkClient("192.168.19.130:2181,192.168.19.130:2182,192.168.19.130:2183"); String node = "/myapp"; // 订阅监听事件 childChangesListener(zkClient, node); dataChangesListener(zkClient, node); stateChangesListener(zkClient); if (!zkClient.exists(node)) { zkClient.createPersistent(node, "hello zookeeper"); } System.out.println(zkClient.readData(node)); zkClient.updateDataSerialized(node, new DataUpdater<String>() { public String update(String currentData) { return currentData + "-123"; } }); System.out.println(zkClient.readData(node)); try { TimeUnit.SECONDS.sleep(3); } catch (InterruptedException e) { e.printStackTrace(); } } /** * 订阅children变化 * * @param zkClient * @param path * @create 2018年7月11日 */ public static void childChangesListener(ZkClient zkClient, final String path) { zkClient.subscribeChildChanges(path, new IZkChildListener() { public void handleChildChange(String parentPath, List<String> currentChilds) throws Exception { System.out.println("clildren of path " + parentPath + ":" + currentChilds); } }); } /** * 订阅节点数据变化 * * @param zkClient * @param path * @create 2018年7月11日 */ public static void dataChangesListener(ZkClient zkClient, final String path){ zkClient.subscribeDataChanges(path, new IZkDataListener(){ public void handleDataChange(String dataPath, Object data) throws Exception { System.out.println("Data of " + dataPath + " has changed."); } public void handleDataDeleted(String dataPath) throws Exception { System.out.println("Data of " + dataPath + " has changed."); } }); } /** * 订阅状态变化 * * @param zkClient * @create 2018年7月11日 */ public static void stateChangesListener(ZkClient zkClient){ zkClient.subscribeStateChanges(new IZkStateListener() { public void handleStateChanged(KeeperState state) throws Exception { System.out.println("handleStateChanged"); } public void handleSessionEstablishmentError(Throwable error) throws Exception { System.out.println("handleSessionEstablishmentError"); } public void handleNewSession() throws Exception { System.out.println("handleNewSession"); } }); } }

资源下载

更多资源
优质分享App

优质分享App

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

Oracle

Oracle

Oracle Database,又名Oracle RDBMS,或简称Oracle。是甲骨文公司的一款关系数据库管理系统。它是在数据库领域一直处于领先地位的产品。可以说Oracle数据库系统是目前世界上流行的关系数据库管理系统,系统可移植性好、使用方便、功能强,适用于各类大、中、小、微机环境。它是一种高效率、可靠性好的、适应高吞吐量的数据库方案。

Eclipse

Eclipse

Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括Java开发工具(Java Development Kit,JDK)。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。