自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

小识的博客

放弃很容易,但坚持一定很酷

  • 博客(472)
  • 资源 (15)
  • 论坛 (1)
  • 收藏
  • 关注

原创 面试官:说一下JVM内存分配策略?

JVM运行时数据区Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域都有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有些区域则依赖用户线程的启动和结束而建立和销毁。Java虚拟机所管理的内存将会包括以下几个运行时数据区域其中方法区和堆是所有线程共享的数据区。程序计数器,虚拟机栈,本地方法栈是线程隔离的数据区虚拟机栈和本地方法栈中的空间会随着方法的调用和完成而不断分配和释放。应用中创建的对象则会被分配到堆中,当对象不在使用的时候会.

2021-07-23 19:55:53 42

原创 面试官:说一下类加载的过程

加载当我们要使用一个类的时候,要通过ClassLoader将类加载到内存中类加载阶段主要完成如下三件事情通过全类名,获取类的二进制流解析类的二进制流为方法区内的数据结构创建一个java.lang.Class类的实例,表示该类型,作为方法区这个类的访问入口通过全类名,获取类的二进制流的方式有很多种从zip压缩包中获取从网络中获取运行时计算生成,如动态代理技术…对于非数组类型的加载阶段,即可以使用Java虚拟机内置的类加载器去完成,也可以使用用户自定义的类加载器去完成链接链接.

2021-07-22 15:08:01 1709 8

原创 618核心服务内存溢出,P0安排上了

P0事故安排上来原来以为内存溢出这种事情只会发生在书本上,没想到在我们生产环境发生了,而且是618,P0事故安排上了。先回顾一下内存溢出排查的基本思路,然后再来复盘一下内存溢出发生的原因内存溢出排查我们先来了解一下Java堆的组成机构。对于大多数应用来说,Java堆(Java Heap)是Java虚拟机锁管理的内存中最大的一块。Java堆是所有线程共享的一块内存区域,在虚拟机启动时创建。此内存区域的唯一目的就是存放对象实例,几乎所有的对象实例都在这里分配内存堆的结构如下新生代老年代的具体划分比.

2021-06-26 17:31:59 145 2

原创 Dubbo源码解析:BeanFactory,封装复杂Bean的创建过程

创建Bean的方式常见的创建Bean的方式有如下四种通过构造器通过静态工厂方法通过Bean工厂方法通过FactoryBean@Data@ToStringpublic class User { private Long id; private String name; public static User createUser() { User user = new User(); user.setId(1L); user.setName("li"); retu.

2021-06-17 20:36:16 46

原创 Dubbo实战:如何保证接口幂等

介绍幂等性就是同一个操作执行多次,产生的效果一样。如http的get请求,数据库的select请求就是幂等的在分布式系统中,保证接口的幂等性非常重要,如提交订单,扣款等接口都要保证幂等性,不然会造成重复创建订单,重复扣款,那么如何保证接口的幂等性呢?Dubbo在进行服务调用的时候,如果调用失败,默认会重试2次,此时保证接口的幂等性就非常重要了。前端保证幂等性的方法按钮只能点击一次用户点击按钮后将按钮置灰,或者显示loading状态RPG模式即Post-Redirect-Get,当客户提交表.

2021-06-17 15:59:08 69

原创 Dubbo源码解析:Dubbo SPI是如何实现 AOP,IOC,自适应,自动激活的?

ExtensionLoader的工作原理Dubbo在启动的时候默认会扫描这三个目录下的配置,以加载需要的扩展类/META-INF/services/META-INF/dubbo/META-INF/dubbo/internalExtensionLoader是Dubbo SPI中用来加载扩展类的,有如下三个重要方法,搞懂这3个方法基本上就搞懂Dubbo SPI了。加载扩展类的三种方法如下getExtension(),获取普通扩展类getAdaptiveExtension(),获取自适应扩展类.

2021-06-17 11:54:46 106 3

原创 手写RPC框架:Spring Bean 生命周期详解

基本概念我们将自己写的RPC框架和Spring进行整合,分析Dubbo源码的时候,都要对Spring Bean的生命周期有一个清晰的理解,所以这一节我们就分析一下Spring Bean的生命周期Spring是一个IOC容器当我们不用Spring进行开发时,我们需要在代码中设置对象的依赖关系。当我们用了Spring之后,由Spring来管理这种依赖关系,当我们想使用对象时,直接从Spring容器中获取即可BeanDefinition在Spring中对象被叫做Bean,因为Spring Bean在J.

2021-06-16 21:09:19 44

原创 Dubbo源码解析:基于注解配置原理解析

使用注解开发一个Dubbo应用客户端@Component("demoServiceComponent")public class DemoServiceComponent implements DemoService { @Reference private DemoService demoService; @Override public String sayHello(String name) { return demoService.sayHe.

2021-06-16 21:00:39 78 2

原创 Dubbo面试:高频面试题汇总

Dubbo服务注册和发现的流程各种角色如下Provider:暴露服务的服务提供方Consumer:调用远程服务消费方Registry:服务注册与发现注册中心Monitor:监控中心和访问调用统计Container:服务运行容器Dubbo服务注册和发现的流程如下服务容器Container负责启动,加载,运行服务提供者。服务提供者Provider在启动时,向注册中心注册自己提供的服务。服务消费者Consumer在启动时,向注册中心订阅自己所需的服务。注册中心Registry返回服.

2021-06-16 14:39:39 185 3

原创 生产问题:@Reference注入为空

线上发生事故了有一次我负责的系统和收银系统同时上线一波(用的是Dubbo)。然后很神奇的事情发生了,收银系统用@Reference注解注入我的接口,然后这个接口的实现类居然为空。其实我们当时没排查出来是什么原因?重启了一下就好了,毕竟重启大法好。 但本着不能给用户充钱的路上造成阻碍,还是要排查一波这个代理对象为空是如何造成的。线上dubbo的版本为2.8.9,注意包名是(com.alibaba)为了方便大家理解我说的内容,简单说一下RPC框架的执行流程。Server将服务信息注册到Regi.

2021-06-13 14:23:58 55

原创 生产问题:线程池被打满

线程池被打满的原因有哪些当系统中接口的响应时间过长或者直接拒绝响应时,你此时里面就应该想到的是Dubbo线程池是否被打满了?然后去监控系统看一下线程池的活跃连接数。Dubbo线程池被打满应该是一个很常见的问题,那么线程池为什么会被打满呢?public class FixedThreadPool implements ThreadPool { @Override public Executor getExecutor(URL url) { String name = .

2021-06-13 14:23:01 255 4

原创 Dubbo实战:Dubbo的前世今生

分布式系统的架构演进过程Dubbo框架的出现是分布式系统演进的结果,我们先来回顾一下分布式系统的演进过程1 单应用架构2 应用服务器和数据库服务器分离单机负载越来越来,所以要将应用服务器和数据库服务器分离3 应用服务器做集群每个系统的处理能力是有限的,为了提高并发访问量,需要对应用服务器做集群分布式和集群的概念经常被搞混,现在一句话让你明白两者的区别。分布式:一个业务拆分成多个子业务,部署在不同的服务器上集群:同一个业务,部署在多个服务器上例如:电商系统可以拆分成商品,订单,用户等.

2021-06-12 20:58:31 193 3

原创 Dubbo源码解析:服务目录和路由

介绍之前的文章我们详细说了服务调用的过程,今天我们就来细化一下MockCluster到FailoverClusterInvoker的调用过程。当我们有多个服务提供者时,需要根据不同的策略从众多的提供者中选出合适的Invoker来发起调用,那么这些Invoker存放在哪?就在服务目录中。服务目录还会根据路由策略策略对最终返回的Invoker进行再次过滤。比如ip为A的Consumer只能让它调用ip为B的producer,路由的配置有很多方式,我们详聊。整体的流程下如图所示Invoker从D.

2021-06-12 10:29:53 185 1

原创 @Reference注入为空

线上发生事故了前天晚上上线一波,发生了一个挺有意思的事,昨天复盘了一下,分享一下。晚上的时候,我负责的系统和收银系统同时上线一波(用的是Dubbo)。然后很神奇的事情发生了,收银系统用@Reference注解注入我的接口,然后这个接口的实现类居然为空。其实我们当时没排查出来是什么原因?重启了一下就好了,毕竟重启大法好。 但本着不能给用户充钱的路上造成阻碍,还是要排查一波这个代理对象为空是如何造成的。线上dubbo的版本为2.8.9,注意包名是(com.alibaba)为了方便大家理解我说的内容.

2021-06-10 22:15:48 270 4

原创 Dubbo面试:Dubbo中用到了哪些设计模式?

介绍策略模式这个毫无争议,Dubbo是基于SPI来扩展的,SPI就是典型的策略模式。Dubbo中可替换的组件太多了,例如负载均衡策略实现类解释RandomLoadBalance随机策略(默认)RoundRobinLoadBalance轮询策略LeastActiveLoadBalance最少活跃调用数ConsistentHashLoadBalance一致性hash策略工厂模式简单工厂模式:提供一个方法,返回创建好的对象public clas.

2021-06-07 14:37:38 215 4

原创 手写RPC框架:基于Java SPI的可扩展版

封装服务接口在之前的章节中,我们基于Java Socket实现了一个极简版本的RPC框架,了解了其实现的大概套路,本节我们就基于Java SPI写一个可扩展的RPC框架。各种组件都有对应的接口,如果你想替换某一个组件的实现,只需要重写接口的实现类,配置一下即可。老规矩,先封装一个获取学生信息的公共接口public interface StudentService { Student getStudentInfo(Integer id);}@Data@Builder@NoArgsC.

2021-06-05 15:21:16 150 6

原创 手写RPC框架:基于RPC框架封装一个spring-boot-starter

介绍整合的逻辑非常简单,只写了2个注解,1个自动装配的类和2个扩展类开发注解服务引入注解,用在需要进行远程调用的接口上@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.FIELD)public @interface RpcReference {}服务导出注解,我这里取巧了一波,在这个注解上加了@Component注解,这样被这个注解标记的类就能被注入到spring容器中。更优雅的实现方式是,自己扫描加了RpcService.

2021-06-04 16:55:26 236 7

原创 手写RPC框架:5分钟极速入门Netty的使用

介绍当我们用Netty开发网络应用程序时,一般只需要写对应的ChannelHandler即可,在ChannelHandler中处理业务逻辑Channel是网络通信的载体,你可以把它认为是一个实际的物理连接,Channel有很多种事件,如连接建立,连接关闭,数据读取。随着事件的发生会让Channel处于不同的生命周期,当对应的事件发生时,会回调ChannelHandler接口的对应方法事件回调方法解释channelRegisteredChannel创建后被注册到EventLoop.

2021-06-02 19:37:36 72 2

原创 Dubbo实战:如何高效的测试Dubbo接口

Dubbo Admin 使用我们可以用新版的Dubbo Amind来测试Dubbo接口我们在本地启动一个Dubbo Admin来演示一下用法github地址:https://github.com/apache/dubbo-admingit clone https://github.com/apache/dubbo-admincd dubbo-adminmvn clean package -DskipTests=truecd dubbo-admin-distribution/targetj.

2021-06-02 15:42:52 193 9

原创 手写RPC框架:可扩展性神器 Java SPI

SPI设计Java SPI的作用非常简单,就是根据配置文件决定接口的实现类,典型的策略模式我先演示一下Java SPI的使用demo,项目结构如下public interface Car { void getBrand();}public class BenzCar implements Car { public BenzCar() { System.out.println("BenzCar"); } @Override pub.

2021-05-31 22:32:00 251 8

原创 手写单点登陆starter:基于dubbo开发单点登陆starter

基于dubbo开发单点登陆starter项目总共分为3个模块sso-spring-boot-starter:单点登陆starter模块,引入这个模块即可实现单点登陆sso-server:用户登陆的服务端sso-sample:单点登陆starter模块使用demo开发sso-server模块当我们定义好sso-servere模块的用户表后,就可以使用我们之前介绍的mybatis generator生成项目的dao层CREATE TABLE `user_info` ( `id` int(1.

2021-05-31 15:49:20 471 9

原创 手写单点登陆starter:什么是单点登陆?

单系统登陆在企业的发展初期,系统不是很多,每个系统也比较独立,每个系统都有各自的登陆模块,各类工作人员每天只登陆自己负责的系统即可。这个时候登陆的实现比较简单,基于cookie和session就能实现。多系统登陆随着企业的发展,系统越来越多,并且信息化程度也越来越高。各种系统之间的数据逐渐打通,工作流程形成闭环,这时系统逐渐微服务化。但是用户用着不爽了,每天工作得登录好几个系统,超级麻烦啊,能不能登陆一次就能在多个系统之间随意访问。为了应对这种场景,就得新建一个登陆服务比如我访问财务系统,没.

2021-05-31 14:23:55 67 2

原创 手写单点登陆starter:Spring Boot 自动装配是如何实现的?

Enable注解是如何实现的?当我们使用Spring Boot的时候,只需要在启动类上加@SpringBootApplication注解即可,非常方便。@SpringBootApplication是一个复合注解@SpringBootConfiguration@EnableAutoConfiguration@ComponentScan其中自动装配的功能就是由@EnableAutoConfiguration注解实现的,那么@EnableAutoConfiguration是如何实现这个神奇的功能的?.

2021-05-31 14:10:43 26

原创 手写单点登陆starter:如何手写一个Spring Boot starter?

蛮荒的年代最近用了一些spring-boot-starter-data的组件(redis,mongodb,jpa,elasticsearch等),才意识到Spring Boot真是极大的简化了开发的流程。以演进的视角来分享一下spring boot是如何通过自动装配来简化开发的XML配置Spring是一个容器,里面保存了你所需要的对象和对象之间的依赖关系。当我们需要对象A时,不用从头开始new,只需要告诉Spring把A给我,Spring就会把对象A给你,即IOC。刚开始这些对象以及对象之间的依赖关.

2021-05-31 14:06:04 29

原创 手写单点登陆starter:用mybatis generator快速生成dao层

介绍后面一节写登陆端的接口时,需要用mybatis generator生成dao层,所以本节介绍一下mybatis generator的使用MyBatis Generator的作用就是根据数据库中的表结构,帮我们自动生成和表结构相同的实体类,mapper接口,包含基本增删改查语句的XML文件,我以一个例子演示如何优雅的使用MyBatis Generator,我会把例子放在GitHub上,所以不用担心配置看不全的问题。造数据,新建一个Spring Boot项目建一个学生表,插入四条数据CREATE.

2021-05-31 14:03:37 23

原创 Dubbo实战:5分钟极速入门Dubbo使用

介绍在使用Dubbo开发时,我们一般将项目分为如下3个模块api:将服务提供者和服务消费者都需要用到的接口放在api层consumer:服务消费者producer:服务提供者假如有如下一个场景,我们需要查询用户的信息,用户请求发送到consumer这个服务,然后consumer这个服务调用producer这个服务获取到用户信息,并返回给用户Api模块实现用户信息封装到UserInfo类中,因为需要网络传输,所以需要实现序列化接口public class UserInfo implemen.

2021-05-29 16:37:49 320 8

原创 手写RPC框架:极简版

思路分析前面的文章我们详细分析了如何实现一个RPC框架,后面几个章节,我们就自己来写一个RPC框架。框架先实现一个最基本的功能,然后不断迭代,完善这些功能。首先我们需要封装一个请求对象,包含要调用方法的基本信息,producer端收到这些请求后,找到对应的服务和方法,执行方法调用,将结果返回consumer端。consumer端组装请求和网络调用的过程交给动态代理对象来完成,这样就可以接耦方法调用和网络请求因为是极简版,所以本节我们只实现点对点调用的过程,不涉及注册中心的内容封装网络请求对象.

2021-05-29 15:42:15 68 2

原创 2w字搞懂Spring Bean的一生

基本概念Spring是一个IOC容器当我们不用Spring进行开发时,我们需要在代码中设置对象的依赖关系。当我们用了Spring之后,由Spring来管理这种依赖关系,当我们想使用对象时,直接从Spring容器中获取即可BeanDefinition在Spring中对象被叫做Bean,因为Spring Bean在Java类的基础上增加了很多概念,比如scope(作用域),isLazyInit(是否延迟初始化),isSingleton(是否单例),此时Java类不能完整的描述,所以需要新的定义描述类,.

2021-05-27 01:14:30 70

原创 MySQL三种日志有啥用?如何提高MySQL并发度?

MySQL数据存储和查询流程加入说现在我们建了如下一张表CREATE TABLE `student` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '学号', `name` varchar(10) NOT NULL COMMENT '学生姓名', `age` int(11) NOT NULL COMMENT '学生年龄', PRIMARY KEY (`id`), KEY `idx_name` (`name`)) ENGINE=Inn.

2021-05-16 19:51:32 108 4

原创 搞定RocketMQ:消息消费失败了,如何快速找回消息?

消息查询介绍当我们使用MQ的时候,一个比较好的习惯就是把发送的消息和接收到的消息打印到日志中。当我们排查问题的时候就非常方便。例如B服务需要消费A服务发送的关闭订单的消息。如果一个订单迟迟未关闭,此时可能有三种情况A服务发送失败B服务消费失败B服务没有收到消息A服务发送失败可以通过日志快速确认。如果A服务发送成功,此时就可能根据消息的属性快速查找到具体的消息,看这条消息是否被对应的ConsumerGroup消费过,如果没消费此时说明B服务之类的配置可能有问题,导致没有收到消息。如果被消费.

2021-05-09 17:39:39 110

原创 搞定RocketMQ:延时消息是如何实现的?

使用场景当我们在电商平台购买一件物品,但是没有付款时,平台会把对应的库存减少,并在会在30分钟后关闭这个订单。如果30分钟内你没有付款,平台会自动关闭这个订单,此时对应的库存被释放出来。我们应该怎么在订单创建后30分钟后并且没有付款的情况下将这个订单关闭掉?不断的扫描数据库吗?扫库的时间间隔怎么确定?间隔太长,关闭订单的时间点不精确,间隔太短,数据库的压力又太大?此时我们就可以用到延时消息,订单没有支付发一个延时时间为30m的延时消息,30m过后系统就会收到这个消息,进而关闭订单RocketMQ.

2021-05-09 15:41:13 116

原创 搞定RocketMQ:消息过滤是如何实现的?

介绍RocketMQ的过滤方式主要分为如下2种,其中类模式过滤的方式会在RocketMQ 5.0.0版本中被移除,所以不进行详细分析根据Tag过滤示例public class TagFilterProducer { public static final String RPODUCER_GROUP_NAME = "tagFilterProducerGroup"; public static final String TOPIC_NAME = "tagFilterTopic";.

2021-05-07 16:22:06 93

转载 RocketMQ 设计原理与最佳实践

介绍RocketMQ 是一款开源的分布式消息系统,基于高可用分布式集群技术,提供低延时的、高可靠的消息发布与订阅服务。同时,广泛应用于多个领域,包括异步通信解耦、企业解决方案、金融支付、电信、电子商务、快递物流、广告营销、社交、即时通信、移动应用、手游、视频、物联网、车联网等。RocketMQ 前身叫做MetaQ,在MetaQ发布3.0版本的时候改名为 RocketMQRocketMQ本质上的设计思路和Kafka类似,但是和Kafka不同的是其使用Java进行开发,由于在国内的Java受众群体远远多.

2021-05-06 23:31:00 67

原创 面试官:RocketMQ如何保证消息的可靠性投递?

介绍要想保证消息的可靠型投递,无非保证如下3个阶段的正常执行即可。生产者将消息成功投递到brokerbroker将投递过程的消息持久化下来消费者能从broker消费到消息发送端消息重试producer向broker发送消息后,没有收到broker的ack时,rocketmq会自动重试。重试的次数可以设置,默认为2次DefaultMQProducer producer = new DefaultMQProducer(RPODUCER_GROUP_NAME);// 同步发送设置重试次数为.

2021-04-23 00:08:50 513 2

原创 面试官:Spring声明式事务在那些情况下会失效?

编程式事务在Spring中事务管理的方式有两种,编程式事务和声明式事务。先详细介绍一下两种事务的实现方式配置类@Configuration@EnableTransactionManagement@ComponentScan("com.javashitang")public class AppConfig { @Bean public DruidDataSource dataSource() { DruidDataSource ds = new DruidDat.

2021-04-11 19:14:31 269

原创 面试官:BeanFactory和FactoryBean有哪些区别?

区别说实话,他俩初了名字比较像以外,好像没有其他共同点了。BeanFactory和FactoryBean有哪些区别?BeanFactory是一个最基础的IOC容器,提供了依赖查找,依赖注入等基础的功能FactoryBean是创建Bean的一种方式,帮助实现复杂Bean的创建和BeanFactory相关的还有一个高频的面试题ApplicationContext和BeanFactory有哪些区别?BeanFactory是一个最基础的IOC容器,提供了依赖查找,依赖注入等基础的功能Appl.

2021-04-07 11:40:03 234 1

原创 Spring MVC源码解析:Controller方法的执行过程

RequestMappingHandlerAdapter初始化在之前的文章我们分析了handler的实现方式有三种实现Controller接口实现HttpRequestHandler接口使用@RequestMapping注解这三种handler的实现方式对应的adapter为方式对应的adapter实现Controller接口SimpleControllerHandlerAdapter实现HttpRequestHandler接口HttpRequestHandl.

2021-04-04 14:10:12 132

原创 Spring MVC源码解析:HandlerMethodReturnValueHandler(返回值处理器)

介绍HandlerMethodReturnValueHandler// 是否支持该返回类型boolean supportsReturnType(MethodParameter returnType);// 处理返回值逻辑void handleReturnValue(@Nullable Object returnValue, MethodParameter returnType, ...

2021-04-03 16:40:51 59

原创 Spring MVC源码解析:HandlerMethodArgumentResolver(参数解析器)

介绍参数解析器有什么作用呢?就是将你通过http提交的参数,转化成controller方法的参数。这样你就能很方便的从请求中拿到所需的参数,举几个常用注解的用法Spring MVC参数解析器的用法将需要的参数写出来,spring mvc自动帮你注入,如java.servlet.ServletRequestjava.servlet.ServletResponsejavax.servlet.http.HttpSession@PathVariable@RequestParam@RequestH.

2021-04-03 12:15:25 64

原创 Spring MVC源码解析:自定义配置是如何生效的?

介绍当我们开发Web项目时,当想增加自定义配置的时候,可以通过如下几种方式来实现实现WebMvcConfigurer接口继承WebMvcConfigurerAdapter继承WebMvcConfigurationSupport继承WebMvcConfigurerAdapter的方式已经被废弃了,为什么被废弃呢?我们在开发的过程中提供一个接口时,一般会同时提供一个Adapter类,Adapter类实现这个接口。我们就可以继承这个Adapter类,按照需求覆盖相应的方式,而不用实现接口,然后一.

2021-04-02 19:03:07 45

Qt加载字体文件删除字体文件

Qt加载自己的字体,不用系统提供的QFontComboBox

2017-02-25

FTPServer(windows绿色版)

FTPServer(windows绿色版),FTPServer(windows绿色版)

2018-01-19

将doc文件批量转为docx文件,用python将doc文件批量转为docx文件

用python将doc文件批量转为docx文件,用python将doc文件批量转为docx文件,

2017-12-28

剑指offer高清完整目录版

剑指offer高清完整目录版剑指offer高清完整目录版剑指offer高清完整目录版

2018-01-23

用Python将Word中的内容写入Excel

用Python将Word中的内容写入Excel

2017-08-28

Qt实现多语言的切换

Qt实现国际化,能切换程序的语言

2017-02-25

Qt5串口助手

用Qt5自身的类库开发的串口助手

2016-09-26

mybatis-generator-core-1.3.5.jar

支持接口和XML更名的mybatis-generator,具体使用参考 https://blog.csdn.net/zzti_erlie/article/details/99606620

2019-08-15

MongoDB权威指南第2版(书签,高清).zip

MongoDB权威指南第2版(书签,高清).zip,MongoDB权威指南第2版(书签,高清).zip

2019-05-14

Linux系统命令及Shell脚本实践指南

Linux系统命令及Shell脚本实践指南,书签,清晰,完整版

2019-04-17

Maven实战(高清完整带书签)

Maven实战高清完整带书签,Maven实战高清完整带书签,Maven实战高清完整带书签,Maven实战高清完整带书签

2018-01-09

Spring MVC学习指南

Spring MVC是Spring框架中用于Web应用快速开发的一个模块,其中的MVC是Model-View-Controller的缩写。作为当今业界最主流的Web开发框架,Spring MVC已经成为当前最热门的开发技能,同时也广泛用于桌面开发领域。, 本书重在讲述如何通过Spring MVC来开发基于Java的Web应用。全书共计12章,分别从Spring框架、模型2和MVC模式、Spring MVC介绍、控制器、数据绑定和表单标签库、传唤器和格式化、验证器、表达式语言、JSTL、国际化、上传文件、下载文件多个角度介绍了Spring MVC。除此之外,本书还配有丰富的示例以供读者练习和参考。, 本书是一本Spring MVC的教程,内容细致、讲解清晰,非常适合Web开发者和想要使用Spring MVC开发基于Java的Web应用的读者阅读。

2017-10-13

Qt5串口助手V2.0(能记录上次打开的文件)

Qt5串口助手V2.0(能记录上次打开的文件)

2016-09-27

Qt实现语言切换

Qt实现语言切换

2017-02-23

Qt实现字体文件的加载和删除

Qt实现字体文件的加载和删除

2017-02-25

Java识堂的留言板

发表于 2020-01-02 最后回复 2020-01-02

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人 TA的粉丝

提示
确定要删除当前文章?
取消 删除