huanhuanming个人页面-阿里云开发者社区

个人头像照片 huanhuanming TA的个人档案

个人介绍

暂无个人介绍

擅长的技术

获得更多能力
通用技术能力:

暂时未有相关通用技术能力~

云产品技术能力:

暂时未有相关云产品技术能力~

阿里云技能认证

详细说明
  • 高分内容
  • 最新动态
  • 文章
  • 问答
正在加载, 请稍后...
暂无更多信息
正在加载, 请稍后...
暂无更多信息
正在加载, 请稍后...
暂无更多信息
  • 回答了问题 2019-07-17

    [@小川游鱼][¥20]Java 中,throw 和 throws 有什么区别?

    1.1 throw是语句抛出一个异常。
    语法:throw (异常对象);

         throw e;
    

    1.2 throws是方法可能抛出异常的声明。(用在声明方法时,表示该方法可能要抛出异常)
    语法:(修饰符)(方法名)([参数列表])[throws(异常类)]{......}

            public void doA(int a) throws Exception1,Exception3{......}
    踩0 评论0
  • 回答了问题 2019-07-17

    [@talishboy][¥20]ervlet和struts2的区别?

    strust2 是基于mvc模式对servlet的一种封装
    servlet是java基于j2ee的是一种实现技术
    strust2 由于本身是基于mvc的一种框架,分为几个类块来实现模块功能,
    粗略可以理解为 servlet是struts2的父类
    struts是servlet功能上的扩展

    踩0 评论0
  • 回答了问题 2019-07-17

    [@炯轩][¥20]线程类的构造方法、静态块是被哪个线程调用的

    线程类的构造方法、静态块是被new这个线程类所在的线程所调用的,而run方法里面的代码才是被线程自身所调用的。

    如果说上面的说法让你感到困惑,那么我举个例子,假设Thread2中new了Thread1,main函数中new了Thread2,那么:

    (1)Thread2的构造方法、静态块是main线程调用的,Thread2的run()方法是Thread2自己调用的。

    (2)Thread1的构造方法、静态块是Thread2调用的,Thread1的run()方法是Thread1自己调用的。

    踩0 评论0
  • 回答了问题 2019-07-17

    [@炯轩][¥20]为什么Redis是单线程的还那么快?

    Redis为什么这么快
      
      1、完全基于内存,绝大部分请求是纯粹的内存操作,非常快速。数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1);
      
      2、数据结构简单,对数据操作也简单,Redis中的数据结构是专门进行设计的;
      
      3、采用单线程,避免了不必要的上下文切换和竞争条件,也不存在多进程或者多线程导致的切换而消耗 CPU,不用去考虑各种锁的问题,不存在加锁释放锁操作,没有因为可能出现死锁而导致的性能消耗;
      
      4、使用多路I/O复用模型,非阻塞IO;
      
      5、使用底层模型不同,它们之间底层实现方式以及与客户端之间通信的应用协议不一样,Redis直接自己构建了VM 机制 ,因为一般的系统调用系统函数的话,会浪费一定的时间去移动和请求;
      
      以上几点都比较好理解,下边我们针对多路 I/O 复用模型进行简单的探讨:
      
      (1)多路 I/O 复用模型
      
      多路I/O复用模型是利用 select、poll、epoll 可以同时监察多个流的 I/O 事件的能力,在空闲的时候,会把当前线程阻塞掉,当有一个或多个流有 I/O 事件时,就从阻塞态中唤醒,于是程序就会轮询一遍所有的流(epoll 是只轮询那些真正发出了事件的流),并且只依次顺序的处理就绪的流,这种做法就避免了大量的无用操作。
      
      这里“多路”指的是多个网络连接,“复用”指的是复用同一个线程。采用多路 I/O 复用技术可以让单个线程高效的处理多个连接请求(尽量减少网络 IO 的时间消耗),且 Redis 在内存中操作数据的速度非常快,也就是说内存内的操作不会成为影响Redis性能的瓶颈,主要由以上几点造就了 Redis 具有很高的吞吐量。
      

    踩0 评论0
  • 回答了问题 2019-07-17

    [@talishboy][¥20]Tomcat好用,还是jboss好用?

    Tomcat:应用也算非常广泛的web服务器,支持部分j2ee,免费,出自apache基金组织,支持Servlet、jsp。 
          JBoss:开源的应用服务器,比较受人喜爱,免费(文档要收费) 

    JBoss还具有如下六大优点: 
    1、JBoss是免费的,开放源代码J2EE的实现,它通过LGPL许可证进行发布。 
    2、JBoss需要的内存和硬盘空间比较小。 
    3、安装非常简单。先解压缩JBoss打包文件再配置一些环境变量就可以了。 
    4、JBoss能够"热部署",部署BEAN只是简单拷贝BEAN的JAR文件到部署路径下就可以了。如果没有加载就加载它;如果已经加载了就卸载掉,然后LOAD这个新的。 
    5、JBoss与Web服务器在同一个Java虚拟机中运行,Servlet调用EJB不经过网络,从而大大提高运行效率,提升安全性能。 
    6、用户可以直接实施J2EE-EAR,而不是以前分别实施EJB-JAR和Web-WAR,非常方便

    踩0 评论0
  • 回答了问题 2019-07-17

    [@炯轩][¥20]用RxJava做安卓开发有什么优点?

    异步、简洁(逻辑、代码读写)。内部支持多线程操作,强大的map和flatmap保证了依赖上一次接口数据进行二次处理时不会发生嵌套,将各个模块分离。
    java1.8和第三方框架支持Lambda流式。保证了Rxjava的代码在阅读上更加简洁。
    随着程序逻辑的复杂,依然保持简洁。解耦了各个模块操作,单一化,不嵌套。

    踩0 评论0
  • 回答了问题 2019-07-17

    [@倚贤][¥20]Java项目中如何调用R语言方法?

    主要两种方法 rJava与Rserve

     JRI模式实际上是一种嵌入式的模式,二Rserve是一种远程调用模式。

      1.1 JRI(嵌入式模式) 对中文的支持较好,但是使用JRI模式下很容易造成整个系统的崩溃,比如在java调用R的时候,中间出现了异常或者错误,导致java虚拟机崩溃,从而导致整个系统崩溃。

      1.2 Rserve(远程通信模式) 优点是javaWeb项目不需要去维护R的运行,通过TCP/IP协议直接进行通讯。缺点是它对中文的支持很弱,尤其是在windows的环境中,基本不支持中文;在linux环境下,对中文的支持稍微好些。不是完全支持中文的话,不能用于返回值有中文或者输入有中文的系统。

    踩0 评论0
  • 回答了问题 2019-07-17

    [@倚贤][¥20]如何理解spring boot中的aop 面向切面编程

    连接点(Joinpoint): 表示需要在程序中插入横切关注点的扩展点,连接点可能是类初始化、方法执行、方法调用、字段调用或处理异常等等,Spring只支持方法执行连接点;在AOP中表示为“在哪里干”;

            切入点(Pointcut): 选择一组相关连接点的模式,即可以认为连接点的集合,Spring支持perl5正则表达式和AspectJ切入点模式,Spring默认使用AspectJ语法;在AOP中表示为“在哪里干的集合”;

            通知(Advice): 在连接点上执行的行为,通知提供了在AOP中需要在切入点所选择的连接点处进行扩展现有行为的手段;包括前置通知(before advice)、后置通知(after advice)、环绕通知(around advice),在Spring中通过代理模式实现AOP,并通过拦截器模式以环绕连接点的拦截器链织入通知;在AOP中表示为“干什么”;

            切面(Aspect):横切关注点的模块化,比如日志组件。可以认为是通知、引入和切入点的组合;在Spring中可以使用Schema和@AspectJ方式进行组织实现;在AOP中表示为“在哪干和干什么集合”;
            引入(Introduction): 也称为内部类型声明,为已有的类添加额外新的字段或方法,Spring允许引入新的接口(必须对应一个实现)到所有被代理对象(目标对象);在AOP中表示为“干什么(引入什么)”;
            目标对象(Target Object):需要被织入横切关注点的对象,即该对象是切入点选择的对象,需要被通知的对象,从而也可称为“被通知对象”;由于Spring AOP 通过代理模式实现,从而这个对象永远是被代理对象;在AOP中表示为“对谁干”;
            AOP代理(AOP Proxy): AOP框架使用代理模式创建的对象,从而实现在连接点处插入通知(即应用切面),就是通过代理来对目标对象应用切面。在Spring中,AOP代理可以用JDK动态代理或CGLIB代理实现,而通过拦截器模型应用切面。
            织入(Weaving): 织入是一个过程,是将切面应用到目标对象从而创建出AOP代理对象的过程,织入可以在编译期、类装载期、运行期进行。组装方面来创建一个被通知对象。这可以在编译时完成(例如使用AspectJ编译器),也可以在运行时完成。Spring和其他纯Java AOP框架一样,在运行时完成织入。

    踩0 评论0
  • 回答了问题 2019-07-17

    [@炯轩][¥20]Spring、SpringMVC、SpringBoot的关系

    spring boot就是一个大框架里面包含了许许多多的东西,其中spring就是最核心的内容之一,当然就包含spring mvc。

    spring mvc 是只是spring 处理web层请求的一个模块。

    因此他们的关系大概就是这样:

    spring mvc < spring

    spring boot 我理解就是把 spring spring mvc spring data jpa 等等的一些常用的常用的基础框架组合起来,提供默认的配置,然后提供可插拔的设计,就是各种 starter ,来方便开发者使用这一系列的技术,套用官方的一句话, spring 家族发展到今天,已经很庞大了,作为一个开发者,如果想要使用 spring 家族一系列的技术,需要一个一个的搞配置,然后还有个版本兼容性问题,其实挺麻烦的,偶尔也会有小坑出现,其实蛮影响开发进度, spring boot 就是来解决这个问题,提供了一个解决方案吧,可以先不关心如何配置,可以快速的启动开发,进行业务逻辑编写,各种需要的技术,加入 starter 就配置好了,直接使用,可以说追求开箱即用的效果吧.

    spring 框架有超多的延伸产品例如 boot security jpa etc... 但它的基础就是 spring 的 ioc 和 aop ioc 提供了依赖注入的容器 aop 解决了面向横切面的编程 然后在此两者的基础上实现了其他延伸产品的高级功能 Spring MVC 呢是基于 Servlet 的一个 MVC 框架 主要解决 WEB 开发的问题 因为 Spring 的配置太复杂了 各种 XML JavaConfig hin 麻烦 于是懒人改变世界推出了 Spring boot 约定优于配置 简化了 spring 的配置流程.

    Spring 最初利用“工厂模式”( DI )和“代理模式”( AOP )解耦应用组件。大家觉得挺好用,于是按照这种模式搞了一个 MVC 框架(一些用 Spring 解耦的组件),用开发 web 应用( SpringMVC )。然后有发现每次开发都要搞很多依赖,写很多样板代码很麻烦,于是搞了一些懒人整合包( starter ),这套就是 Spring Boot 。

    踩0 评论0
  • 回答了问题 2019-07-17

    [@炯轩][¥20]乐观锁和悲观锁

    何谓悲观锁与乐观锁
    乐观锁对应于生活中乐观的人总是想着事情往好的方向发展,悲观锁对应于生活中悲观的人总是想着事情往坏的方向发展。这两种人各有优缺点,不能不以场景而定说一种人好于另外一种人。

    悲观锁
    总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁(共享资源每次只给一个线程使用,其它线程阻塞,用完后再把资源转让给其它线程)。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。Java中synchronized和ReentrantLock等独占锁就是悲观锁思想的实现。

    乐观锁
    总是假设最好的情况,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号机制和CAS算法实现。乐观锁适用于多读的应用类型,这样可以提高吞吐量,像数据库提供的类似于write_condition机制,其实都是提供的乐观锁。在Java中java.util.concurrent.atomic包下面的原子变量类就是使用了乐观锁的一种实现方式CAS实现的。

    踩0 评论0
  • 回答了问题 2019-07-17

    [@talishboy][¥20]数据库连接池的原理

    对于一个简单的数据库应用,由于对于数据库的访问不是很频繁。这时可以简单地在需要访问数据库时,就新创建一个连接,用完后就关闭它,这样做也不会带来什么明显的性能上的开销。但是对于一个复杂的数据库应用,情况就完全不同了。频繁的建立、关闭连接,会极大的减低系统的性能,因为对于连接的使用成了系统性能的瓶颈。

    连接复用。通过建立一个数据库连接池以及一套连接使用管理策略,使得一个数据库连接可以得到高效、安全的复用,避免了数据库连接频繁建立、关闭的开销。

    对于共享资源,有一个很著名的设计模式:资源池。该模式正是为了解决资源频繁分配、释放所造成的问题的。把该模式应用到数据库连接管理领域,就是建立一个数据库连接池,提供一套高效的连接分配、使用策略,最终目标是实现连接的高效、安全的复用。

    数据库连接池的基本原理是在内部对象池中维护一定数量的数据库连接,并对外暴露数据库连接获取和返回方法。如:

    外部使用者可通过getConnection 方法获取连接,使用完毕后再通过releaseConnection 方法将连接返回,注意此时连接并没有关闭,而是由连接池管理器回收,并为下一次使用做好准备。

    踩0 评论0
  • 回答了问题 2019-07-17

    [@炯轩][¥20]Linux下如何进行进程调度

    在Linux内核中,调度器可以分成两个层级,在进程中被直接调用的成为通用调度器或者核心调度器,他们作为一个组件和进程其他部分分开,而通用调度器和进程并没有直接关系,其通过第二层的具体的调度器类来直接管理进程
    每个进程必然属于一个特定的调度器类,Linux会根据不同的需求实现不同的调度器类。各个调度器类之间具备一定的层次关系,即在通用调度器选择进程的时候,会从最高优先级的调度器类开始选择,如果通用调度器类没有可运行的进程,就选择下一个调度器类的可用进程,这样逐层递减。

    每个CPU会维护一个调度队列称之为就绪队列,每个进程只会出现在一个就绪队列中,因为同一进程不能同时被两个CPU选中执行。就绪队列的数据结构为struct rq,和上面的层次结构一样,通用调度器直接和rq打交道,而具体和进程交互的是特定于调度器类的子就绪队列。

    踩0 评论0
  • 回答了问题 2019-07-17

    [@talishboy][¥20]springmvc原理

    客户端发送请求-> 前端控制器 DispatcherServlet 接受客户端请求 -> 找到处理器映射 HandlerMapping 解析请求对应的 Handler-> HandlerAdapter 会根据 Handler 来调用真正的处理器开处理请求,并处理相应的业务逻辑 -> 处理器返回一个模型视图 ModelAndView -> 视图解析器进行解析 -> 返回一个视图对象->前端控制器 DispatcherServlet 渲染数据(Moder)->将得到视图对象返回给用户

    踩0 评论0
  • 回答了问题 2019-07-17

    [@倚贤][¥20]Java类加载器及如何加载类

    JAVA类装载方式,有两种:
    1.隐式装载, 程序在运行过程中当碰到通过new 等方式生成对象时,隐式调用类装载器加载对应的类到jvm中。 2.显式装载, 通过class.forname()等方法,显式加载需要的类
    类加载的动态性体现:
    一个应用程序总是由n多个类组成,Java程序启动时,并不是一次把所有的类全部加载后再运行,它总是先把保证程序运行的基础类一次性加载到jvm中,其它类等到jvm用到的时候再加载,这样的好处是节省了内存的开销,因为java最早就是为嵌入式系统而设计的,内存宝贵,这是一种可以理解的机制,而用到时再加载这也是java动态性的一种体现

    踩0 评论0
  • 回答了问题 2019-07-17

    javaweb项目开发报表用什么?开源的

    jasperreport,echart,java自带poi

    踩0 评论0
  • 回答了问题 2019-07-17

    小孩子如何能够集中注意力

    1、让孩子给自己设定一个要自觉提高注意力(专心能力)的目标。此条对较大孩子有效。   2、培养孩子对提高专心这种素质的兴趣。主要可以通过让孩子尝甜头、愿景鼓励、奖励措施等方式来增添兴趣,从而提高专心度。   3、培养孩子对提高专心素质的自信。自信往往通过多肯定、多鼓励来达到。多一些正面暗示,尽量避免负面暗示,例如家长说我们孩子注意力不集中、我们孩子总是不专心,孩子自己说(或认为)我不专心、我无法专心等,都非常不利于自信的培养。   4、排除外界的干扰。   (1)作为家长要为孩子创造一个舒适、安静、良好的环境。最好有单独的房间,家里干净整齐,摆放有序;有良好的生活习惯,讲秩序,整洁而不乱;从小培养孩子的归位意识;家长尽量不在家里打牌、搓麻,尽力减少放电视、音响等带来的干扰。   5、排除内心干扰。主要是指排除内心某种情绪带来的干扰。例如内心骚动、内心忧虑、心理压力、学习恐惧、特别兴奋、生气愤怒、哀伤悲恸等,都会严重影响注意力的集中。同一课堂上,为何有的同学很专心,有的不专心?除了学习有没有目标、兴趣等因素外,抗情绪干扰能力高低也是重要原因。   6、清除眼前杂物。把书桌上与学习无关的书籍、物品清理干净。有时垫在桌上的报纸中的一条新闻就可能把孩子的心绪牵走,一个小玩艺就可能引起孩子的翩翩联想。   7、清理大脑屏幕。就像清理桌子一样,让大脑的屏幕上只留下现在要做的事(或科目),暂时让其他事情(或科目)全部消失。   8、进行感官训练。从视觉、听觉、感觉三个方面来训练。

    踩0 评论0
  • 回答了问题 2019-07-17

    积分兑换奖品,都一个月了,还没有收到。

    建议打客服电话问问。

    踩0 评论0
  • 回答了问题 2019-07-17

    C语言编程求助

    1到100加和
    int sum=0;
    int i;
    for(i=1; i<=100; i++)
    {
    sum += i;
    printf("%dn", sum);


    double sum=0; // 定义累加器变量sum,并初始化为0
    int i;
    for(i=1; i<=100; i++)
    {
    sum += i; // 等价于sum = sum + i; 即将累加的和保存在累加器sum中
    }
    printf("%lfn", sum); // 输出1到100之和


    int sum=0;

    for(int i=0 ;i<101;i++)
    {
    sum+=i;
    }
    printf("%dn",sum);

    踩0 评论0
  • 回答了问题 2019-07-17

    一个阿里云账号可以设置几个邮箱

    1个

    踩0 评论0
  • 回答了问题 2019-07-17

    域名实名认证一直通不过,阿里人工客服电话多少?也找不到

    阿里巴巴客服电话
    阿里巴巴中文站 服务 400-800-1688
    阿里巴巴中文站 售前(诚信通) 400-826-5188
    阿里巴巴国际站 售前 400-600-2688
    天猫商家 400-860-8608
    淘宝天猫消费者 9510211

    踩0 评论0
正在加载, 请稍后...
滑动查看更多