java吧 关注:1,276,288贴子:12,789,375
  • 12回复贴,共1

每天一个小知识

取消只看楼主收藏回复

int[] nums1 = new int[]{1,2,3};
Integer[] nums2 = new Integer[]{1,2,3};
System.out.println(Arrays.asList(nums1));
System.out.println(Arrays.asList(nums2));
打印结果是否一致?


1楼2023-08-24 16:22回复


    2楼2023-08-24 16:27
    收起回复
      2025-08-31 18:26:30
      广告
      不感兴趣
      开通SVIP免广告
      ThreadLocal的使用场景。
      假设我们要开1000个线程,直接开肯定是不太好,我们假设做一个大小为20的线程池。
      假设线程任务要使用simpleDateFormat获取时间,正常情况,我们有两种选择
      一种是共用同一个simpleDateFormat,但是simpleDateFormat线程不安全,我们要加锁处理,那获取事件这件事上就变成了串行。
      一种是每一个任务都创建一个simpleDateFormat,那我们消耗了大量的资源。
      所以我们可以使用threadlocal。为线程池的20个线程创建20个simpleDateFormat来解决这个问题。


      3楼2023-08-24 16:50
      收起回复
        flink的各个任务节点最好不要直接走库,尤其是写数据,数据量大起来一般都会造成背压,要写的数据可以发给mq然后用java程序读进数据库。


        7楼2023-08-25 17:44
        回复
          项目使用mycat做分表分库时,有时与其他库做数据同步会乱码,要保证,上游数据,mycat配置,实际落地的mysql子表,三者编码一致


          8楼2023-08-25 17:50
          回复
            也不知道写啥,大伙想看啥我去学学发出来


            9楼2023-08-25 17:51
            回复
              说起来贴吧总看到说学算法还是学java,从长远角度来说,没什么大差别,说白了入门算法现在大部分走python方向,语言这东西就是一个工具罢了,学什么,干到后面,总会学点别的。
              单纯说算法目前大部分算法,图形,nip,推荐,目前的岗位空缺确实都不大,尤其是图形,有些过于成熟了,顺便说一下算法岗的基本要求(论文到程序的转化能力,成熟的算法的二开能力)。
              不过我确实觉得算法的岗少一些,究其核心还是不赚钱,以我们组举例,
              就是公司是自研加tob二开的模式,我们之前是做ocr+nip的。产出值我们的单人年均只有24w,但是这个数还够不到我们的人均收入,所以赔钱是肯定的,做基础服务平台的组能达到50w+,所以最终我们组的java比如我调走了,算法岗的小伙伴劝退了。


              12楼2023-08-28 11:29
              回复
                公司能不能负担的起肯定是能的,但是说实话除了超级大厂有自己成熟的业务线需要这些东西的和纯粹的搞研究的,算法的需求量少之又少,所以卷算法还是卷java,只能说你数学很吊,你有研究生学历你就去卷算法,这两样有一样不太行,不如卷java


                13楼2023-08-28 11:33
                回复
                  2025-08-31 18:20:30
                  广告
                  不感兴趣
                  开通SVIP免广告
                  说一下线程池开多大的问题。
                  我们可以把问题分成三类


                  14楼2023-08-28 17:14
                  回复
                    一种是cpu密集型:
                    也就是进行大量的运算,cpu一直在满负荷跑,这种情况一般我们会将线程池设置成
                    cpu的最大核心+1,也就是n+1个线程。
                    n可以理解,充分利用cpu的每一个核心,+1的原因是,存在某些情况下发生的缺页中断或者程序的暂停,可以迅速有一个线程补上来避免cpu的空闲。


                    15楼2023-08-28 17:14
                    收起回复
                      第二种是IO密集型任务:
                      常见的什么数据库读写,网络请求,文件读写这种都属于IO密集型。
                      因为cpu用的少,一般设置成2倍核心数也就是2N


                      16楼2023-08-28 17:16
                      收起回复
                        第三种就是混合型任务:
                        这种一般可以按照任务执行时间来计算
                        tasks :每秒的任务并发数
                        tasktime:处理第个任务所需要的时间 单位:秒
                        responsetime:系统允许容忍的最大响应时间
                        核心池大小: corePoolSize = tasks*tasktime
                        阻塞队列容量:queueCapacity = (coreSizePool/tasktime)*responsetime
                        最大线程数:maxPoolSize = (max(tasks)- queueCapacity)/(1/taskcost)
                        其实任务处理时间因为是不固定的所以我们遵守8020的原则。
                        即80%的任务需要1s那我们认为 tasktime = 1s;


                        18楼2023-08-28 17:31
                        收起回复
                          大佬们有什么要分享的可以在这写呀,天天很很赚也无聊不是


                          19楼2023-08-28 17:34
                          回复