talishboy_个人页

个人头像照片 talishboy
0
55
0

个人介绍

孔祥坤 职位:阿里妈妈应用平台技术专家 擅长问题:分布式应用系统架构、Java核心技术以及开源framework等 经历:10年左右Java应用系统研发及架构设计经验,曾主导和参与多个重要广告应用系统的研发设计,目前在阿里妈妈从事广告投放中台的研发工作。

擅长的技术

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

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

云产品技术能力:

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

阿里云技能认证

详细说明
暂无更多信息
正在加载, 请稍后...
暂无更多信息
  • 回答了问题 2019-07-17

    [@talishboy][¥20]有没有什么Java web 接口框架,实现web与app的数据交互?

    RESTful API 最近比较流行,你说的这种场景可以通过Web应用提供RESTful接口的方式来实现,其他app通过httpclient调用这些RESTful API 来实现交互

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

    [@talishboy][¥20]tomcat的最大连接数设置多大比较合适?

    tomcat最大连接数设置多大合适是没有标准答案的,这个要具体依据硬件服务器(或虚拟机)的配置以及应用软件自身的情况来定的,实际运用上需要根据系统的负载情况来不断调优的

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

    [@talishboy][¥20]全文检索技术除了apache的lucene,还有没有其他框架?

    lucene是搜索引擎框架,其实不能说框架对中文的支持不好,而是lucene自带的中文分词器对中文支持的不够好,可以尝试第三方开发的lucene中文分词器,比如IKAnalyzer等。lucene这个框架本身还是比较成熟的,当下使用比较广泛的elasticsearch和solr搜索服务器也都是基于lucene来实现的。

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

    [@talishboy][¥20]OOM工具

    阿里内部阿里自己的zprofiler(一款在线内存分析系统)使用的比较多,JProflier和yourkit也都是不错的JVM内存分析工具,都可以用来诊断OOM问题,不过应该需要商业授权。

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

    [@talishboy][¥20]出现OOM如何解决

    首先要做的事情就是找出OOM的原因。发生OOM的情况比较多,可能发生在堆区(heap space),也可能发生在永久代(PermGen space)。
    1)如果OOM发生在heap space,直接原因也有很多种,比如瞬间从数据库或者文件读取大量的数据放到内存、程序死循环产生大量的内存对象、长周期对象未清空其拥有的短周期集合对象等都可能导致OOM,要知道具体的原因还是需要使用jmap将内存对象dump出来,分析下哪些对象异常增多(分析工具有很多,这里不展开说),如果有对象异常增多,那么需要分析程序找出原因,然后进行优化。如果程序本身没有问题,但是还是会OOM,那么可以尝试修改JVM启动参数-Xms和-Xmx,如果还是不能解决,那么可能需要拆分应用或者水平扩展应用集群,降低单进程线程数等。
    2)如果OOM发生在PermGen space,大部分情况是因为程序加载的class太多了,这些class有可能是程序静态依赖的,也可能是各种框架通过cglib动态生成的,这些class的元数据会被存储在方法区,占用方法区内存,当然大量的常量定义也会占用较多的方法区内存。如果OOM发生在PermGen space,可以通过修改JVM参数-XX:PermSize和 -XX:MaxPermSize来尝试解决,也可能需要优化程序实现,也可能需要拆分应用,还是要看具体情况了。

    总之解决OOM是一个很复杂的过程,需要具体问题具体分析。

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

    [@talishboy][¥20]对于大数据

    Java大数据生态还是比较繁荣的,比较成熟的有离线批处理计算框架hadoop、实时计算框架storm、还有同时可以胜任批处理计算和实时计算的混合框架,比如spark框架、及近年来发展起来的flink框架。很多公司的大数据体系都是基于这些成熟的开源框架搭建或者发展起来的。每个框架都值得去深入研究的,可以选择上面提到的一到两个框架先去了解下,由浅入深的学习

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

    [@talishboy][¥20]用什么技术搭建Java Web图片服务器?

    这个问题的核心可能是需要解决图片分布式存储的问题,可以利用hdfs分布式文件系统来存储图片,hadoop提供相关接口可设置备份数、存取文件等。此外还有一些商用的云产品可以实现快速搭建图片服务器,比如阿里云的对象存储系统(OSS):https://help.aliyun.com/document_detail/32008.html

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

    [@talishboy][¥20]JSP和Servlet的区别

    JSP和Servlet本质上是一个东西,jsp编译后会生成servlet类,但是jsp比servlet要简化很多,servlet需要生成对客户端的响应代码,而jsp是在html文件中嵌套java代码,这部分java代码可以包含计算逻辑并最终生成对html文件的内容补充。随着javascript生态的成熟,前后端分离是趋势,特别是在大型应用系统中很少直接使用jsp或者servlet了

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

    [@talishboy][¥20]如何将数据结构及算法运用到实际的Java程序开发中?

    程序是为了解决我们日常遇到的各种问题,在开发程序过程中难免需要对现实事物进行一定的抽象,然后再通过过程或者算法将这些抽象串联起来。所以个人觉得在java程序中使用数据结构和算法是自然而然的事情,不是刻意为之

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

    [@talishboy][¥20]Java类里面的方法建议使用private、protect还是public?

    这个还是看具体场景的,设计这几个关键字就是为了避免成员变量或者方法被滥用,同时也可以降低使用者的选择成本,程序员可以跟根据具体场景来设定访问权限。例如,如果一个方法只会在本类中使用就完全可以标记成private,那么这个方法对外部完全不可见,如果一个方法允许在其子类中使用,但是不允许在其他外部类中使用,那么就可以比较成protected。具体使用哪种关键字没有强制的规定,但是最好尽量遵循这几个关键字设计的本意。

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

    [@talishboy][¥20]Restful好处

    Restful基于http协议,与开发语言无关,不依赖任何中间件,比较轻量。此外,调用端与服务端是松耦合的,数据协议简单易理解,一般是xml或者json。

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

    [@talishboy][¥20]一个关于类get set器的编码规范问题

    一般情况下,java类中的get和set器只是简单的返回成员变量值以及设置成员变量值,get和set器按照get/set加成员变量名组成的驼峰表示法来命名,如果成员变量是boolean类型须将get换成is开头。一般的IDE都会附带自动生成get和set器的工具菜单,如果一个类中的get和set方法如果比较多,其实比较影响代码的可读性,为了保持代码的简洁可以在代码中可以使用lombok注解替代get和set方法体

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

    [@talishboy][¥20]ArrayList和LinkedList区别及使用场景有哪些?

    ArrayList和LinkedList虽然都是实现List接口,但是在数据存储方面,ArrayList基于数组实现的,而LinkedList是基于链表实现的,其实问题就变成数组和链表的区别,数组随机读取效率高,链表多用于数据插入及删除比较频繁的场景

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

    [@talishboy][¥20]为什么springMVC框架向后兼容性那么差?我把JDK从7升级到JDK8,就报错了,找不到类和方法。

    spring框架中大量使用asm技术,但是spring3.x版本依赖的asm版本与jdk8不兼容,升级jdk8的同时可以将spring版本升级到4.x

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

    [@talishboy][¥20]java中,final作用:不能被改变;不能被继承;提高效率为什么大多数方法不加它来提升性能呢?

    final被设计的本意是为了帮助开发者建立一些编程约束,比如final修饰的变量只能初始化赋值一次,final修饰的方法不能被继承类覆写,final修饰的类不能被继承。只不过final的实现方式或多或少会对代码执行效率产生一定的影响(影响很小,其实可以忽略),但这不是设计final的本来意图,因此一般编程规范不建议为了提高性能而滥用final关键字,这会影响代码阅读者对代码开发者本来意图的判断,不利于代码维护和扩展

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

    [@talishboy][¥20]建不建议直接使用数据库存储过程替代复杂的业务逻辑代码?

    数据库存储过程确实可以提高性能,但是不适合开发复杂的业务逻辑,在面对复杂业务逻辑的时候存储过程不管是开发效率方面还是代码可读性方面都会比较低下。

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

    [@talishboy][¥20]为什么流式处理框架都是 java 写成的,JVM 是不是在流和批存在着特殊优势。还有分布式资源调度,感觉Mesos 的

    并不是因为JVM在处理流和批有特殊的优势,而是java生态有特殊的优势,很多框架都不是框架自己就可以独立的工作,也需要依赖其他的框架或者中间件,比如flink,storm这些流式计算框架可能就需要借助生态里的yarn或者zookeeper这些框架来搭建实时计算集群等等。

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

    [@talishboy][¥20]关于Java的类继承,建议继承深度控制在几层?

    类继承是对现实事务的抽象,抽象有很多种方式,至于继承深度应该控制在多少层,其实并没有严格的规定,还是要根据实际场景来抽象。但是抽象的前提是有利于代码扩展和理解,一般继承深度过深会导致抽象复杂化,降低代码易读性和维护性,需要寻求平衡。所以对于复杂事物不妨使用继承和接口结合的方式来进行抽象。

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

    [@talishboy][¥20]java的发展方向

    java应用领域可不止业务系统,还包括各种开源框架以及中间件等,这些也都是为了解决业务问题或者为了提高业务系统构建效率而诞生的,可以看成是业务系统中的一些技术切面,除了我们常见的开源框架之外,很多企业内部也会诞生很多这种从业务系统剥离出来的技术框架或者平台。不管怎样,java生态就是随着解决各种业务问题而逐渐繁荣起来的,只要世界不完美,就有它发挥的战场。

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

    [@talishboy][¥20]Java变量声明建议使用基本数据类型还是封装类型?

    基础数类型对应的封装类提供了额外的工具方法,提高了开发的便捷性和代码的可读性,所有基础类型对应的封装类缺省值是null,也更加灵活。一般大型业务系统开发中使用封装类比较多,可以大大提高开发效率和代码易读性,性能损耗基本可以忽略,个别追求性能极致场景也可直接使用基础类型

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