Java只有值传递
为什么Java只有值传递搞清楚之前,让我们先了解下
什么是形参&实参
12345678910public static void main(String[] args) { Person p1 = new Person("123"); Person p2 = new Person("456"); swap(p1, p2); // p1, p2 是实参}public void setName(String name) { // name为形参 this.name = name;}
什么是值传递&引用传递
值传递: 方法接收的是实参值的拷贝,会创建副本引用传递: 方法接收的直接是实参所引用的对象在堆中的地址,不会创建副本,对形参的修改将影响到实参。
为什么Java中只有值传递?废话不多说,我们直接从案例看起
案例1:
12345678910public static void main(String[] args) { int i = 10; ...
ScheduledExecutorService
Java自带的定时任务调度 - ScheduledThreadPoolExecutor目前如果使用简单的定时任务调度,我们会采用注解@Scheduled的方式,这个方式简单易懂,而且不需要太多的操作。但是,也因为如此,在一些场景下就不符合需求了,那么如果采用定时任务框quartz,那么简单操作就又复杂化了,这时候,使用ScheduledThreadPoolExecutor,就成了我们的折中方案。
ScheduledThreadPoolExecutor设计出的目的就是作为延时或者定期执行,而且可以看到,我们可以把任务分发到子线程处理,完美利用到了CPU,如果不是需要定制特殊的定时任务,那么这个就能满足绝大多是任务场景了。
它主要包含有四个方法:
123456789// 带有延迟的执行一次任务,并通过Future.get()阻塞任务直到执行结束public ScheduledFuture<?> schedule(Runnable command, long delay, TimeUnit unit);// 带有延迟的执行一次任务,并通过Future.get()阻塞任务直到执行结 ...
Sleep和GC的关系
Sleep和GC的关系起因一切都是从一段代码和注释开始的
12345678910111213for (int i = 0, j = 0; i < 10000; i++, j++) { // 业务逻辑 // ... // prevent gc if (j % 1000 == 0) { System.out.println("Test"); try { Thread.sleep(0); } catch (InterruptedException exception) { System.out.println(exception.getMessage()); } }}
从代码看,这是个大循环,而且里面会有一个每循环1000就去执行的逻辑
if整体代码不难,但是if里面的代码确有点让人费解,sleep(0)的真正意图是什么
从注释来看是为了防止GC,这段代码出 ...
七夕
七夕(唐)罗隐luò jiǎo xīng hé hàn dàn tiān, yī jiā huān xiào shè hóng yán.络角星河菡萏天,一家欢笑设红筵。yīng qīng xiè nǚ zhū jī qiè, jǐn xiě tán láng jǐn xiù piān.应倾谢女珠玑箧,尽写檀郎锦绣篇。香帐簇成排窈窕,金针穿罢拜婵娟。铜壶漏报天将晓,惆怅佳期又一年。
从基础开始学习前端
如何成为一名程序员前端,是现在web领域的热门行业,这个行业从最开始的切图人转变到现在也是经过了很多的技术洗礼,从最基础的css+html写一个页面,到之后使用bootstrap+jquery形成一个动态可刷新数据的网站,到现在,已经是使用各类的前端框架,来实现一个很大的平台。
这个过程,说是技术的更新换代也不为过,但是,如果从一个零基础开始,那么,我们的学习经历或许就如果这个发展过程一样,这时候可能有人会问,现在不是只用学习那些很时髦的技术就能快速成型,立马上岗成为一名开发么?
这个想法,从最终结果来看,是没错的,但是,程序员现在面临的问题,并不是你使用的技术有多么的时髦,有多么的新颖,而是,你能够在这慢慢涌起的浪潮下,站立的有多稳。人下盘稳,站得就稳,程序员的下盘在哪呢?当然,也就是你的基础。
从基础开始HTMLhtml是网站页面的骨架,就像人体内的骨骼一样,撑起整个人体。现在html又分为html4和html5两个小分类,html5又成为h5,虽然也是html,不过是在其之上多了很多新的特性,它的学习需要有JavaScript的支撑,可以在学习完JavaScript之后再来详细了 ...
Nginx301重定向Bug
Nginx 301跳转问题起因公司因为成本问题缩减服务器数量,个别服务因为使用频率比较低,而且权重也不高,所有决定将其缩减到一个服务器当中。但是,在一个服务器上就会有个问题,443和80端口只有一组,我们要兼容多个服务的域名,程序内部当然做不到。但是可以采取不同端口来实现,再让运维把域名的443端口转发到机器对应服务的端口上,这个问题就解决了。不过后来又出现了新的问题,通过https域名访问前端项目,首页是正常的,切换路由就出现301问题,观察network,可以看到在response中又location重定向,而且重定向指向到http+端口号+路由的地址,域名并没有开通对应端口号的权限,最后就出现了访问失败的情况。
分析
3xx状态码:http协议中3xx都表示重定向的响应。301是代表永久重定向。
触发条件:用户访问一个路由,并不以/结尾,例如:https://xxx.xxxx.com/backstage, backstage这个文件没有找到,但是发现这是个目录,于是这次访问就会被设置为301进行跳转。
Nginx负责设置301 Moved Permanently状态码。但ngin ...
Erroneous data format for unserializing 'Symfony Component Routing CompiledRoute'
起因服务器上切换php版本,然后跑Laravel项目,报如下错误:
12ErrorException (E_WARNING)Erroneous data format for unserializing 'Symfony\Component\Routing\CompiledRoute'
无论是使用php artisan的命令还是其他调用,都会报上述错误
解决从上图可以看到,这个错误是cache文件产生的, 尝试删除 bootstap/cache/route.php 文件之后,恢复正常
SpringCloud系列-熔断器
熔断器什么是熔断器?熔断器,如果电箱中的保险丝一般,如果出现预料之外的情况,可以通过切断当前电路,进而保护当前工作人员或者环境,在软件中,熔断器也是起相同作用。如果出现API调用无限重试的情况,熔断措施就会生效,停止重试,继续后续调用
断路器模式熔断器的状态: 微软的云计算设计模式对熔断器的实现
Closed: 默认模式。维护一个失败阀值计数器,如果超出这个阀值,就会修改状态,进行open状态
Open: 操作不会执行,而是立即失败。维护一个计时器,当时间达到一定阀值,就会从open进行half-open状态
Half-Open: 只要操作一次就进入open状态,否则增加操作成功的次数,当次数达到一定阀值,进入Closed状态并重置失败次数
一般情况下,熔断器就是这样工作的,当大量请求进入,短时间出现问题,就会触发熔断,走入我们设定好的逻辑,依次来避免服务器崩溃的情况。
Sentinel面向分布式服务器架构的轻量级高可用流量控制组件
Sentinel的核心功能
流量控制: 根据资源的配置对流量进行控制
熔断降级: 调用链路中某个资源不稳定,对其进行控制,并让其快速失败,避免影响到其 ...
Laravel上传文件或图片失败
Laravel上传图片或文件失败起因今天运营突然提出问题说是线上环境上传图片出现问题,我寻思,上传图片不光一个地方再用,怎么就正好是手机webview上出问题了,于是开始加入日志来排除问题。
错误the “” file does not exist or readable
环境服务器:nginx + php.7.4上传:webview
分析图片资源是通过ios外部传入webview内的,所以,推测是不是ios传入的数据出现问题,又因为这个功能老早就有了,ios又经过多版本更新,不确定是不是因为ios代码有改动出现的问题,所以,我更换了老版本的ios包进行了测试。测试后发现,并非ios包的问题。所以,问题定位在图片服务器上。图片服因为根据手机类型分服的,单单只有ios出问题,但是代码又是相同的,所以,问题应该会出现web服务器和PHP相关配置上。nginx环境如果上传的文件过大,会直接抛出错误,但是错误是从Laravel程序里抛出,那么,和nginx关联就不大了,问题只会在php相关配置上了
解决修改php.ini文件配置,并重启php-fpm
12upload_max_filesize ...
GORM进行JSON操作
在Go中使用GORM进行数据库操作gorm作为go常见的ORM库,使用起来也是很方面的。得赖于go简单易用的特性,我们也只需要在启动配置中引入相关的库,进行初始化操作,就能进行对数据库的操作。
123456789101112131415func initMysql() *gorm.DB { db, err := gorm.Open(mysql.Open("root:123456@(localhost:3306)/yhhy?charset=utf8mb4&parseTime=True"), &gorm.Config{}) if err != nil { panic("failed to connect database") } sqlDB, err := db.DB() if err != nil { panic("connect db server failed") } // 可以进行连接池配置 sqlDB.SetConnMaxLifet ...





