首页 文章 精选 留言 我的

精选列表

搜索[教程],共9166篇文章
优秀的个人博客,低调大师

Tensorflow快餐教程(9) - 卷积

卷积 卷积就是滑动中提取特征的过程 在数学中,卷积convolution是一种函数的定义。它是通过两个函数f和g生成第三个函数的一种数学算子,表征函数f与g经过翻转和平移的重叠部分的面积。其定义为:$h(x)=f(x)*g(x) =\int_{-\infty}^{\infty}f(t)g(x-t)dt$也可以用星号表示:$h(x)=(f*g)(x)$卷积的第一个参数(上例中的f),通常叫做输入。第二个参数(函数g)叫做核函数kernel function。输出有时候叫特征映射feature map.也可以定义离散形式的卷积:$h(x)=(f*g)(x) = \sum_{t=-\infty}^{\infty}f(t)g(x-t)$ g(x-t)是变化的,而f(t)是固定不动的。我们可以将卷积理解成是g(x-t)滑动过程中对f(t)进行采

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

Tensorflow快餐教程(4) - 矩阵

矩阵 矩阵的初始化 矩阵因为元素更多,所以初始化函数更多了。光靠tf.linspace,tf.range之类的线性生成函数已经不够用了。 可以通过先生成一个线性序列,然后再reshape成一个矩阵的方式来初始化。 例: >>> g1 = tf.linspace(1.0,10.0,16) >>> g1 <tf.Tensor 'LinSpace_6:0' shape=(16,) dtype=float32> >>> g2 = tf.constant(sess.run(tf.reshape(g1,[4,4]))) >>> sess.run(g2) array([[ 1. , 1.6 , 2.2 , 2.8000002],

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

Tensorflow快餐教程(3) - 向量

向量 向量在编程语言中就是最常用的一维数组。二维数组叫做矩阵,三维以上叫做张量。 向量虽然简单,高效,且容易理解。但是与操作0维的标量数据毕竟还是不同的。比如向量经常用于表示一个序列,生成序列像标量一样一个一个手工写就不划算了。当然可以用循环来写。在向量中这样还好,如果是在矩阵或者是张量中就强烈建议不要用循环来做了。系统提供的函数一般都是经过高度优化的,而且可以使用GPU资源来进行加速。我们一方面尽可能地多使用系统的函数,另一方面也不要迷信它们,代码优化是一个实践的过程,可以实际比较测量一下。 快速生成向量的方法 range函数生成等差数列 tf.range函数用来快速生成一个等差数列。相当于之前我们讲numpy时的np.arange函数。 原型: tf.range(start, limit, delta=1, dtype=None, name

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

Java 8 简明教程

文章概览 默认接口方法 Lambda表达式 方法引用 重复注解 简单介绍 接口中有默认方法 @FunctionalInterface interface Formula { double calculate(int a); default double sqrt(int a) { return Math.sqrt(a); } } 注意: //接口前加上@FunctionalInterface 标注,方便使用lambda //加这个注解,java可以很好的向下兼容jdk的版本 //如果你不写@FunctionalInterface 标注,程序也是正确的。 默认方法是为了实现函数式编程,lambda表达式 “Lambda 表达式”(lambda expression)是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象(lambda abstraction),是一个匿名函数,即没有函数名的函数。 @FunctionalInterface interface Converter<F, T> { T convert(F from); } Converter<String, Integer> converter = (from) -> Integer.valueOf(from); Integer converted = converter.convert("123"); System.out.println(converted); // 123 lamdba格式: (参数列表)->{ 方法体} ():跟元方法参数一致,都是小括号抱住 {}:方法体,跟原来方法一致,都是大括号抱住 -> :箭头,连接方法参数和方法体,表示一个函数 方法参数为一个时,小括号可以省略不写 方法体为一行代码时,大括号可以省略不写 lamdba在java中本质是一个静态方法,java编译成方法。 lamdba表达式可以简写为方法引用。 Converter<String, Integer> converter = Integer::valueOf; Integer converted = converter.convert("123"); System.out.println(converted); // 123 通过::关键字获取方法或者构造函数的的引用 引用构造函数 PersonFactory<Person> personFactory = Person::new; Person person = personFactory.create("Peter", "Parker"); 通过Person::new来创建一个Person类构造函数的引用。Java编译器会自动地选择合适的构造函数来匹配PersonFactory.create函数的签名,并选择正确的构造函数形式。 Lambda的范围 对于lambdab表达式外部的变量,其访问权限的粒度与匿名对象的方式非常类似。你能够访问局部对应的外部区域的局部final变量,以及成员变量和静态变量。 但是与匿名对象不同的是,变量num并不需要一定是final,num在编译的时候被隐式地当做final变量来处理。下面的代码依然是合法的: int num = 1; Converter<Integer, String> stringConverter = (from) -> String.valueOf(from + num); stringConverter.convert(2); // 3 java8中内置了很多函数式接口 具体的查看官方文档 简单示例如下: 遍历map map.forEach((k, v) -> System.out.println(v)); 遍历list list.forEach((m) -> System.out.println(m)); Annotations 重复注解 Java 8中的注解是可重复的。让我们直接深入看看例子,弄明白它是什么意思。 首先,我们定义一个包装注解,它包括了一个实际注解的数组 @interface Hints { Hint[] value(); } @Repeatable(Hints.class) @interface Hint { String value(); } 只要在前面加上注解名:@Repeatable,Java 8 允许我们对同一类型使用多重注解, 变体1:使用注解容器(老方法) @Hints({@Hint("hint1"), @Hint("hint2")}) class Person {} 变体2:使用可重复注解(新方法) @Hint("hint1") @Hint("hint2") class Person {} 使用变体2,Java编译器能够在内部自动对@Hint进行设置。这对于通过反射来读取注解信息来说,是非常重要的。 Hint hint = Person.class.getAnnotation(Hint.class); System.out.println(hint); // null Hints hints1 = Person.class.getAnnotation(Hints.class); System.out.println(hints1.value().length); // 2 Hint[] hints2 = Person.class.getAnnotationsByType(Hint.class); System.out.println(hints2.length); // 2 尽管我们绝对不会在Person类上声明@Hints注解,但是它的信息仍然可以通过getAnnotation(Hints.class)来读取。并且,getAnnotationsByType方法会更方便,因为它赋予了所有@Hints注解标注的方法直接的访问权限。 @Target({ElementType.TYPE_PARAMETER, ElementType.TYPE_USE}) @interface MyAnnotation {} 详细看这里:http://blog.didispace.com/books/java8-tutorial/ch1.html

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

Docker Swarm学习教程【转载】

Swarm介绍 Swarm是Docker公司在2014年12月初发布的一套较为简单的工具,用来管理Docker集群,它将一群Docker宿主机变成一个单一的,虚拟的主机。Swarm使用标准的Docker API接口作为其前端访问入口,换言之,各种形式的Docker Client(dockerclient in go, docker_py, docker等)均可以直接与Swarm通信。Swarm几乎全部用Go语言来完成开发,上周五,4月17号,Swarm0.2发布,相比0.1版本,0.2版本增加了一个新的策略来调度集群中的容器,使得在可用的节点上传播它们,以及支持更多的Docker命令以及集群驱动。 Swarm deamon只是一个调度器(Scheduler)和路由器(router),Swarm自己不运行容器,它只是接受docker客户端发送过来的请求,调度适合的节点来运行容器,这意味着,即使Swarm由于某些原因挂掉了,集群中的节点也会照常运行,当Swarm重新恢复运行之后,它会收集重建集群信息。下面是Swarm的结构图: 如何使用Swarm 有3台机器,sclu083,IP地址是10.13.181.83,sclu084,IP地址是10.13.181.84,atsg124 ,IP地址是10.32.105.124,利用这三台机器创建一个Docker集群,其中sclu083同时充当swarm manager管理集群. Swarm安装 最简单的安装Swarm的方式就是用Docker官方提供的Swarm镜像: sudo docker pull swarm Docker集群管理需要服务发现(Discovery service backend)功能.Swarm支持以下几种discovery service backend:Docker Hub上面内置的服务发现功能,本地的静态文件描述集群(static file describing the cluster),etcd(顺带说一句,etcd这玩意貌似很火很有前途,有时间研究下),consul,zookeeper和一些静态的ip列表(a static list of ips).本文会详细介绍前面两种方法backend的使用。 在使用Swarm进行集群管理之前,需要先把准备加入集群的所有的节点的docker deamon的监听端口修改为0.0.0.0:2375,可以直接使用 sudo docker –H tcp://0.0.0.0:2375 &命令,也可以在配置文件中修改 sudo vim /etc/default/docker 在文件的最后面添加下面这句 D0OCKER_OPTS=”-H 0.0.0.0:2375 –H unix:///var/run/docker.sock” 注意:一定是要在所有的节点上进行修改,修改之后要重启docker deamon sudo service docker restart 第一种方法:使用Docker Hub上面内置的服务发现功能 第一步:在任何一台节点上面执行swarm create命令来创建一个集群标志。这条命令执行完毕之后,swarm会前往Docker Hub上内建的发现服务中获取一个全球唯一的token,用以唯一的标识swarm管理的Docker集群。 sudo docker run –-rm swarm create 我们在sclu084 这台机器上执行上面的命令,效果如下: 返回的token是d947b55aa8fb9198b5d13ad81f61ac4d,这个token一定要记住,因为接下来的操作都会用到这一个token。 第二步:在所有的要加入集群的机器上面执行swarm join命令,把机器加入集群 本次试验就是要在所有的三台机器上执行命令: sudo docker run –-rm swarm join –addr=ip_address:2375 token://d947b55aa8fb9198b5d13ad81f61ac4d 在IP地址为10.13.181.84机器上面执行的效果如下图: 执行这条命令后不会立即返回 ,我们手动通过Ctrl+C返回。 第三步:启动swarm manager 因为我们是要让sclu083充当Swarm管理节点,所以我们要在这条机器上面执行swarm manage这条命令: sudo docker run –d –p 2376:2375 swarm manage token:// d947b55aa8fb9198b5d13ad81f61ac4d 需要注意的是:在这条命令中,第一:要以daemon的形式运行swarm。第二:端口映射:2376可以更换成任何一个本机没有占用的端口,一定不能是2375。否则就会出问题。 执行结果如下如所示: 执行完这个命令之后,整个集群已经启动起来了。 现在可以在任何一台节点上查看集群上的所有节点了。 之后可以在任何一台安装了docker的机器上面通过命令(命令中要指明swarm maneger 机器的IP地址和端口)在这个集群上面运行Dcoker容器操作。 现在在10.13.181.85这台机器上面查看集群的节点的信息。info命令可以换成任何一个Swarm支持的docker命令,这些命令可以查看官方文档 sudo docker –H 10.13.181.83:2376 info 由上图的结果,我们可以发现一个问题:明明这个小集群中是有3个节点的,但是info命令只显示了2个节点。还缺少节点10.32.105.124。为什么会出现这个情况呢? 因为10.32.105.124这台机器没有设置上面的docker daemon监听0.0.0.0:2375这个端口,所以Swarm没办法吧这个节点加入集群中来。 在使用Docker Hub内置的发现服务时,会出现一个问题,就是使用swarm create时会出现 time="2015-04-21T08:56:25Z" level=fatal msg="Get https://discovery-stage.hub.docker.com/v1/clusters/d947b55aa8fb9198b5d13ad81f61ac4d: dial tcp: i/o timeout" 类似于这样的错误,不知道是什么原因,有待解决。 当使用Docker Hub内置的服务发现功能出现问题时,可以使用下面的第二种方法。 第二种方法:使用文件 第二种方法相对而言比第一种方法要简单,也更不容易出现timeout的问题。 第一步:在sclu083这台机器上新建一个文件,把要加入集群的机器的IP地址写进去 第二步:在sclu083这台机器上面执行swarm manage命令: sudo docker run –d –p 2376:2375 –v $(pwd)/cluster:/tmp/cluster swarm manage file:///tmp/cluster 注意:这里一定要使用-v命令,因为cluster文件是在本机上面,启动的容器默认是访问不到的,所以要通过-v命令共享。还有,file:///千万不能忘记了 可以看到,swarm已经运行起来了。现在可以查看下集群节点信息了,使用命令: sudo docker run –rm –v $(pwd)/cluster:/tmp/cluster swarm list file:///tmp/cluster (在使用文件作为服务发现的时候,貌似manage list命令只能在swarm manage节点上使用,在其他节点上好像是用不了) 好了,现在集群也已经运行起来了,可以跟第一种方法一样在其他机器上使用集群了。同样在sclu085 机器上做测试: 可以看到,成功访问并且节点信息是正确的。接下来可以把上面的info命令替换成其他docker可执行命令来使用这个晓得Docker集群了。 Swarm调度策略 Swarm在schedule节点运行容器的时候,会根据指定的策略来计算最适合运行容器的节点,目前支持的策略有:spread,binpack,random. Random顾名思义,就是随机选择一个Node来运行容器,一般用作调试用,spread和binpack策略会根据各个节点的可用的CPU,RAM以及正在运行的容器的数量来计算应该运行容器的节点。 在同等条件下,Spread策略会选择运行容器最少的那台节点来运行新的容器,binpack策略会选择运行容器最集中的那台机器来运行新的节点(The binpack strategy causes Swarm to optimize for the container which is most packed.)。 使用Spread策略会使得容器会均衡的分布在集群中的各个节点上运行,一旦一个节点挂掉了只会损失少部分的容器。 Binpack策略最大化的避免容器碎片化,就是说binpack策略尽可能的把还未使用的节点留给需要更大空间的容器运行,尽可能的把容器运行在一个节点上面。 Constraint Filter 通过label来在指定的节点上面运行容器。这些label是在地洞docker daemon时指定的,也可以卸载/etc/default/docker这个配置文件里面。 sudo docker run –H 10.13.181.83:2376 run –name redis_083 –d –e constraint:label==083 redis Affinity Filter 使用-e affinity:container==container_name / container_id –-name container_1可以让容器container_1紧挨着容器container_name / container_id执行,也就是说两个容器在一个node上面执行(You can schedule 2 containers and make the container #2 next to the container #1.) 先在一台机器上启动一个容器 sudo docker -H 10.13.181.83:2376 run --name redis_085 -d -e constraint:label==085 redis 接下来启动容器redis_085_1,让redis_085_1紧挨着redis_085容器运行,也就是在一个节点上运行 sudo docker –H 10.13.181.83:2376 run –d –name redis_085_1 –e affinity:container==redis_085 redis 通过-e affinity:image=image_name命令可以指定只有已经下载了image_name的机器才运行容器(You can schedule a container only on nodes where the images are already pulled) 下面命令在只有redis镜像的节点上面启动redis容器: sudo docker –H 100.13.181.83:2376 run –name redis1 –d –e affinity:image==redis redis 下面这条命令达到的效果是:在有redis镜像的节点上面启动一个r名字叫做redis的容器,如果每个节点上面都没有redis容器,就按照默认的策略启动redis容器。 sudo docker -H 10.13.181.83:2376 run -d --name redis -e affinity:image==~redis redis Port filterPort也会被认为是一个唯一的资源 sudo docker -H 10.13.181.83:2376 run -d -p 80:80 nginx 执行完这条命令,任何使用80端口的容器都是启动失败。 结束语: 本文详细介绍了两种方法来使用Swarm管理Docker集群。但是Swarm是一个比较新的项目,目前还处于研发阶段,Swarm的发展十分快速,功能和特性的变更迭代还非常频繁。因此,可以说Swarm还不推荐被用于生产环境中,但可以肯定的是Swarm是一项很有前途的技术。 最近在学Go,准备抽时间好好研究下Swarm源码。Go是一门很有前途的语言。

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

Docker Toolbox 学习教程【转载】

最近在研究虚拟化,容器和大数据,所以从Docker入手,下面介绍一下在Windows下怎么玩转Docker。Docker本身在Windows下有两个软件,一个就是Docker,另一个是Docker Toolbox。这里我选择的是Docker Toolbox,为什么呢?参见官方文档:https://blog.docker.com/2015/08/docker-toolbox/首先我们从官网下载最新版的Windows Docker Toolbox。安装后会安装一个VirtualBox虚拟机,一个Kitematic,这是GUI管理Docker的工具,没有发布正式版,不推荐使用,另外还有就是我们在命令行下用到的docker-machine和docker命令了。 基本使用 安装完成Toolbox后会有一个Docker Quickstart Terminal的快捷方式,双击运行如果报错,那可能是因为你已经安装了Hyper-v,所以VirtualBox无法用64位的虚拟机。需要卸载Hyper-v。 运行后会在Virtualbox中创建一个叫做default的虚拟机,然后很有可能会卡在waiting for an IP的命令下,然后就死活不动了。我的做法是彻底放弃Docker Quickstart Terminal,根本不用这玩意儿,关掉,我们用PowerShell进行虚拟机的管理。 打开PowerShell,输入: docker-machine ls 我们可以看到我们当前的Docker虚拟机的状态。如果什么都没有的话,那么我们可以使用以下命令创建一个Docker虚拟机。 docker-machine create --driver=virtualbox default 创建完毕后,我们在用docker-machine ls确认我们的Docker虚拟机在运行中。 然后使用以下命令获得虚拟机的环境变量: docker-machine env default 然后再输入: docker-machine env default | Invoke-Expression 这样我们就把当前的PowerShell和虚拟机里面的Docker Linux建立的连接,接下来就可以在PowerShell中使用docker命令了。 比如我们要查看当前有哪些镜像: docker images 当前有哪些容器: docker ps –a 其他各种docker命令我就不在这里累述了。 Docker虚拟机文件地址修改 默认情况下,docker-machine创建的虚拟机文件,是保存在C盘的C:\Users\用户名\.docker\machine\machines\default 目录下的,如果下载和使用的镜像过多,那么必然导致该文件夹膨胀过大,如果C盘比较吃紧,那么我们就得考虑把该虚拟机移到另一个盘上。具体操作如下: 1.使用docker-machine stop default停掉Docker的虚拟机。 2.打开VirtualBox,选择“管理”菜单下的“虚拟介质管理”,我们可以看到Docker虚拟机用的虚拟硬盘的文件disk。 3.选中“disk”,然后点击菜单中的“复制”命令,根据向导,把当前的disk复制到另一个盘上面去。 4.回到VirtualBox主界面,右键“default”这个虚拟机,选择“设置”命令,在弹出的窗口中选择“存储”选项。 5.把disk从“控制器SATA”中删除,然后重新添加我们刚才复制到另外一个磁盘上的那个文件。 这是我设置好后的界面,可以看到我在步骤3复制的时候,复制到E:\VirtualBox\default\dockerdisk.vdi文件去了。 6.确定,回到PowerShell,我们使用docker-machine start default就可以启动新地址的Docker虚拟机了。确保新磁盘的虚拟机没有问题。就可以把C盘那个disk文件删除了。 【注意:不要在Window中直接去复制粘贴disk文件,这样会在步骤5的时候报错的,报错的内容如下,所以一定要在VirtualBox中去复制!】 Failed to open the hard disk file D:\Docker\boot2docker-vm\boot2docker-vm.vmdk. Cannot register the hard disk 'D:\Docker\boot2docker-vm\boot2docker-vm.vmdk' {9a4ed2ae-40f7-4445-8615-a59dccb2905c} because a hard disk C:\Users\用户名\.docker\machine\machines\default\disk.vmdk' with UUID {9a4ed2ae-40f7-4445-8615-a59dccb2905c} already exists. Result Code: E_INVALIDARG (0x80070057) Component: VirtualBox Interface: IVirtualBox {fafa4e17-1ee2-4905-a10e-fe7c18bf5554} Callee RC: VBOX_E_OBJECT_NOT_FOUND (0x80BB0001) 镜像加速 在国内使用Docker Hub的话就特别慢,为此,我们可以给Docker配置国内的加速地址。我看了一下,DaoCloud和阿里云的镜像加速还不错,另外还有网易的蜂巢。选一个就行了。以DaoClound为例,注册账号,然后在https://www.daocloud.io/mirror就可以看到DaoClound提供给您的镜像加速的URL。然后到PowerShell中去依次执行: docker-machine ssh default sudo sed -i "s|EXTRA_ARGS='|EXTRA_ARGS='--registry-mirror=加速地址 |g" /var/lib/boot2docker/profile exit docker-machine restart default 这样重启Docker后就可以用国内的镜像来加速下载了。 试一下下载一个mysql看看快不快: docker pull mysql 下载完镜像,我们运行一个容器: docker run -d -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=123 mysql:latest 接下来我们打开windows下的mysql客户端,服务器地址填docker虚拟机的IP地址,通过docker-machine env可以看到,我这里是192.168.99.100,然后用户名root,密码123,这样我们就可以连接到docker容器里面的mysql了。 【注意,Docker容器是在VirtualBox的虚拟机里面,不是在Windows里面,所以不能用127.0.0.1访问】

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

iPhone入门学习系列教程

iPhone入门学习——TTS使用文档 iPhone入门学习——CoverFlow效果例子 iPhone入门学习——iPhone单元测试方法学习笔记 iPhone入门学习——iPhoneWeb开发学习笔记 Phone入门学习——iPhone私有API使用学习笔记 iPhone入门学习——半翻页动画效果例子 iPhone入门学习——CoreLocation定位学习笔记 iPhone入门学习——iPhone静态库学习笔记 iPhone入门学习——屏幕标记学习笔记 iPhone入门学习——NetworkReachable学习笔记 iPhone入门学习——屏幕标记学习笔记 iPhone入门学习——AddressBook学习笔记 iPhone入门学习——UITabBarController学习笔记 zt- iPhone入门学习——UITabBarController学习笔记 iPhone入门学习——Objective-C学习文档 iPhone入门学习——iPhone学习文档_快捷键 iPhone入门学习——MKMapView学习笔记 iPhone入门学习——AddressBook学习笔记 本文转自qianqianlianmeng博客园博客,原文链接:http://www.cnblogs.com/aimeng/archive/2012/02/15/2352165.html ,如需转载请自行联系原作者

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

Android--刷机教程

版权声明:本文为博主原创文章,转载请标明出处。 https://blog.csdn.net/chaoyu168/article/details/77982282 1、打开https://twrp.me/Devices/网站,输入手机型号下载recovery 2、刷入recovery 第一步:在电脑上下载并解压通用fastboot工具,下载地址:http://pan.baidu.com/s/1jHm5YgI这个小工具是一个绿色adb工具,刷入完成以后,直接删除即可,不会像刷机精灵那种软件还要怎么卸载、删除注册表之类。下载解压后,如图所示,我们把它放在一边,建议解压到桌面,方便查找。 第二步:第一步下载好的的img格式的recovery包,一定要是.img格式后缀的文件,我们把它重命名为recovery.img,如图所示,然后我们把这个img格式的文件复制到刚才解压好的“通用fastboot工具”里面,如图所示哦。 第三步:这个时候,就需要把手机进入到fastboot模式,将手机关机,同时按住音量下+电源键 即可进入到fastboot模式,相信部分发烧友对这个模式非常熟悉吧~当手机出现下面这个样子后,就代表已经进入到fastboot模式了。 第四步:将已经进入到fastboot模式下的手机连接电脑,如果电脑提示没有连接成功,基本上是驱动没有安装好造成的,建议先在电脑上安装好驱动。连接好后,双击打开通用fastboot工具文件夹,按住键盘上的shift键,同时鼠标在空白处右击,选择出现的对话框里的”在此处打开对话框窗口“,如图所示。 第五步:此时,手动输入”fastboot flash recovery recovery.img“(引号不需要输入),输入完毕后,按回车键确认。当屏幕上出现下方类似字符后,提示”okay、finished“等字样,即表示刷入成功。这时,拔掉数据线即可完成所有步骤!要检查的话,拔掉数据线,长按电源键出现mi标志重新启动时按住音量上+电源键 进入rec,否则还是官方rec哦~ 4、去ROM之家、ROM基地等网站查找下载自己手机型号的rom包(.zip格式),然后重命名为update.zip;传到手机SD卡。 5、然后手机关机,同时按住关机键和音量下键,进入recovery模式 双wipe: wipedata/factoryreset——Yes——deletealluserdata. wipecachepartition——Yes-WipeCache. 返回主界面,选择【Installzip from SDCARD】(从SD卡选择更新)然后再选择【choose zip from sdcard】(从SD卡选择升级包更新),接着选中你放入存储卡中的ROM包【update.zip】,选择是,等待完成,返回上级菜单,最后选择【Reboot system now】

资源下载

更多资源
Mario

Mario

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

Spring

Spring

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

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

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

用户登录
用户注册