JAVA
颜群
视频课程笔记、资料,请加微信157468995(回复“资料”,自动获取);
《亿级流量Java高并发与网络编程实战》作者;
阿里云特邀/认证专家;
展开
-
Java开发,40+常见问题汇总
本文精选了一些常见、实用的问题,并附上我的个人解析。1.背下这300字,面试就能加薪!点我看解析2.面试官:你还有什么想问的?点我看解析3.我是JAVA初级,有必要学架构设计吗?点我看解析4.高并发都要学哪些技术?点我看解析5.为什么好学生,学不好编程?点我看解析6.如何理解java中的构造方法?7.如何让if..else..同时执行?8.面试全对,却没offer,什么情况?点我看6~8解析9.分布式和微...原创 2020-06-09 18:11:10 · 558 阅读 · 0 评论 -
为什么好学生,学不好编程?
老师好,今年我大二,软件工程专业。我的高数、英语等课程都学的很好,考试成绩也很高。但唯独学校开的C语言学不懂,即使花了很长时间看懂了一点,仍然也写不出来代码。而且,我同宿舍的很多人都有这种情况,她们从中学到现在,各科也都学的很好,但唯独学不好编程。请问,是什么原因造成的啊?答:一些好学生,写不了代码;而一些“差学生”写程序却很厉害。这个问题,我在很多大学都遇到过。以下,谈谈我的观点。(本文仅表达个人观点,无意冒犯)第一,“好学生”的学习方法,不适合学编程。很多好学生,是...原创 2020-06-05 11:09:55 · 1561 阅读 · 3 评论 -
测评 | 2左移3 的效率高于2*8 吗?
问:有一道面试题:2*8怎样运算效率最快?参考答案是:位移运算最快,即计算2*8最快的方法是:2 << 3 。我的问题是:我目前也接触了不少项目,但经常能看到 乘除运算。为什么很多项目里,不使用性能最快的位移运算呢?答:网上的“面试宝典”,不知道是哪一年流传出来的了。即使是“202x年最新版面试宝典”,也基本换汤不换药。换个角度,这种“面试题”级别的性能问题,JAVA设计者们肯定是早都发现了。因此目前的JVM内部必然已经做了优化,几乎不用我们在 运算上 思考性能问题了。.原创 2020-05-27 11:40:22 · 1070 阅读 · 0 评论 -
只知道new?Java中存在4种引用
我们经常通过new来创建对象。实际上,指向new的引用,也可以称为“强引用”,如下中的ref,就是一个强引用。Objectref=newObject();强引用是我们最常使用的引用类型,也是四种引用级别中最高的一个。四种引用,以及它们的强弱关系如下。强引用>软引用>弱引用>虚引用1.强引用强引用,强在哪里?强在“JVM即使内存溢出,也不会让GC去随便的回收强引用对象所占用的内存空间”。其原因也容易理解,如果GC将上述的ref回收了,那么n...原创 2020-05-26 10:02:49 · 694 阅读 · 0 评论 -
Java小白到大神的心路历程(框架)
本文是“Java心路历程”的第四篇,前三篇请戳:1.Java小白到大神的心路历程(Java SE)2.Java小白到大神的心路历程(Web前端)3.Java小白到大神的心路历程(数据库)每一个javaer,都对“开源框架”又爱又恨。爱她,因为她封装了大量的底层代码,可以帮助我们简化代码量;恨她,因为她“太善变”了,以“访问数据库为例”,一会是JDBC、一会是hibernate、一会是mybatis,一会又可能是Spring Data+JPA。因此,常听到有人调侃,“软件技术的更...原创 2020-05-22 14:51:34 · 1813 阅读 · 1 评论 -
Java小白到大神的心路历程(数据库)
本文是“Java心路历程”的第三篇,前两篇请戳:1.Java小白到大神的心路历程(Java SE)2.Java小白到大神的心路历程(Web前端)本文聊的是关系型数据企业中最常见的关系型数据库是MySQL和Oracle,但不知道为什么,很多大学还在学习Sql Server(有的还是2008版)。数据库难不难?我觉得,这可能跟你的老师有着很大的关系(针对不同的学校,老师的授课方案可能不一样)。有同学说“数据库最简单啊,把select、delete、update、insert学完就行.原创 2020-05-10 20:39:26 · 525 阅读 · 0 评论 -
高并发都要学哪些技术?
请问老师,我想系统的学习一下高并发,请问都需要学习哪些技术呢?答:参见以下: 首先,得有全局观,得知道“高并发”要解决的是系统中哪些部位的瓶颈(CPU不足,还是内存不够?web服务器扛不住,还是数据库并发量太小……)。因此,需要学习“架构设计”(至少要了解一下)。 并发的基础是多线程,所以“多线程”少不了。 多线程可以用基础的方式手写,也可以使用高级一点的多线程库:JUC(至少)。 很多新版的jdk,提供了并发编程的工具类,因此需要学习(或者查阅一下)jdk8及后续版原创 2020-05-10 20:36:36 · 822 阅读 · 0 评论 -
我是JAVA初级,有必要学架构设计吗?
我是JAVA初级,有必要学架构设计吗1.请问老师,我目前还在初学阶段,勉强能够实现CRUD功能。对于基础内容和ssm、spring boot等框架,在百度谷歌的帮助下,也能使用。最近,总能看见一些公众号,或者视频里面提到“架构设计”或“高性能XXX设计”。对于我这样,实现一些基础功能都比较吃力的,还有必须去学习架构设计吗?答:我觉得是很有必要的。用鸡汤来解释,就是“人总要打破自己的舒适区”。用现实来讲,只能实现一些CRUD等基础功能,是没有任何价值的。任何一个在IT企业上班的技...原创 2020-05-09 11:19:04 · 409 阅读 · 0 评论 -
使用Google Guava实现生产者与消费者问题
“生产者消费者程序”是并发编程的基础,也同时是一道热点面试题。除了使用传统的Lock、Synchronized等加锁方式实现以外,还可以使用一些三方工具库实现。今天介绍的是如何使用google guava库中的Monitor实现“生产者消费者”问题。google guava是一个非常实用的并发类库,非常建议每一位开发者使用。以下,就是使用google guava中的Monitor实现生产者消费者的具体代码。importcom.google.common.util.concurrent.Liste.原创 2020-05-09 11:17:02 · 931 阅读 · 0 评论 -
发送请求时,postman正常,微信小程序失败?
问题背景:前端发送一个json对象(字符串格式),后端用springMVC接收。问题是:后端代码不变,前端用postman发送数据时一切正常;但如果前端用微信小程序发送,后端就无法接收到数据(不报异常,但接收到的属性都是null)。以下是具体问题情况:(1)后台代码:@RequestMapping(value="addUser",method=RequestMethod.POST)publicResultaddUser(@RequestBodyUseruser){......原创 2020-05-09 11:04:55 · 3798 阅读 · 3 评论 -
通俗解释前后端分离?
1.请问老师,什么是前后端分离技术?我本来还懂一些,但上网一查,越查越晕。能通俗的介绍一下吗?答:顾名思义,前后端分离的核心,就是让前端开发者和后端开发者各自独立,即前端开发者只写前端,后端开发者只写后端,二者不需要太多的言语沟通,就能合作完成一个项目。如何做到这一点?我认为,核心有两点:(1)前后端开发者,均采用"REST风格"开发。简单的讲,就是发送的http请求要支持POST、DELETE、PUT、GET四种请求方式。因为这四种方式,分别对应增删改查四种操作,具体是:POST对应“增.原创 2020-05-09 10:58:36 · 1083 阅读 · 0 评论 -
答疑 | 前后端分离,如何接收json数据?
json1.颜老师,在前后端分离的项目中,后端如何接收前端发来的json数据?我记得是@RequestBody,但有时候会报错。答:当使用SpringMVC接收json数据时,需要区分json的数据格式,具体如下:(1)若前端发送的是Json对象,那么后端需要用@RequestParam注解;(2)若前端发送的是Json字符串,那么后端需要用@RequestBody注解;(通...原创 2020-05-09 10:55:35 · 3039 阅读 · 0 评论 -
答疑 | 如何优化CAP?毕业设计如何选题?
CAP理论如何优化1.老师新年好,分布式CAP理论本身存在不足。那么在实际使用时,有办法弥补吗?答:回顾一下,CAP是任何一个分布式系统,都必须重点考虑的设计原则。“CAP”三个字母的含义如下:C:一致性(强一致性):在分布式系统中,所有节点的数据都要时刻保持一致。例如,系统由S1、S2两个节点组成,当你向S1插入一条数据时,这条数据会在短时间内自动同步给S2。注意,这里强...原创 2020-05-07 10:06:57 · 200 阅读 · 0 评论 -
答疑 | boolean类型占几个字节?
boolean占几个字节老师,今天面试官问我java中,boolean类型占几个字节。我当时没答上来,回去查资料,发现boolean类型没有一个准确的说法,怎么办呢?答:(文章略长,如果觉得解析过程麻烦,可以直接翻到末尾,看加粗字体的结论)这种概念性问题,最权威的就是查阅官网资料。Oracle官方已经在官网对基本数据类型,所占的字节数进行了说明,https://docs.o...原创 2020-05-07 09:56:32 · 831 阅读 · 0 评论 -
Spring核心干货1 - 版本特性与IoC
1.Spring历史Spring是于2003 年兴起的一个轻量级的Java 开源框架,由Rod Johnson 在其2002年的著作《Expert One-On-One J2EE Development and Design》中阐述的部分理念和原型衍生而来。2.Spring各版本简介Spring 1.x :时代背景:SSH(Struts2+Spring+Hibernate)流...原创 2020-05-07 09:53:32 · 206 阅读 · 0 评论 -
分布式和微服务的区别
分布式和微服务的区别1.颜老师,分布式和微服务有什么区别呢?网上说啥的都有,越看越晕了。答:分布式的核心就一个字:拆。只要是将一个项目拆分成了多个模块,并将这些模块分开部署,那就算是分布式。如何拆呢?有两种方式:水平拆分,或垂直拆分(也称为“横向拆分”和“垂直拆分”),具体如下:水平拆分:根据“分层”的思想进行拆分。例如,可以将一个项目根据“三层架构”拆分成表示...原创 2020-05-07 09:50:57 · 4289 阅读 · 3 评论 -
面试官:你还有什么想问的?
在面试结束时,很多面试官喜欢问一句“你还有什么想问的?”根据一些大厂技术官朋友的经验,应聘者主要分为“刚需型”和“改善型”两种。对于不同类型的应聘者,建议回答的方式可能完全不一致。本文主要针对“刚需型”进行分析。(以下分析,均源自一些面试官朋友的口头聊天,未经证实,大家参考即可)1.刚需型:应聘者是大学刚毕业,或者目前急需找一份工作总原则:不犯错就行了。加分:...原创 2020-05-07 09:45:08 · 1007 阅读 · 0 评论 -
如何复制数组?高效、优雅
复制数组1.颜老师,如何复制数组呢?除了for遍历以外,有高效的方法吗?答:如果数组的元素数量不多,任何一种复制数组的方式都没什么差别。如果数组中包含了大量元素,就确实得考虑效率问题了。有哪些方式呢?(1)使用你提到的for,以及while等循环遍历赋值(中规中矩,性能一般)(2)思考,如何才能高效?之所以说for等循环性能一般,是因为java在执行时必然会借助于jvm虚拟机,而j...原创 2020-05-07 09:40:39 · 1012 阅读 · 0 评论 -
三层架构与MVC模式
MV模式和三层架构几乎是Java开发者每天都要接触的最基础、也是最核心的架构知识了。但总有人将二者分不清楚,希望本文能够帮助到你。MVC模式MVC模式是软件工程中常见的一种软件架构模式,该模式把软件系统(项目)分为三个基本部分:模型(Model)、视图(View)和控制器(Controller)。使用MVC模式有很多优势,例如:简化后期对项目的修改、扩展等维护操作;使项目的某一部...原创 2020-05-07 09:39:19 · 1022 阅读 · 0 评论 -
背下这300字,JAVA面试就能加薪!
问:有很多同学经常问:我只对Java基础和数据库比较熟悉,其他Java Web和各种框架等都是似懂非懂。我这种情况,当面试官问项目经验时,如何回答?答:如果是面试,面试官通常不会从头到尾的,认真听完你说的每一句话。也就是说,你说了什么、说了多少并不是特别重要的。重要的是在你的描述过程中,一定要有亮点,要有那种让面试官听了之后立刻眼前一亮的感觉。对于你这种情况,即使只会基础知识,也是可以出...原创 2020-05-07 09:36:07 · 313 阅读 · 0 评论 -
基础 | 零基础编写第一个Java程序
1.准备开发环境(1)下载jdk根据操作系统类型(windows/linux/mac,32位或64位)下载相应版本的jdk这里提供windows64位的jdk下载链接链接:https://pan.baidu.com/s/1fefOfV57XDZdT5jfcXQ8Ag提取码:5z19其他版本JDK可到官网下载:https://www.oracle.com/technetwor...原创 2019-12-22 13:04:02 · 323 阅读 · 0 评论 -
面试题 | 使用HashMap实现大数据日志处理
每个网站都有一个专门记录访问数据的日志文件,记录着各个用户访问时的IP、时间等信息,类似以下格式。IPDate192.168.1.12019.10.12172.17.63.1622019.02.1310.11.123.212018.11.02...题目...原创 2019-12-22 13:00:47 · 348 阅读 · 0 评论 -
基础 | 用for循环实现万年历(附视频)
题目:输入年份和月份,程序自动输出该月份的月历。例如,输入2019年10月,则输出下图:已知条件为:1900年1月1日是星期一。分析:根据”1900年1月1日是星期一”这个条件,我们可在草稿纸上画出1900年1月的月历,如下图我们假定“1900年的1月1日是第1天”从图中可以发现输出形式是7天一循环,具体如下:1900年的1月1日是周一,第1天,(...原创 2019-12-22 13:00:06 · 1273 阅读 · 0 评论 -
减少延迟、缓冲区、static
减少MySQL主从同步的延迟1.在做MySQL主从同步的时候,如何减少主从之间的延迟?答:主从同步产生延迟的原因,大致有3种:(1)负载过高解决办法:水平扩展MySQL,减轻每个MySQL服务的并发量;加入缓存等;(2)网络延迟解决办法: a.设置switchType=2,根据心跳监测的延迟情况,自动切换节点。b.使用5.7版本后...原创 2019-12-22 12:58:32 · 335 阅读 · 0 评论 -
基础 | 一道题彻底搞懂二重循环
本文通过一道习题,讲解做二重循环习题的思路题目:使用二重循环打印如下图形:分析:首先要明确我们需要打印的种类有:字符串”*”,字符串””(空格)。比如第一行,先打印了4个空格””,然后打印了一个”*”。现在分析一下每行的具体打印情况:第0行:先打印4个空格,然后打印1个”*”第1行:先打印3个空格,然后打印3个”*”第2行:先打印2个空格,然后打印5...原创 2019-12-22 12:57:53 · 546 阅读 · 0 评论 -
一道三目运算符的题目
请说出以下程序的运行结果:publicstaticvoidmain(String[]args){intn1=1,n2=2;System.out.println(n1==n2?100.0:200);System.out.println(n1==n2?'A':66);System.out.println(n1...原创 2019-12-22 12:46:28 · 1389 阅读 · 0 评论 -
基础 | JVM、JRE和JDK
JVM:Java Virtual Machine(Java虚拟机),包含了Java最核心的类库。JRE:java runtime environment (java运行环境),包含了JVM和一些常见的Java运行类库,即JRE=JVM+常见运行类库。最大特点:安装了JRE之后,只能运行java程序,但不能开发java程序。因为JRE中没有包含开发者编译Java的相关工具。JDK:java ...原创 2019-12-22 12:42:33 · 90 阅读 · 0 评论 -
Java小白到大神的心路历程(Web前端)
本文是“Java心路历程”的第二篇,第一篇请点击右侧这篇文章:Java小白到大神的心路历程(Java SE)1.HTML/CSS在学完Java SE之后,学不懂HTML/CSS的原因只有一个:你自己不想学。但如果HTML/CSS是你的第一门接触编程语言,最大的障碍不是难,而是你还没有编程的思维方式,唯一的解决办法就是练习(注意,只能是练习;听课、看书的效果都不如自己练习好)。...原创 2019-12-22 12:41:59 · 574 阅读 · 0 评论 -
Java小白到大神的心路历程(Java SE)
万事万物皆有其发展规律,学习Java也不例外。以下是我根据教学经验,总结出来的小白在学习Java各阶段时的心路历程,当你在学习期间欣喜、困惑时,不妨看一看,也许这些都是必经之路。使用Java完成第一个Hello World根本不关心什么Java的发展史、JDK配置的原理,只想照着书(或跟着老师)把第一个Hello World运行出来。大多数学生,不论用什么办法,还是能够成功运行的...原创 2019-12-22 12:41:14 · 562 阅读 · 0 评论 -
面试全对,却没offer?
构造方法1.颜老师,如何理解java中的构造方法?答:顾名思义,构造方法主要用于“构造”出一个对象。平时说的,类可以产生一个对象,实际就是类通过“new + 构造方法”产生了一个对象,例如Person per = new +Person构造方法()。构造方法的最大特点就是,没有返回值。构造方法具体有以下几个作用:(1)可以通过关键字new构造出一个对象。(2)当给对...原创 2019-12-22 12:36:54 · 900 阅读 · 1 评论 -
InterfaceA是接口,new InterfaceA[2]正确吗?
interfaceInterfaceA{}如上代码,InterfaceA是接口类型的。那么new InterfaceA[2]正确吗?||||||||||答案:正确。本题的考点是:对象数组。对象数组实际存放的不是对象本身,而是对象引用的地址。先看以下代码。Objectobj=newObject();...原创 2019-12-21 21:38:57 · 549 阅读 · 1 评论 -
同一行代码,在Java和C中的执行结果却不同
intj=100;j=j++;以上两行代码,在Java中的运行结果是100,在C/C++中的运行结果是101。可见,是不能从逻辑的角度来理解的。根本原因是,各种开发语言对j=j++的处理机制不同。本文通过反编译手段,分析一下java的执行过程。java完整代码如下。publicclassjPlusPlus{publicstaticvoid...原创 2019-12-21 21:38:16 · 521 阅读 · 1 评论 -
还在用构造方法给属性赋值?
如何给一个类中的属性赋值?静态方法?构造方法?setter?也许都不太合适,本文介绍一种推荐的方式:使用Builder构造器。先回顾一下传统方式存在的问题。1.构造方法和静态方法如果有10个属性,你能记清它们的顺序吗?如下。//创建对象时,使用构造方法给属性赋值(使用静态方法的与之类似)publicvoiddemo(){Personperson...原创 2019-12-21 21:37:04 · 908 阅读 · 2 评论 -
"hello"+null = ?
以下程序的运行结果?publicstaticvoidmain(String[]args){System.out.println("hello"+null);System.out.println(null+"world");}||||||||||答案:hellonullnullworld...原创 2019-12-21 21:30:25 · 230 阅读 · 0 评论 -
读者交流 | JAVA过时了吗
1.颜老师,我听很多人说,Java已经过时了,现在还有必要学习java吗?答:Java自1995年推出以来,几乎每隔几年都能听到它“快过时”的声音,尤其是一些其他语言大火的时候,Java好像真的快过时了。那么Java到底过时了吗?首先,Java是否过快时了,不是你我能决定的问题,但却是我们没必要操心的话题。如果你非要问,那我只能说:无论Java是否快过时了,对你我都不会有太大影响。原...原创 2019-11-30 23:06:05 · 537 阅读 · 0 评论 -
一道JVM面试题,答错率超90%
1package com.yanqun.pojo; 2class MyClass{ 3 static int num1 = 100 ; 4 5 static MyClass myClass = new MyClass(); 6 public MyClass(){ 7 num1 = 200 ; 8 num2 = 200 ; 9 ...原创 2019-11-30 22:56:08 · 102 阅读 · 0 评论 -
synchronized有指令重排序的功能吗?
1.颜老师,volatile可以禁止指令的重排序功能。那么synchronized有这个功能吗?我百度、谷歌都查不到准确的说法。答:百度、谷歌都查不到,很大程度说明这个问题没有意义。重排序是指JVM为了提高执行效率,会对我们编写的代码进行一些额外的优化。敲重点:重排序所实现的优化不会影响单线程程序执行结果1. int a = 100 ;2. int b ;3. b = 20...原创 2019-11-30 22:55:00 · 774 阅读 · 4 评论 -
1行代码实现高性能单例模式
单例是指:无论你创建了多少个引用,在堆中仅仅只有一个实例。例如,Person p1 = ... ; Person p1 = ...; 在单例模式下,必须保证p1==p2。因为单例要保证p1和p2两个引用指向的是同一个实例,即引用地址是相同的。单例模式的写法也有很多种:线程不安全的懒汉式、线程安全的懒汉式、线程安全的饿汉式、登记式等等。但从实践的角度来看,用的最多的也就只...原创 2019-11-30 22:54:12 · 181 阅读 · 0 评论 -
JAVA技术面试,这些坑你踩过几个?
技术面试时,需要准备什么?本文从“必备项”和“加分项”两个角度分析,教你如何拿下高薪offer。一、必备项0.自我介绍表达流畅,不要太差即可1.基础坑:【答案很标准】面试时的回答,一定不要背网上《面试大全》中的标准答案,一定要有自己的思想 (哪怕有少量错误) 。常见的题,一定要提前准备好。例如,以下列举的几乎都是必考题目:arraylist/hashmap的源...原创 2019-11-30 22:53:15 · 310 阅读 · 0 评论 -
服了,list.add()也会报错!!!
1.什么时候用StringBuilder?颜sir,我好像只在“面试宝典”中看到过StringBuilder,其余时间都没有使用过。什么时候会用到StringBuilder呢?答:String的引用值不能改变,因此如果遇到类似以下频繁更改String引用值的时候,就需要考虑使用StringBuffer或StringBuilder。String str = "" ;for(in...原创 2019-11-30 22:52:38 · 180 阅读 · 0 评论