首页 文章 精选 留言 我的

精选列表

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

算法学习之路|POJ2689(素数筛)

题目大意:选出区间L,R之间相邻素数中差值最大和最小的素数对 素数筛(线性筛): #include<stdio.h> #include<string.h> #include<iostream> using namespace std; #define MAX 10000000 long long su[MAX],cnt; bool isprime[MAX]; void prime() { cnt=1; memset(isprime,1,sizeof(isprime));//初始化 isprime[0]=isprime[1]=0;//0和1不是素数 for(long long i=2;i<=MAX;i++) { if(isprime[i]) su[cnt++]=i;//保存素数 for(long long j=1;j<cnt&&su[j]*i<MAX;j++) { isprime[su[j]*i]=0;//筛掉小于等于i的素数和i的积构成的合数 } } } int main() { prime(); for(long long i=1;i<cnt;i++) printf("%d ",su[i]); return 0; } 思路:直接用素数筛会超时(int范围线性复杂度时间复杂度已经达到10e9),而区间间隔比较小,只有1e6,而且对于int范围内的合数来说,最小质因子必定小于2^16。所以可以进行二次筛素数,第一次对50000以内筛素数,第二次筛出L,R区间内素数即可。 代码: #include <stdio.h> #include <string.h> #include <iostream> #include <algorithm> using namespace std; #define INF 1e9 #define maxn 50005 #define maxm 100005 int l,u; int su[maxn],isprime[maxn],f[maxm]; int cnt=0; void prime() { memset(isprime,1,sizeof(isprime)); isprime[0]=isprime[1]=0; for(int i=2;i<=maxn;i++) { if(isprime[i]) su[cnt++]=i; for(int j=1;j<cnt&&su[j]*i<maxn;j++) { isprime[su[j]*i]=0; } } } int main() { prime(); while(cin>>l>>u) { if(l==1)l=2;//注意l=1 memset(f,0,sizeof(f)); for(int i=0;i<cnt;i++) { int a=(l-1)/su[i]+1; int b=u/su[i]; for(int j=a;j<=b;j++) if(j>1) f[j*su[i]-l]=1; } int p=-1,max_ans=-1,min_ans=INF,x1,y1,x2,y2; for(int i=0;i<=u-l;i++)//暴力枚举 { if(f[i]==0) { if(p==-1) { p=i; continue; } if(max_ans<i-p) { max_ans=i-p; x1=p+l;y1=i+l; } if(min_ans>i-p) { min_ans=i-p; x2=p+l;y2=i+l; } p=i; } } if(max_ans==-1)cout<<"There are no adjacent primes."<<endl; else cout<<x2<<","<<y2<<" are closest, "<<x1<<","<<y1<<" are most distant."<<endl; } return 0; }

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

算法学习之路|hdu 1035 Robot Motion(模拟)

题目大意 给一个地图,由ESWN(东南西北)组成,机器人根据脚下的指令移动,求如果机器人能走出地图,走的步数多少,如果不能走出,求每绕一圈的步数和绕圈之前走的步数。 不是图的题目,直接做就行。 代码: #include<stdio.h> #include<string.h> #include<algorithm> #include<iostream> using namespace std; char map1[15][15]; int flag[15][15]; int main() { int n,m,k; int x,y; while(scanf("%d%d",&n,&m)&&n) { int sum1=0,sum2=0; memset(flag,0,sizeof(flag)); memset(map1,0,sizeof(map1)); scanf("%d",&k); for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { cin>>map1[i][j]; } } x=1; y=k; while(x<=n&&x>=1&&y<=m&&y>=1) { if(map1[x][y]=='E') { flag[x][y]++; y++; sum2++; } else if(map1[x][y]=='W') { flag[x][y]++; y--; sum2++; } else if(map1[x][y]=='S') { flag[x][y]++; x++; sum2++; } else if(map1[x][y]=='N') { flag[x][y]++; x--; sum2++; } if(flag[x][y]==1) { sum1++; } else if(flag[x][y]>1) break; } if(sum1>0) printf("%d step(s) before a loop of %d step(s)\n",sum2-sum1*2,sum1); else printf("%d step(s) to exit\n",sum2); } return 0; }

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

学习docker on windows (1): 为什么要使用docker

为什么要用Docker? 如果我们想使用某种pc软件, 那么在互联网上查找并安装软件的流程大致如下图: 那么这就有几个问题要弄清楚: 从哪里获得软件 App Store Linux的包管理 从某些网站直接下载 软件是否提供了相关信息和数据 例如流行度, 下载次数, 存在的bug, 上次的更新时间等等. 信任问题 下载软件的网站是否为官方网站 http 还是 https 代码 是否还可以下载 是否收费 第一个令人困扰的问题: 安装软件 软件是否支持我的操作系统/版本 是否支持我的设备的CPU架构 软件的格式 有些是从源码进行安装 有些是单独的exe文件 有的是exe+dlls 有时候是exe+dlls+依赖某些运行时 软件的安装方式 有自带的安装器 使用包管理工具安装 手动安装 软件的更新和卸载 自动更新? 软件的配置(对于新手来说可能这就是个噩梦) 从上面这些问题可以看出, 现在这个年代, 安装个软件真是个挺麻烦的事, 尤其是用于开发相关的软件, 有时候让人头疼. 第二个问题: 软件的运行 这方面可能会存在以下问题: 是否有详细的帮助文档 软件在哪运行 是否需要手动修改系统某些设置 是否需要设置环境变量PATH 如何开始, 如何结束 是否需要注册服务 如何注册服务 是否需要手动编写服务配置 是否需要许可 如何安装和运行软件的依赖项 如果没找到依赖项会怎么处理 循环的依赖项 安全性, 沙箱运行? 破坏性更新 系统更新是否对软件有破坏性影响 共享的库有更新 什么是容器 Docker不是虚拟机的替代者, docker不是虚拟化技术, 它更多是关于软件的运行. 什么是容器,它和虚拟机有什么区别? 首先介绍一下虚拟机: 虚拟机管理其把服务器的硬件资源(CPU,内存,硬盘,网络等)切割成多个虚拟的版本, 然后基于这些虚拟的硬件建立操作系统. 虚拟机建立的系统就像是正常的系统服务一样. 与虚拟机管理器不同, Docker或者其他的容器引擎切割的是操作系统的资源, 例如进程的命名空间, 网络栈, 存储栈等等: 每个容器都有PID为1的进程, 每个容器也都有自己的根文件系统(windows的C盘, linux的/). 所以docker可以称作是对针对操作系统的虚拟化操作, 它非常的轻量级. 可以举一些例子, 安装 sql server, mysql, mongodb, postgresql 等, 下载, 安装, 配置. 有的还是挺麻烦的. 下面看看使用docker会怎么样, 首先需要安装docker. 安装Docker Docker for windows 下载地址:https://store.docker.com/editions/community/docker-ce-desktop-windows 安装好docker后, 系统右下角托盘处会有docker的图标, 等到图标不再闪烁了, 说明docker已经启动成功了. 右键点击图标有Settings. 可以通过命令行看一下docker的状态: docker version 可以看到client是windows, server是linux(系统需要启用Hyper-V)虚拟机. 从Hyper-V管理器可以看到这个linux虚拟机: 使用Docker的例子: Postgresql 首先去https://hub.docker.com/这里查找需要使用的软件, 例如postgresql :https://hub.docker.com/_/postgres/ 从页面可以看到 postgres是docker官方认可的库. 页面的下方有使用说明等. 首先别忘了运行docker. 然后从docker hub下载postgres这个软件(应该叫image), 命令行执行: docker pull postgres 下载的过程有时候比较慢, 尤其是在国内 (如果速度实在太慢, 那么可以使用阿里云的容器镜像: https://dev.aliyun.com/search.html?spm=5176.1972343.0.1.340c5aaafU9rRJ): 等了一段时间之后, 下载完毕: 现在image已经下载了, 那么接下来就是需要通过某种方式运行这个image, 这就涉及到了container容器. 容器就像是一个已经安装好的软件, 它负责把这个image配置并安装好, 然后就可以运行这个安装好的postgresql了. 普通的软件安装好之后运行的是exe, 而这个运行的是容器, 容器里面是postgresql. 整个针对普通的软件安装的流程如下: docker run 命令 docker run 这个命令会一次性执行上面整个流程. 注: 所有的docker命令都是以docker开头, 也就是调用docker程序. docker run xxx表示让docker运行某个image. 然后客户端就会通过API调用告诉服务端(Daemon守护进程, 它实现了Docker Remote Api或者叫Docker Engine Api). Daemon首先看看本地有没有这个image, 然后没找到这个image, 然后daemon就会从docker hub 拉取下来这个image到本地, 然后使用这个image来创建新的container. 下面执行docker run postgres: 可以看到postgresql已经运行起来了. 其内容和单独安装的postgresql运行起来是一样的. 使用 docker ps 命令查看正在运行的容器: 然后按照官方文档的命令使用psql去连接postgresql: 可以看到, 进入到psql环境了. 这个postgres和传统方式安装的postgresql功能是一样的. 写个postgresql命令试试: docker exec 运行容器内的命令: 我电脑现在运行的是docker的linux容器, 所以可以使用这个命令运行一下linux的bash: 首先使用docker ps命令查看正在运行的容器, 然后使用docker exec -it 08 bash执行ID为08开头的容器内的bash命令. -it表示交互模式. 然后使用ps -e查看该容器内的linux的进程, 里面有bash, 刚才启动运行的psql, ps. 退出 在交互模式下使用exit命令进行退出: 停止运行容器则需要使用docker stop 容器ID这个命令: 以上这些就是使用docker的原因.......下面是我的关于ASP.NET Core Web API相关技术的公众号--草根专栏:

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

DC学院学习笔记(十七):分类及逻辑回归

回归和分类的区别 分类:对离散型变量进行预测(二分类、多分类) 回归:对数值型变量进行预测 区别:回归的y为数值连续型变量;分类的y是类别离散型变量 分类问题 1. 分类问题示例:信用卡 从x1:职业,x2:收入等等信用卡申请人不同的信息维度,来判断y:是否发放信用卡,发放哪一类信用卡 2. 分类经典方法:logistic回归(二分类) 虽然名字里有回归二字,但logistic回归解决的是分类的问题 回归得到的数值y可以看做属于类别1的概率: 下图为logistic函数(也叫sigmoid函数)图像 二分类到多分类:通过One vs. Rest 使用logistic进行多分类,scikit-learn 会默认采用OvR方法: 为每个类别分别建立一个二分类器 训练中正例为该类别样本,负例为所有其他样本 在所有分类中,选择概率最高的那个类别 如iris数据集中有三个类别,选择使用logistic回归进行分类,则需要训练三个分类器,根据每个样本隶属不同类的概率大小来进行分类 3. scikit learn 实现logistic回归 载入iris数据集 import pandas iris = pandas.read_csv('http://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data',header=None) iris.columns=['SepalLengthCm','SepalWidthCm','PetalLengthCm','PetalWidthCm','Species'] 实现logistic回归 import sklearn import numpy as np from sklearn import linear_model lm=linear_model.LogisticRegression() features=['PetalLengthCm'] X=iris[features] #需要讲Species这个字段由字符串类型转变为数值类型,以表示不同的类别 from sklearn.preprocessing import LabelEncoder #初始化label le=LabelEncoder() le.fit(iris['Species']) #用离散值转化标签值 y=le.transform(iris['Species']) print(y) [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2] #通过交叉检验,得到分类准确率 from sklearn.model_selection import cross_val_score #logistic中的scoring参数指定为accuracy scores=cross_val_score(lm,X,y,cv=5,scoring='accuracy') print(np.mean(scores)) 0.786666666667 往Feature中添加特征,看看准确率的变化 features=['PetalLengthCm','SepalWidthCm','PetalLengthCm'] X=iris[features] #需要讲Species这个字段由字符串类型转变为数值类型,以表示不同的类别 from sklearn.preprocessing import LabelEncoder #初始化label le=LabelEncoder() le.fit(iris['Species']) #用离散值转化标签值 y=le.transform(iris['Species']) ##print(y) #通过交叉检验,得到分类准确率 from sklearn.model_selection import cross_val_score #logistic中的scoring参数指定为accuracy scores=cross_val_score(lm,X,y,cv=5,scoring='accuracy') print(np.mean(scores)) 0.906666666667 果然好了很多!

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

【Jenkins学习 】解决jenkins运行磁盘满的问题

一、背景 今天有同事编译Jenkins的相关Jobs的时候,出现了编译成功,但是输出产物失败的情况,如下图所示: Caused by:java.io.IOException: No space left on device at java.io.FileOutputStream.writeBytes(Native Method) at java.io.FileOutputStream.write(FileOutputStream.java:345) at org.apache.commons.io.IOUtils.copyLarge(IOUtils.java:1793) at org.apache.commons.io.IOUtils.copyLarge(IOUtils.java:1769) at org.apache.commons.io.IOUtils.copy(IOUtils.java:1744) at hudson.util.IOUtils.copy(IOTuils.java:40) at hudson.FilePath.readFromTar(FilePath.java:2318) ....13 more Cause by:java.util.concurrent.ExecutionException:java.io.IOException:This archives contains unclosed entries. ...12 more Cause by:java.io.IOException:This archives contains unclosed entries. ... 看上面图的描述就是Jenkins服务器上的磁盘空间已经不足,导致输出产物失败的情况出现。 二、排查问题 好吧,我登录Jenkins的服务器,去查看下磁盘空间,发现Jenkins存储的磁盘 /data 已经百分百使用完毕。 oot@codesrv1:/data/.jenkins/jobs# pwd /data/.jenkins/jobs root@codesrv1:/data/.jenkins/jobs# df Filesystem 1K-blocks Used Available Use% Mounted on /dev/sda3 48750348 44294000 2014928 96% / udev 3886836 4 3886832 1% /dev tmpfs 1558256 260 1557996 1% /run none 5120 0 5120 0% /run/lock none 3895636 0 3895636 0% /run/shm /dev/sda1 9738232 255456 8994536 3% /boot /dev/sda5 236267580 236267580 0 100% /data /dev/sdb1 314197776 5271856 293197332 2% /data1 查看了下 /data/.jenkins/jobs 目录下 所有的Jenkins jobs的占用情况 root@codesrv1:/data/.jenkins/jobs# du -ah --max-depth=1 使用如上命令,查看所有的Jenkins jobs的磁盘占用情况。 查看了大部分的Jenkins Jobs,发现IOS开发人员所拥有的IOS相关的Jenkins任务,随随便便都占用1G以上的磁盘。 进入一个IOS的Jenkins任务,名为 iOS_Trunk 的Jenkins任务去查看磁盘占用情况 root@codesrv1:/data/.jenkins/jobs/iOS_Trunk/builds# pwd /data/.jenkins/jobs/iOS_Trunk/builds root@codesrv1:/data/.jenkins/jobs/iOS_Trunk/builds# du -ah --max-depth=1 46M ./802 1.5M ./826 0 ./lastFailedBuild 176M ./825 166M ./827 137M ./810 0 ./lastUnstableBuild 137M ./797 137M ./819 176M ./824 137M ./800 36K ./822 126M ./804 137M ./794 137M ./803 137M ./795 137M ./814 166M ./828 137M ./785 137M ./806 137M ./805 126M ./793 0 ./legacyIds 126M ./798 137M ./799 126M ./821 137M ./783 137M ./784 126M ./801 137M ./809 44K ./817 16K ./787 137M ./796 137M ./786 40K ./789 126M ./813 126M ./815 126M ./780 126M ./790 137M ./807 0 ./lastUnsuccessfulBuild 0 ./lastSuccessfulBuild 137M ./811 137M ./788 24M ./792 176M ./823 137M ./820 137M ./791 0 ./lastStableBuild 137M ./781 126M ./808 16K ./816 127M ./818 178M ./829 137M ./812 20K ./782 5.7G . root@codesrv1:/data/.jenkins/jobs/iOS_Trunk/builds# 发现这个iOS_Trunk的Jenkins任务,每一次编译的常务都有100多Mb,然后保留了大概50次的编译产物,所以关这一个Jenkins任务就占用了5.7G。可怕啊! 去查看下 这个Jenkins的配置情况,如下图所示: 如上图所示,IOS的每个任务都是 保持构建的最大个数 设置为了50,那就代表着每一个IOS的任务理论上最多都占用5个多G的磁盘空间。 而其他的Android的Jenkins任务的配置如下图所示: Android相关的Jenkins任务都是默认最多保留3天的构建产物,这样就可以节省磁盘。 三、解决问题 第一步、自动丢弃构建历史数据 把以前构建过的过时历史数据自动清除掉,保留最近更新的天数和个数。 修改策略为 保持构建的天数 3 保持构建的最大个数 20 当然这个策略可以根据自己的项目实际情况来定。 第二步、关于以前有些Jenkins Job被删除但是WorkSpace没有被清理的问题 正常的删除Jenkins Job的流程是 先清理工作空间 然后再删除掉Jenkins Job 但是有很多同事以前直接就删除Jenkins Job,并没有先清理工作空间,这样会导致有些被删除的Jenkins Job原来的工作空间一直存在占用的磁盘。 搜索了下,https://my.oschina.net/donhui/blog/677935 这篇文章中的Python脚本应该是可以解决这个问题的。 以下代码为转载内容,原文链接为 https://my.oschina.net/donhui/blog/677935 摘要: jenkins cleanup workspace after job removal 如果Jenkins使用的Master-Slave多节点架构,删除Jenkins JOB后,相应JOB的slave节点的workspace不会被删除 stackoverflow上有相关的问答:http://stackoverflow.com/questions/20532705/deleting-jenkins-jobs-through-gui-does-not-delete-their-workspaces-in-slaves google groups上有相关的讨论:https://groups.google.com/forum/#!topic/jenkinsci-users/SiZ3DL-UJ-8 所以需要自行处理,于是用脚本实现该功能 具体思路是: 遍历jenkins节点的workspace,根据路径解析获得jenkins job name 如果该job不存在(通过python jenkinsapi实现),则删除相应的workspace 暂不考虑自定义的workspace 需要在jenkins每个节点上进行处理(可以在jenkins上创建job,将job绑定到相应slave上;也可以在相应slave上直接运行脚本) 相关的Python脚本如下: # -*- coding: utf-8 -*- import os import shutil import logging from jenkinsapi.jenkins import Jenkins logging.basicConfig(level=logging.INFO) logger = logging.getLogger(__file__) def get_jenkins_instance(): jenkins_url = "http://jenkins.example.com" jenkins_username = "username" jenkins_password = "password" return Jenkins(jenkins_url, username=jenkins_username, password=jenkins_password) def clean_workspace(): jenkins_instance = get_jenkins_instance() jenkins_workspace_path = "/opt/JENKINS_HOME/workspace/" for dirpath, dirnames, filenames in os.walk(jenkins_workspace_path): if dirpath == jenkins_workspace_path: for dirname in dirnames: jenkins_job_name = dirname # 如果job被删除,则清理相应的workspace if not jenkins_instance.has_job(jenkins_job_name): logger.info("removing workspace dir of job:%s" % dirname) shutil.rmtree(os.path.join(dirpath, dirname)) if __name__ == "__main__": clean_workspace() 这个脚本暂时没有去运行,因为将IOS所有的Jenkins任务的丢弃旧的构建的策略修改之后,目前磁盘空间完全足够使用!目前经过一轮清理,已经有84G的剩余可以可以使用。 而且该脚本目前暂时不敢去使用,待我在测试的Jenkins服务器上测试之后再应用到正式的Jenkins服务器。 如果要使用,请读者将代码中的相关参数改为自己的Jenkins服务器配置的参数再运行。jenkins_url 、jenkins_username、jenkins_password 、jenkins_workspace_path这几个参数都得修改为真实的参数。 作者:欧阳鹏 欢迎转载,与人分享是进步的源泉! 转载请保留原文地址:http://blog.csdn.net/ouyang_peng/article/details/79225993 如果觉得本文对您有所帮助,欢迎您扫码下图所示的支付宝和微信支付二维码对本文进行随意打赏。您的支持将鼓励我继续创作!

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

Android开发学习笔记:数据存取之File浅析

Android系统中提供了一种文件读写的方法,可以将一些数据以文件的形式保存在设备中。比如一些word文档,PDF文档,图片,音频,视频文件等。 使用文件读写方法的步骤: 1.调用Context.openFileInput()方法获得Java文件输入流(FileInputStream) 2.调用Context.openFileOutput()方法获得java文件输出流(FileOutputStream) 3.使用Resources.openRawResource(R.raw.DataFile)方法返回InputStream 下面的具体实例,在一个Activity里面创建两个EditText和两个Button,第一个EditText和Button将EditText的内容写到文件file.txt文件中。第二个EditText和Button将内容从文件file.txt中读取出来显示。文件被默认保存在/data/data/package/files下面。 MainActivity.java packagecom.android.file; importjava.io.FileInputStream; importjava.io.FileOutputStream; importandroid.app.Activity; importandroid.os.Bundle; importandroid.view.View; importandroid.view.View.OnClickListener; importandroid.widget.Button; importandroid.widget.EditText; publicclassMainActivityextendsActivity{ //声明文件名字符串常量 privatestaticfinalStringFILE_NAME="file.txt"; privateButtonwriteBtn,readBtn; privateEditTextwriteText,readText; @Override publicvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.main); writeBtn=(Button)findViewById(R.id.Button1); readBtn=(Button)findViewById(R.id.Button2); writeText=(EditText)findViewById(R.id.EditText1); readText=(EditText)findViewById(R.id.EditText2); writeBtn.setOnClickListener(newOnClickListener(){ @Override publicvoidonClick(Viewv){ //写内容 write(writeText.getText().toString()); } }); readBtn.setOnClickListener(newOnClickListener(){ @Override publicvoidonClick(Viewv){ //读内容 readText.setText(read()); } }); } privateStringread(){ try{ //实例化文件输入流对象 FileInputStreamfis=openFileInput(FILE_NAME); //定义缓存数组 byte[]buffer=newbyte[fis.available()]; //读到缓冲区 fis.read(buffer); returnnewString(buffer); }catch(Exceptione){ e.printStackTrace(); } returnnull; } privatevoidwrite(Stringcontent){ try{ //实例化文件输出流 //openFileOutput(Stringname,intmode) //第一个参数文件名 //第二个是模式 //MODE_APPEND表示要创建的文件存在则新写入的数据不会覆盖以前的数据。 FileOutputStreamfos=openFileOutput(FILE_NAME,MODE_APPEND); //写内容 fos.write(content.getBytes()); //关闭文件流 fos.close(); }catch(Exceptione){ e.printStackTrace(); } } } main.java <?xmlversion="1.0"encoding="utf-8"?> <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="请被文本输入内容" /> <EditText android:text="" android:id="@+id/EditText1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:height="100px" /> <Button android:id="@+id/Button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="写数据" /> <EditText android:text="" android:id="@+id/EditText2" android:layout_width="fill_parent" android:layout_height="wrap_content" android:height="100px" /> <Button android:id="@+id/Button2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="读数据" /> </LinearLayout> 效果图: 在终端下输入“adb shell”命令进入Android系统查看一下我们的文件是否写入成功。 本文转自 lingdududu 51CTO博客,原文链接:http://blog.51cto.com/liangruijun/660540

资源下载

更多资源
优质分享App

优质分享App

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

Mario

Mario

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

Spring

Spring

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

Sublime Text

Sublime Text

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

用户登录
用户注册