精华内容
下载资源
问答
  • SPSS(九)SPSS之时间序列模型(图文+数据集)

    万次阅读 多人点赞 2019-06-17 22:32:38
    SPSS(九)SPSS之时间序列模型(图文+数据集) 时间序列是指将同一统计指标的数值按其发生的时间先后顺序排列而成的数列。正如人们常说,人生的出场顺序很重要,时间序列中隐藏着一些过去与未来的关系。时间序列...

    SPSS(十九)SPSS之时间序列模型(图文+数据集)

    时间序列是指将同一统计指标的数值按其发生的时间先后顺序排列而成的数列。正如人们常说,人生的出场顺序很重要,时间序列中隐藏着一些过去与未来的关系。时间序列分析试图通过研究过去来预测未来。

    时间序列分析在工程、金融、科技等众多领域有着广泛的应用。在大数据时代,时间序列分析已经成为 AI 技术的一个分支,通过将时间序列分析与分类模型相结合,更好的应用于数据检测、预测等场景。

    时间序列模型简介

    • 依时间顺序排列起来的一系列观测值(观测值之间不独立)
    • 它考虑的不是变量间的因果关系,而是重点考察变量在时间方面的发展变化规律,并为之建立数学模型
    • 使用时间序列模型的前提:有足够长的数据序列;数据序列的变动是稳定而规律的

    另外一种理解方式:假如我们对一件事情研究其背后规律很久的话,可以收集到很多的自变量/影响因素去研究与因变量之间的关系,但是由于各种原因我们做不到,我们只能用一个t(时间)来替代所有的影响因素来研究自变量是如何变化的

     

    时间序列分析面临的问题

    时序应该在现实生活中应用的很广,但是为什么不常用这个模型呢?

    • 基础统计数据原因(数据收集)

    报表系统——质量问题
    统计口径——不统一
    范围变化、区域划分——变化

    • 理论和技术培训原因 

    之前没有好的工具来实现时间序列模型

     

    时间序列的方法分类

    • Time domain(最为常见的方法):将时间序列看成是过去一些点的函数,或者认为序列具有随时间系统变化的趋势,它可以用不多的参数来加以描述,或者说可以通过差分、周期等还原成随机序列。
    • Frequency domain:认为时间序列是由数个正弦波成份叠加而成,当序列的确来自一些周期函数集合时,该方法特别有用。 比如心电图
       

    时间序列的构成

    并不是每个序列都包含所有4种成分。比如以年为时间单位的序列就不会有季节变化;
    一些较短的序列也看不出循环变化。所以在分析的时候得具体情况具体分析。 

    • 长期趋势

    指一种长期的变化趋势。它采取一种全局的视角,不考虑序列局部的波动

    下图,整体呈下降趋势

    • 季节变化(Season)

    反映一种周期性的变化一般在一年中完成
    虽然称作“季节”,但是周期并不一定是季度,也可以是月、周等其它能在一年内完成的周期。因为,大多数的周期都以季节的形式出现,所以称作季节变化

    比较典型的季节变化例子:圣诞节效应;冷饮的销售情况

    • 循环变化(Cyclic)

    循环跨度超年

    指一种较长时间的周期变化。一般来说循环时间为2-15年。循环变化一般会出现波峰和波谷,呈现一种循环往复的现象。 
    比如:经济危机 

    • 不规则变化(error) 

    指时间序列中无法预计的部分,也可以理解为误差
    序列的随机波动 
    突发事件引起的 
    它是无法预测的 
    在分析中往往又将其称为白噪声

    它是时间序列中除去趋势、季节变化和自相关性之后的剩余随机扰动。由于时间序列存在不确定性,随机噪声总是夹杂在时间序列中,致使时间序列表现出某种震荡式的无规律运动。
    比如:911事件

     

    时间序列分析对长度的要求

    • 不同的序列分析方法对时间序列分析对长度不一样,建模过程一般都会做差分,差分会损失信息,差分得越多,相应要求的时间序列越长
    • 如果是稳定序列的话,历史数据越多,对预测的帮助越大
    • 如果存在周期,一般需要4个周期以上数理上认为应当在20个周期以上

           假如只有两三个周期,那周期性的分析就没有太大作用了

     

    对于时间序列问题有哪些基本分析思路

    看到数据其实不一定要上最复杂的方法

    • 平滑与季节分解(遇到比较简单的序列)

    用移动平均的方式消除波动,反映出主要的趋势

    • 回归模型

    如果在序列分析中我们考虑到自变量的话,根据历史数据建立相应的回归模型用于预测。甚至来说可以直接把时间当做自变量用于预测,当然我们知道回归时候要求残差是独立的,假如检验出来是非独立的话,我们可以去建一个自回归模型

    • ARIMA

    如果时间序列变化太复杂,我们可以采用ARIMA建模,现在最强大的时序建模方法。真正的时间序列模型建模分析方法
     

    平滑与季节分解

    • 是利用时间序列资料进行短期预测的一种方法。它的基本思想是:除去一些不规则变化后,时间序列将剩下一些基本的变化模式,而这种变化模式将延续到将来。
    • 描述时间序列数据的变化规律和行为,不去试图解释和理解这种变化的原因。例如:您可能发现在过去的一年里,三月和九月都会出现销售的高峰,您可能希望继续保持这样,尽管您不知道为什么。
    • 平滑的主要目的就是除去时间序列的不规则变化,把时间序列的基本变化模式突现出来,作为短期预测的基础。因此也有人把平滑称作“修匀”。
    • 平滑的方法很多。广义上说,可以认为回归也是一种平滑。因为拟合回归曲线可以把杂乱的观测数据修匀得到连续而光滑的曲线。
    • 移动平均和移动中位数等这些不同的平滑技术又被称为平滑器。平滑处理后,可以得到一些新的序列。不同的平滑器得到的新序列是不同的。选择合适的平滑器,寻求最佳的预测效果是平滑处理的关键。

     

    案例:NRC数据的建模预测

    美国1947年1月到1969年12月住宅建筑的数据,分析目的是希望能过通过历史数据来预测1970年全年的情况。

    数据集

    nrc是我们准备用于分析的变量

    nrc2又新增了12个月的数据,可以用来评价我们的预测效果

    556	556
    528	528
    545	545
    607	607
    701	701
    785	785
    874	874
    950	950
    1006	1006
    1093	1093
    1135	1135
    1070	1070
    891	891
    757	757
    874	874
    1028	1028
    1168	1168
    1257	1257
    1294	1294
    1305	1305
    1273	1273
    1203	1203
    1100	1100
    978	978
    846	846
    731	731
    763	763
    844	844
    981	981
    1086	1086
    1147	1147
    1171	1171
    1207	1207
    1238	1238
    1241	1241
    1171	1171
    1077	1077
    1031	1031
    1089	1089
    1276	1276
    1499	1499
    1703	1703
    1827	1827
    1898	1898
    1900	1900
    1785	1785
    1614	1614
    1427	1427
    1289	1289
    1188	1188
    1229	1229
    1288	1288
    1324	1324
    1399	1399
    1428	1428
    1409	1409
    1400	1400
    1397	1397
    1330	1330
    1200	1200
    1015	1015
    963	963
    1149	1149
    1234	1234
    1346	1346
    1437	1437
    1472	1472
    1486	1486
    1473	1473
    1481	1481
    1438	1438
    1309	1309
    1131	1131
    1057	1057
    1206	1206
    1363	1363
    1431	1431
    1570	1570
    1577	1577
    1550	1550
    1514	1514
    1481	1481
    1420	1420
    1294	1294
    1104	1104
    1029	1029
    1167	1167
    1347	1347
    1517	1517
    1627	1627
    1717	1717
    1770	1770
    1783	1783
    1759	1759
    1717	1717
    1650	1650
    1473	1473
    1379	1379
    1562	1562
    1753	1753
    1925	1925
    2064	2064
    2098	2098
    2082	2082
    2051	2051
    1983	1983
    1851	1851
    1656	1656
    1392	1392
    1305	1305
    1457	1457
    1618	1618
    1753	1753
    1884	1884
    1908	1908
    1895	1895
    1860	1860
    1798	1798
    1741	1741
    1567	1567
    1324	1324
    1206	1206
    1350	1350
    1486	1486
    1604	1604
    1718	1718
    1767	1767
    1796	1796
    1787	1787
    1761	1761
    1694	1694
    1513	1513
    1292	1292
    1192	1192
    1302	1302
    1421	1421
    1550	1550
    1702	1702
    1804	1804
    1876	1876
    1907	1907
    1954	1954
    1957	1957
    1832	1832
    1606	1606
    1493	1493
    1676	1676
    1907	1907
    2091	2091
    2253	2253
    2350	2350
    2358	2358
    2310	2310
    2232	2232
    2092	2092
    1883	1883
    1588	1588
    1408	1408
    1613	1613
    1804	1804
    1935	1935
    2112	2112
    2039	2039
    1982	1982
    1931	1931
    1860	1860
    1790	1790
    1644	1644
    1378	1378
    1221	1221
    1459	1459
    1720	1720
    1860	1860
    2059	2059
    2053	2053
    2053	2053
    2055	2055
    2041	2041
    1974	1974
    1807	1807
    1543	1543
    1368	1368
    1605	1605
    1906	1906
    2141	2141
    2377	2377
    2357	2357
    2377	2377
    2330	2330
    2210	2210
    2113	2113
    1965	1965
    1686	1686
    1492	1492
    1666	1666
    1950	1950
    2206	2206
    2421	2421
    2517	2517
    2553	2553
    2516	2516
    2500	2500
    2450	2450
    2230	2230
    1867	1867
    1678	1678
    1866	1866
    2068	2068
    2191	2191
    2385	2385
    2518	2518
    2541	2541
    2439	2439
    2327	2327
    2260	2260
    2118	2118
    1834	1834
    1639	1639
    1782	1782
    2000	2000
    2203	2203
    2429	2429
    2550	2550
    2561	2561
    2473	2473
    2377	2377
    2284	2284
    2136	2136
    1848	1848
    1644	1644
    1781	1781
    1979	1979
    2124	2124
    2287	2287
    2387	2387
    2351	2351
    2202	2202
    1978	1978
    1785	1785
    1614	1614
    1368	1368
    1248	1248
    1405	1405
    1613	1613
    1836	1836
    2107	2107
    2336	2336
    2471	2471
    2446	2446
    2375	2375
    2310	2310
    2191	2191
    1859	1859
    1655	1655
    1885	1885
    2262	2262
    2518	2518
    2628	2628
    2721	2721
    2790	2790
    2780	2780
    2678	2678
    2593	2593
    2454	2454
    2133	2133
    1940	1940
    2195	2195
    2540	2540
    2810	2810
    2962	2962
    2974	2974
    2880	2880
    2763	2763
    2648	2648
    2482	2482
    2288	2288
    	1961
    	1765
    	1986
    	2297
    	2485
    	2592
    	2650
    	2707
    	2721
    	2747
    	2735
    	2627


    时间序列操作的基本步骤

    • 预处理过程

    缺失值的填补 

    一般这两种方法我们比较常用


    时间变量的定义(spss对数据集进行了特殊标记,让spss知道其为序列数据,并非新增三个变量那么简单,必须是刚才进行下面的操作)


    时间序列的平稳化

    观测原始序列是什么分布,时间刻度这一块随便选一个时间自变量

    发现其有长期趋势及季节变化(大概一年)


    一次差分(假如序列匀速上升的话,一次差分序列后应该是平的)

    继续查看其变化(一次差分作为变量)

    确实序列变平了,但是随着时间增加季节变换还是存在的


    季节差分(把周期性也干掉),一阶:相邻的两个季节做相减

    看季节差分分布分布状况

    看到下面的序列,无长期趋势、无季节变换,可认为是一个比较平稳的序列了

    但是刚才上面在做一次差分后的序列,可以看出其序列随着时间增长离散程度会慢慢变大,后续分析可以考虑这一点,可以做变量变换。

    其实刚才上面的步骤不用那么麻烦,在序列图中即可观察

    当前周期:12在哪里设置呢?(在我们刚才定义日期选取的)

     

    关于数据平稳化问题:(非常详细的理论基础)

    大家可以参考

    https://zhuanlan.zhihu.com/p/60023855

    https://zhuanlan.zhihu.com/p/60648709

     

    时间序列趋势的图形化观察

    • Sequence Chart:序列图

    实际上就是一种特殊的线图

    • Autocorrelation Chart:做单个序列,任意滞后(包括负的滞后,也就是超前)的自相关和偏相关图

    对序列图的初步观察结果作进一步确认(检验其是不是白噪声序列)
    重点关心主要的相关趋势,然后再对模型进一步修正

    刚才我们认为做了一次差分和季节差分真的为平稳序列了吗?

    滞后n阶:隔了n个数据的自相关性

    Sig.<0.05,证明存在自相关的,不都是白噪声

    为了方便查看,给出了图,1到5阶都是存在统计学意义的

    自相关系数是有传递性的问题在里面的,spss就会计算偏自相关系数,屏蔽传递的效应后,看剩余的关联是否还存在

    自相关拖尾,偏自相关也拖尾,这两个是为了知道我们进行建模的

    自相关图:自回归系数的变化
    偏相关图:偏回归系数的变化

    假如他是以下模型,应满足下面的特征

    实际用起来,spss会提供一个自动分析的方法

    模型拟合
    几乎均可包含在ARIMA模型族中
    寻找适当的参数是一个反复尝试的过程

    生成 ARIMA 模型的基本步骤:

    1. 对序列绘图,进行 ADF 检验,观察序列是否平稳;对于非平稳时间序列要先进行 d 阶差分,转化为平稳时间序列;
    2. 经过第一步处理,已经得到平稳时间序列。要对平稳时间序列分别求得其自相关系数(ACF)和偏自相关系数(PACF),通过对自相关图和偏自相关图的分析,得到最佳的阶数p、q;
    3. 由以上得到的d、q、p ,得到 ARIMA 模型。然后开始对得到的模型进行模型检验。

    专家建模器:会在指数平滑模型和ARIMA模型里面选取

     

    R方相对于平稳的R方来说,是比较过于乐观的,假如数据是有波动趋势的,我们将趋势解释掉之后,占相当大的变异解释度进去了,平稳的R方比较客观

    RMSE(残差均方)

    MAPE(相对误差)

    MAXAPE(最大值相对误差)

    MAE(绝对误差)

    MAXAE(最大值绝对误差)

    正态化BIC(比较专业化的指标)

     

    当前模型剩下来的这块能否当成白噪声?

    H0:白噪声序列

    Sig.>0.05,剩下来的确实是白噪声序列

     

     

    如何让其做预测?怎么用时间序列?

    由于SPSS的一个小BUG,变量名前缀要修改一下,不能是中文

    对比一下原始序列和预测值效果

    我们想预测到久一点呢?

    假如我们有1970年的真实数据了,对比一下模型预测及真实数据差别

    展开全文
  • 致 Python 初学者

    万次阅读 多人点赞 2019-11-10 00:03:26
    欢迎来到“Python进阶”专栏!来到这里的每一位同学,应该大致上学习了很 Python 的基础知识,正在努力...开办这个专栏,正是为了帮助像我当年一样困惑的 Python 初学者出困境、快速成长。希望我的经验能真正帮到你
    展开全文
  • 线程面试题(值得收藏)

    万次阅读 多人点赞 2019-08-16 09:41:18
    金九银快到了,即将进入找工作的高峰期,最新整理的最全线程并发面试47题和答案总结,希望对想进BAT的同学有帮助,由于篇幅较,建议收藏后细看~ 1、并发编程三要素? 1)原子性 原子性指的是一个或者个操作,...

    史上最强多线程面试47题(含答案),建议收藏

    金九银十快到了,即将进入找工作的高峰期,最新整理的最全多线程并发面试47题和答案总结,希望对想进BAT的同学有帮助,由于篇幅较长,建议收藏后细看~

    1、并发编程三要素?

    1)原子性

    原子性指的是一个或者多个操作,要么全部执行并且在执行的过程中不被其他操作打断,要么就全部都不执行。

    2)可见性

    可见性指多个线程操作一个共享变量时,其中一个线程对变量进行修改后,其他线程可以立即看到修改的结果。

    3)有序性

    有序性,即程序的执行顺序按照代码的先后顺序来执行。

    2、实现可见性的方法有哪些?

    synchronized或者Lock:保证同一个时刻只有一个线程获取锁执行代码,锁释放之前把最新的值刷新到主内存,实现可见性。

    3、多线程的价值?

    1)发挥多核CPU的优势

    多线程,可以真正发挥出多核CPU的优势来,达到充分利用CPU的目的,采用多线程的方式去同时完成几件事情而不互相干扰。

    2)防止阻塞

    从程序运行效率的角度来看,单核CPU不但不会发挥出多线程的优势,反而会因为在单核CPU上运行多线程导致线程上下文的切换,而降低程序整体的效率。但是单核CPU我们还是要应用多线程,就是为了防止阻塞。试想,如果单核CPU使用单线程,那么只要这个线程阻塞了,比方说远程读取某个数据吧,对端迟迟未返回又没有设置超时时间,那么你的整个程序在数据返回回来之前就停止运行了。多线程可以防止这个问题,多条线程同时运行,哪怕一条线程的代码执行读取数据阻塞,也不会影响其它任务的执行。

    3)便于建模

    这是另外一个没有这么明显的优点了。假设有一个大的任务A,单线程编程,那么就要考虑很多,建立整个程序模型比较麻烦。但是如果把这个大的任务A分解成几个小任务,任务B、任务C、任务D,分别建立程序模型,并通过多线程分别运行这几个任务,那就简单很多了。

    4、创建线程的有哪些方式?

    1)继承Thread类创建线程类

    2)通过Runnable接口创建线程类

    3)通过Callable和Future创建线程

    4)通过线程池创建

    5、创建线程的三种方式的对比?

    1)采用实现Runnable、Callable接口的方式创建多线程。

    优势是:

    线程类只是实现了Runnable接口或Callable接口,还可以继承其他类。

    在这种方式下,多个线程可以共享同一个target对象,所以非常适合多个相同线程来处理同一份资源的情况,从而可以将CPU、代码和数据分开,形成清晰的模型,较好地体现了面向对象的思想。

    劣势是:

    编程稍微复杂,如果要访问当前线程,则必须使用Thread.currentThread()方法。

    2)使用继承Thread类的方式创建多线程

    优势是:

    编写简单,如果需要访问当前线程,则无需使用Thread.currentThread()方法,直接使用this即可获得当前线程。

    劣势是:

    线程类已经继承了Thread类,所以不能再继承其他父类。

    3)Runnable和Callable的区别

    Callable规定(重写)的方法是call(),Runnable规定(重写)的方法是run()。
    Callable的任务执行后可返回值,而Runnable的任务是不能返回值的。
    Call方法可以抛出异常,run方法不可以。
    运行Callable任务可以拿到一个Future对象,表示异步计算的结果。它提供了检查计算是否完成的方法,以等待计算的完成,并检索计算的结果。通过Future对象可以了解任务执行情况,可取消任务的执行,还可获取执行结果。

    6、线程的状态流转图

    线程的生命周期及五种基本状态:

    7、Java线程具有五中基本状态

    1)新建状态(New):当线程对象对创建后,即进入了新建状态,如:Thread t = new MyThread();

    2)就绪状态(Runnable):当调用线程对象的start()方法(t.start();),线程即进入就绪状态。处于就绪状态的线程,只是说明此线程已经做好了准备,随时等待CPU调度执行,并不是说执行了t.start()此线程立即就会执行;

    3)运行状态(Running):当CPU开始调度处于就绪状态的线程时,此时线程才得以真正执行,即进入到运行状态。注:就
    绪状态是进入到运行状态的唯一入口,也就是说,线程要想进入运行状态执行,首先必须处于就绪状态中;

    4)阻塞状态(Blocked):处于运行状态中的线程由于某种原因,暂时放弃对CPU的使用权,停止执行,此时进入阻塞状态,直到其进入到就绪状态,才 有机会再次被CPU调用以进入到运行状态。

    根据阻塞产生的原因不同,阻塞状态又可以分为三种:

    a.等待阻塞:运行状态中的线程执行wait()方法,使本线程进入到等待阻塞状态;

    b.同步阻塞 – 线程在获取synchronized同步锁失败(因为锁被其它线程所占用),它会进入同步阻塞状态;

    c.其他阻塞 – 通过调用线程的sleep()或join()或发出了I/O请求时,线程会进入到阻塞状态。当sleep()状态超时、join()等待线程终止或者超时、或者I/O处理完毕时,线程重新转入就绪状态。

    5)死亡状态(Dead):线程执行完了或者因异常退出了run()方法,该线程结束生命周期。

    8、什么是线程池?有哪几种创建方式?

    线程池就是提前创建若干个线程,如果有任务需要处理,线程池里的线程就会处理任务,处理完之后线程并不会被销毁,而是等待下一个任务。由于创建和销毁线程都是消耗系统资源的,所以当你想要频繁的创建和销毁线程的时候就可以考虑使用线程池来提升系统的性能。

    java 提供了一个 java.util.concurrent.Executor接口的实现用于创建线程池。

    9、四种线程池的创建:

    1)newCachedThreadPool创建一个可缓存线程池

    2)newFixedThreadPool 创建一个定长线程池,可控制线程最大并发数。

    3)newScheduledThreadPool 创建一个定长线程池,支持定时及周期性任务执行。

    4)newSingleThreadExecutor 创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务。

    10、线程池的优点?

    1)重用存在的线程,减少对象创建销毁的开销。

    2)可有效的控制最大并发线程数,提高系统资源的使用率,同时避免过多资源竞争,避免堵塞。

    3)提供定时执行、定期执行、单线程、并发数控制等功能。

    11、常用的并发工具类有哪些?

    CountDownLatch
    CyclicBarrier
    Semaphore
    Exchanger

    12、CyclicBarrier和CountDownLatch的区别

    1)CountDownLatch简单的说就是一个线程等待,直到他所等待的其他线程都执行完成并且调用countDown()方法发出通知后,当前线程才可以继续执行。

    2)cyclicBarrier是所有线程都进行等待,直到所有线程都准备好进入await()方法之后,所有线程同时开始执行!

    3)CountDownLatch的计数器只能使用一次。而CyclicBarrier的计数器可以使用reset() 方法重置。所以CyclicBarrier能处理更为复杂的业务场景,比如如果计算发生错误,可以重置计数器,并让线程们重新执行一次。

    4)CyclicBarrier还提供其他有用的方法,比如getNumberWaiting方法可以获得CyclicBarrier阻塞的线程数量。isBroken方法用来知道阻塞的线程是否被中断。如果被中断返回true,否则返回false。

    13、synchronized的作用?

    在Java中,synchronized关键字是用来控制线程同步的,就是在多线程的环境下,控制synchronized代码段不被多个线程同时执行。

    synchronized既可以加在一段代码上,也可以加在方法上。

    14、volatile关键字的作用

    对于可见性,Java提供了volatile关键字来保证可见性。

    当一个共享变量被volatile修饰时,它会保证修改的值会立即被更新到主存,当有其他线程需要读取时,它会去内存中读取新值。

    从实践角度而言,volatile的一个重要作用就是和CAS结合,保证了原子性,详细的可以参见java.util.concurrent.atomic包下的类,比如AtomicInteger。

    15、什么是CAS

    CAS是compare and swap的缩写,即我们所说的比较交换。

    cas是一种基于锁的操作,而且是乐观锁。在java中锁分为乐观锁和悲观锁。悲观锁是将资源锁住,等一个之前获得锁的线程释放锁之后,下一个线程才可以访问。而乐观锁采取了一种宽泛的态度,通过某种方式不加锁来处理资源,比如通过给记录加version来获取数据,性能较悲观锁有很大的提高。

    CAS 操作包含三个操作数 —— 内存位置(V)、预期原值(A)和新值(B)。如果内存地址里面的值和A的值是一样的,那么就将内存里面的值更新成B。CAS是通过无限循环来获取数据的,若果在第一轮循环中,a线程获取地址里面的值被b线程修改了,那么a线程需要自旋,到下次循环才有可能机会执行。

    java.util.concurrent.atomic 包下的类大多是使用CAS操作来实现的( AtomicInteger,AtomicBoolean,AtomicLong)。

    16、CAS的问题

    1)CAS容易造成ABA问题

    一个线程a将数值改成了b,接着又改成了a,此时CAS认为是没有变化,其实是已经变化过了,而这个问题的解决方案可以使用版本号标识,每操作一次version加1。在java5中,已经提供了AtomicStampedReference来解决问题。

    2) 不能保证代码块的原子性

    CAS机制所保证的知识一个变量的原子性操作,而不能保证整个代码块的原子性。比如需要保证3个变量共同进行原子性的更新,就不得不使用synchronized了。

    3)CAS造成CPU利用率增加

    之前说过了CAS里面是一个循环判断的过程,如果线程一直没有获取到状态,cpu资源会一直被占用。

    17、什么是Future?

    在并发编程中,我们经常用到非阻塞的模型,在之前的多线程的三种实现中,不管是继承thread类还是实现runnable接口,都无法保证获取到之前的执行结果。通过实现Callback接口,并用Future可以来接收多线程的执行结果。

    Future表示一个可能还没有完成的异步任务的结果,针对这个结果可以添加Callback以便在任务执行成功或失败后作出相应的操作。

    18、什么是AQS

    AQS是AbustactQueuedSynchronizer的简称,它是一个Java提高的底层同步工具类,用一个int类型的变量表示同步状态,并提供了一系列的CAS操作来管理这个同步状态。

    AQS是一个用来构建锁和同步器的框架,使用AQS能简单且高效地构造出应用广泛的大量的同步器,比如我们提到的ReentrantLock,Semaphore,其他的诸如ReentrantReadWriteLock,SynchronousQueue,FutureTask等等皆是基于AQS的。

    19、AQS支持两种同步方式:

    1)独占式

    2)共享式

    这样方便使用者实现不同类型的同步组件,独占式如ReentrantLock,共享式如Semaphore,CountDownLatch,组合式的如ReentrantReadWriteLock。总之,AQS为使用提供了底层支撑,如何组装实现,使用者可以自由发挥。

    20、ReadWriteLock是什么

    首先明确一下,不是说ReentrantLock不好,只是ReentrantLock某些时候有局限。如果使用ReentrantLock,可能本身是为了防止线程A在写数据、线程B在读数据造成的数据不一致,但这样,如果线程C在读数据、线程D也在读数据,读数据是不会改变数据的,没有必要加锁,但是还是加锁了,降低了程序的性能。

    因为这个,才诞生了读写锁ReadWriteLock。ReadWriteLock是一个读写锁接口,ReentrantReadWriteLock是ReadWriteLock接口的一个具体实现,实现了读写的分离,读锁是共享的,写锁是独占的,读和读之间不会互斥,读和写、写和读、写和写之间才会互斥,提升了读写的性能。

    21、FutureTask是什么

    这个其实前面有提到过,FutureTask表示一个异步运算的任务。FutureTask里面可以传入一个Callable的具体实现类,可以对这个异步运算的任务的结果进行等待获取、判断是否已经完成、取消任务等操作。当然,由于FutureTask也是Runnable接口的实现类,所以FutureTask也可以放入线程池中。

    22、synchronized和ReentrantLock的区别

    synchronized是和if、else、for、while一样的关键字,ReentrantLock是类,这是二者的本质区别。既然ReentrantLock是类,那么它就提供了比synchronized更多更灵活的特性,可以被继承、可以有方法、可以有各种各样的类变量,ReentrantLock比synchronized的扩展性体现在几点上:

    1)ReentrantLock可以对获取锁的等待时间进行设置,这样就避免了死锁

    2)ReentrantLock可以获取各种锁的信息

    3)ReentrantLock可以灵活地实现多路通知

    另外,二者的锁机制其实也是不一样的。ReentrantLock底层调用的是Unsafe的park方法加锁,synchronized操作的应该是对象头中mark word,这点我不能确定。

    23、什么是乐观锁和悲观锁

    1)乐观锁:就像它的名字一样,对于并发间操作产生的线程安全问题持乐观状态,乐观锁认为竞争不总是会发生,因此它不需要持有锁,将比较-替换这两个动作作为一个原子操作尝试去修改内存中的变量,如果失败则表示发生冲突,那么就应该有相应的重试逻辑。

    2)悲观锁:还是像它的名字一样,对于并发间操作产生的线程安全问题持悲观状态,悲观锁认为竞争总是会发生,因此每次对某资源进行操作时,都会持有一个独占的锁,就像synchronized,不管三七二十一,直接上了锁就操作资源了。

    24、线程B怎么知道线程A修改了变量

    volatile修饰变量
    synchronized修饰修改变量的方法
    wait/notify
    while轮询

    25、synchronized、volatile、CAS比较

    synchronized是悲观锁,属于抢占式,会引起其他线程阻塞。
    volatile提供多线程共享变量可见性和禁止指令重排序优化。
    CAS是基于冲突检测的乐观锁(非阻塞)

    26、sleep方法和wait方法有什么区别?

    这个问题常问,sleep方法和wait方法都可以用来放弃CPU一定的时间,不同点在于如果线程持有某个对象的监视器,sleep方法不会放弃这个对象的监视器,wait方法会放弃这个对象的监视器

    27、ThreadLocal是什么?有什么用?

    ThreadLocal是一个本地线程副本变量工具类。主要用于将私有线程和该线程存放的副本对象做一个映射,各个线程之间的变量互不干扰,在高并发场景下,可以实现无状态的调用,特别适用于各个线程依赖不通的变量值完成操作的场景。

    简单说ThreadLocal就是一种以空间换时间的做法,在每个Thread里面维护了一个以开地址法实现的ThreadLocal.ThreadLocalMap,把数据进行隔离,数据不共享,自然就没有线程安全方面的问题了。

    28、为什么wait()方法和notify()/notifyAll()方法要在同步块中被调用

    这是JDK强制的,wait()方法和notify()/notifyAll()方法在调用前都必须先获得对象的锁

    29、多线程同步有哪几种方法?

    Synchronized关键字,Lock锁实现,分布式锁等。

    30、线程的调度策略

    线程调度器选择优先级最高的线程运行,但是,如果发生以下情况,就会终止线程的运行:

    1)线程体中调用了yield方法让出了对cpu的占用权利

    2)线程体中调用了sleep方法使线程进入睡眠状态

    3)线程由于IO操作受到阻塞

    4)另外一个更高优先级线程出现

    5)在支持时间片的系统中,该线程的时间片用完

    31、ConcurrentHashMap的并发度是什么

    ConcurrentHashMap的并发度就是segment的大小,默认为16,这意味着最多同时可以有16条线程操作ConcurrentHashMap,这也是ConcurrentHashMap对Hashtable的最大优势,任何情况下,Hashtable能同时有两条线程获取Hashtable中的数据吗?

    32、Linux环境下如何查找哪个线程使用CPU最长

    1)获取项目的pid,jps或者ps -ef | grep java,这个前面有讲过

    2)top -H -p pid,顺序不能改变

    33、Java死锁以及如何避免?

    Java中的死锁是一种编程情况,其中两个或多个线程被永久阻塞,Java死锁情况出现至少两个线程和两个或更多资源。

    Java发生死锁的根本原因是:在申请锁时发生了交叉闭环申请。

    34、死锁的原因

    1)是多个线程涉及到多个锁,这些锁存在着交叉,所以可能会导致了一个锁依赖的闭环。

    例如:线程在获得了锁A并且没有释放的情况下去申请锁B,这时,另一个线程已经获得了锁B,在释放锁B之前又要先获得锁A,因此闭环发生,陷入死锁循环。

    2)默认的锁申请操作是阻塞的。

    所以要避免死锁,就要在一遇到多个对象锁交叉的情况,就要仔细审查这几个对象的类中的所有方法,是否存在着导致锁依赖的环路的可能性。总之是尽量避免在一个同步方法中调用其它对象的延时方法和同步方法。

    35、怎么唤醒一个阻塞的线程

    如果线程是因为调用了wait()、sleep()或者join()方法而导致的阻塞,可以中断线程,并且通过抛出InterruptedException来唤醒它;如果线程遇到了IO阻塞,无能为力,因为IO是操作系统实现的,Java代码并没有办法直接接触到操作系统。

    36、不可变对象对多线程有什么帮助

    前面有提到过的一个问题,不可变对象保证了对象的内存可见性,对不可变对象的读取不需要进行额外的同步手段,提升了代码执行效率。

    37、什么是多线程的上下文切换

    多线程的上下文切换是指CPU控制权由一个已经正在运行的线程切换到另外一个就绪并等待获取CPU执行权的线程的过程。

    38、如果你提交任务时,线程池队列已满,这时会发生什么

    这里区分一下:

    1)如果使用的是无界队列LinkedBlockingQueue,也就是无界队列的话,没关系,继续添加任务到阻塞队列中等待执行,因为LinkedBlockingQueue可以近乎认为是一个无穷大的队列,可以无限存放任务

    2)如果使用的是有界队列比如ArrayBlockingQueue,任务首先会被添加到ArrayBlockingQueue中,ArrayBlockingQueue满了,会根据maximumPoolSize的值增加线程数量,如果增加了线程数量还是处理不过来,ArrayBlockingQueue继续满,那么则会使用拒绝策略RejectedExecutionHandler处理满了的任务,默认是AbortPolicy

    39、Java中用到的线程调度算法是什么

    抢占式。一个线程用完CPU之后,操作系统会根据线程优先级、线程饥饿情况等数据算出一个总的优先级并分配下一个时间片给某个线程执行。

    40、什么是线程调度器(Thread Scheduler)和时间分片(Time Slicing)?

    线程调度器是一个操作系统服务,它负责为Runnable状态的线程分配CPU时间。一旦我们创建一个线程并启动它,它的执行便依赖于线程调度器的实现。时间分片是指将可用的CPU时间分配给可用的Runnable线程的过程。分配CPU时间可以基于线程优先级或者线程等待的时间。线程调度并不受到Java虚拟机控制,所以由应用程序来控制它是更好的选择(也就是说不要让你的程序依赖于线程的优先级)。

    41、什么是自旋

    很多synchronized里面的代码只是一些很简单的代码,执行时间非常快,此时等待的线程都加锁可能是一种不太值得的操作,因为线程阻塞涉及到用户态和内核态切换的问题。既然synchronized里面的代码执行得非常快,不妨让等待锁的线程不要被阻塞,而是在synchronized的边界做忙循环,这就是自旋。如果做了多次忙循环发现还没有获得锁,再阻塞,这样可能是一种更好的策略。

    42、Java
    Concurrency API中的Lock接口(Lock
    interface)是什么?对比同步它有什么优势?

    Lock接口比同步方法和同步块提供了更具扩展性的锁操作。他们允许更灵活的结构,可以具有完全不同的性质,并且可以支持多个相关类的条件对象。

    它的优势有:

    可以使锁更公平
    可以使线程在等待锁的时候响应中断
    可以让线程尝试获取锁,并在无法获取锁的时候立即返回或者等待一段时间
    可以在不同的范围,以不同的顺序获取和释放锁

    43、单例模式的线程安全性

    老生常谈的问题了,首先要说的是单例模式的线程安全意味着:某个类的实例在多线程环境下只会被创建一次出来。单例模式有很多种的写法,我总结一下:

    1)饿汉式单例模式的写法:线程安全

    2)懒汉式单例模式的写法:非线程安全

    3)双检锁单例模式的写法:线程安全

    44、Semaphore有什么作用

    Semaphore就是一个信号量,它的作用是限制某段代码块的并发数。Semaphore有一个构造函数,可以传入一个int型整数n,表示某段代码最多只有n个线程可以访问,如果超出了n,那么请等待,等到某个线程执行完毕这段代码块,下一个线程再进入。由此可以看出如果Semaphore构造函数中传入的int型整数n=1,相当于变成了一个synchronized了。

    45、Executors类是什么?

    Executors为Executor,ExecutorService,ScheduledExecutorService,ThreadFactory和Callable类提供了一些工具方法。

    Executors可以用于方便的创建线程池

    46、线程类的构造方法、静态块是被哪个线程调用的

    这是一个非常刁钻和狡猾的问题。请记住:线程类的构造方法、静态块是被new这个线程类所在的线程所调用的,而run方法里面的代码才是被线程自身所调用的。

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

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

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

    47、同步方法和同步块,哪个是更好的选择?

    同步块,这意味着同步块之外的代码是异步执行的,这比同步整个方法更提升代码的效率。请知道一条原则:同步的范围越小越好。

    48、Java线程数过多会造成什么异常?

    1)线程的生命周期开销非常高

    2)消耗过多的CPU资源

    如果可运行的线程数量多于可用处理器的数量,那么有线程将会被闲置。大量空闲的线程会占用许多内存,给垃圾回收器带来压力,而且大量的线程在竞争CPU资源时还将产生其他性能的开销。

    3)降低稳定性

    JVM在可创建线程的数量上存在一个限制,这个限制值将随着平台的不同而不同,并且承受着多个因素制约,包括JVM的启动参数、Thread构造函数中请求栈的大小,以及底层操作系统对线程的限制等。如果破坏了这些限制,那么可能抛出OutOfMemoryError异常。

    展开全文
  • MATLAB 时间序列预测算法(有代码)

    万次阅读 多人点赞 2019-09-05 09:57:44
    #最近在学习时间序列,找了很资料,都需要会员,充值,本着共同进步的原则,给大家分享一下我找到的学习资料,里面大部分代码能实现,只有ARMA部分不能,因为现在的库中没有garchset了,所以还在找替代的方法,有...

    ##MATLAB 时间序列预测算法(有代码)
    #最近在学习时间序列,找了很多资料,都需要会员,充值,本着共同进步的原则,给大家分享一下我找到的学习资料,里面大部分代码能实现,只有ARMA部分不能,因为现在的库中没有garchset了,所以还在找替代的方法,有大佬知道了解,也希望伸出援助之手帮助我这个渣渣,谢谢。

    我是为了方便学习,就写在一个文档里了,你们实现的时候只要把你想用的算法前面的%去掉就好了。

    %平均移动法
    %clc;
    %clear all;
    %y=[0.35 0.33 0.29 0.19 0.23 0.24 0.39 0.37 0.21 0.21 0.21];
    %m=length(y);
    %n=[1,2]; % 自定义
    %for i=1:length(n)
     %   for j=1:m-n(i)+1
      %       yhat{i}(j)=sum(y(j:j+n(i)-1))/n(i);
       % end
        %y31(i)=yhat{i}(end);
        %s(i)=sqrt(mean((y(n(i)+1:m)-yhat{i}(1:end-1)).^2));
    %end
    %y31,s
    
    
    %加权平均
    %clc;
    %clear all;
    %y=[215 197 203 234 194 108 191 241 232 221 196 226 201 219 217 213 203 225 237 188 212 198 219 177 231 199 203];
    %w=[1/7;3/7;3/7];
    %m=length(y);n=3;
    %for i=1:m-n+1
     %   yhat(i)=y(i:i+n-1)*w;
        
    %end
    %yhat;
    %err=abs(y(n+1:m)-yhat(1:end-1))./y(n+1:m);
    %T_err=1-sum(yhat(1:end-1))/sum(y(n+1:m));
    %y1989=yhat(i)/(1-T_err);
    
    
    %趋势移动平均法
    %clc;
    %clear all;
    %y=[216 199 222 218 217 259 206 230 255 221 214 212 219 224 210 205 186 249 214 228 211 226 219 238 217 205 206];
    %y=[676 825 774 716 940 1159 1384 1524 1668 1688 1958 2031 2234 2566 2820 3006 3093 3277 3514 3770 4107];
    %m1=length(y);
    %n=6;
    %for i=1:m1-n+1
     %   yhat1(i)=sum(y(i:i+n-1))/n;
    %end
    %yhat1;
    %m2=length(yhat1);
    %for i=1:m2-n+1
     %   yhat2(i)=sum(yhat1(i:i+n-1))/n;
    %end
    %yhat2;
    %plot(1:27,y,'*');
    %a21=2*yhat1(end)-yhat2(end);
    %b21=2*(yhat1(end)-yhat2(end))/(n-1);
    %y1986=a21+b21
    %y1987=a21+2*b21
    
    
    %指数平滑法
    %clc,clear all;
    %yt=[216 199 222 218 217 259 206 230 255 221 214 212 219 224 210 205 186 249 214 228 211 226 219 238 217 205 206];
    %yt=[50 52 47 51 49 48 51 40 48 52 51 59];
    %n=length(yt); 
    %alpha=[0.2 0.5 0.8];m=length(alpha); 
    %yhat(1,1:m)=(yt(1)+yt(2))/2; 
    %for i=2:n 
     %yhat(i,:)=alpha*yt(i-1)+(1-alpha).*yhat(i-1,:); 
    %end
    %yhat;
    %y1=yt';
    %err=sqrt(mean((repmat(y1,1,m)-yhat).^2))
    %xlswrite('yt',yhat) ;
    %yhat1988=alpha*yt(n)+(1-alpha).*yhat(n,:)
    
    
    %三次指数平滑法
    %clc,clear;
    %yt=[20.04 20.06 25.72 34.61 51.77 55.92 80.65 131.11 148.58 162.67 232.26];
    %n=length(yt); 
    %alpha=0.3; st1_0=mean(yt(1:3)); st2_0=st1_0;st3_0=st1_0; 
    %st1(1)=alpha*yt(1)+(1-alpha)*st1_0; 
    %st2(1)=alpha*st1(1)+(1-alpha)*st2_0; 
    %st3(1)=alpha*st2(1)+(1-alpha)*st3_0; 
    %for i=2:n 
    % st1(i)=alpha*yt(i)+(1-alpha)*st1(i-1); 
    % st2(i)=alpha*st1(i)+(1-alpha)*st2(i-1); 
    % st3(i)=alpha*st2(i)+(1-alpha)*st3(i-1); 
    %end 
    %xlswrite('touzi.xls',[st1',st2',st3']) 
    %st1=[st1_0,st1];st2=[st2_0,st2];st3=[st3_0,st3]; 
    %a=3*st1-3*st2+st3; 
    %b=0.5*alpha/(1-alpha)^2*((6-5*alpha)*st1-2*(5-4*alpha)*st2+(4-3*alpha)*st3); 
    %c=0.5*alpha^2/(1-alpha)^2*(st1-2*st2+st3); 
    %yhat=a+b+c; 
    %xlswrite('touzi.xls',yhat','Sheet1','D1') 
    %plot(1:n,yt,'*',1:n,yhat(1:n),'O') 
    %legend('实际值','预测值') 
    %xishu=[c(n+1),b(n+1),a(n+1)]; 
    %yhat1990=polyval(xishu,2)
    
    
    %自适应滤波法
    %clc,clear;
    %yt=[217 207.5 215 223 222 221.5 209 213 217 213 217 215];
    %m=length(yt);k=0.083;
    %N=12;Terr=10000;
    %w=ones(1,N)/N;
    %while abs(Terr)>0.00001
     %   Terr=[];
      %  for j=N+1;m-1
         %    yhat(j)=w*yt(j-1:-1:j-N)';
          %   err=yt(j)-yhat(j);
            % Terr=[Terr,abs(err)];
            % w=w+2*k*err*yt(j-1:-1:j-N);
        % end
       %  Terr=max(Terr);
     %end
     %w,yhat
     
     
    %趋势外推预测法——修正指数曲线法(以下三种类似,选S标准误差小的模型)
    %function chanliang
    %clc,clear;
    %global a b k
    %%yt=[217 207.5 215 223 222 221.5 209 213 217 213 217];
    %yt=[42.1 47.5 52.7 57.7 62.5 67.1 71.5 75.7 79.8 83.7 87.5 91.1 94.6 97.9 101.1];
    %n=length(yt);m=n/3;
    %%值得注意的是,并不是任何一组数据都可以用修正指数曲线拟合。采用前应对数据进行检验,检验方法是看给定数据的逐期增长量的比率是否接近某一常数b
    %cf=diff(yt);
    %for i=1:n-2
     %   bzh(i)=cf(i+1)/cf(i)
    %end
    %range=minmax(bzh)     %b的范围
    %s1=sum(yt(1:m)),s2=sum(yt(m+1:2*m)),s3=sum(yt(2*m+1:end))
    %b=((s3-s2)/(s2-s1))^(1/m)
    %a=(s2-s1)*(b-1)/(b*(b^m-1)^2)
    %k=(s1-a*b*(b^m-1)/(b-1))/m
    %y=yuce(1:18)
    %定义预测函数
    %function y=yuce(t)
    %global a b k
    %y=k+a*b.^t;
    
    %Compertz 曲线:  初期增长缓慢,以后逐渐加快。当达到一定程度后,增长率又逐渐下降。
    %clc,clear
    %yuce=@(t,a,b,k)k*a.^(b.^t);
    %y=[42.1 47.5 52.7 57.7 62.5 67.1 71.5 75.7 79.8 83.7 87.5 91.1 94.6 97.9 101.1];
    %yt=log(y);n=length(yt);m=n/3;
    %s1=sum(yt(1:m)),s2=sum(yt(m+1:2*m)),s3=sum(yt(2*m+1:end))
    %b=((s3-s2)/(s2-s1))^(1/m)
    %a=(s2-s1)*(b-1)/(b*(b^m-1)^2)
    %k=(s1-a*b*(b^m-1)/(b-1))/m
    %a=exp(a)
    %k=exp(k)
    %y=yuce(1:18,a,b,k)
    
    
    %Logistic 曲线(生长曲线)
    %clc,clear
    %yuce=@(t,a,b,k) 1./(k+a*b.^t);
    %y=[42.1 47.5 52.7 57.7 62.5 67.1 71.5 75.7 79.8 83.7 87.5 91.1 94.6 97.9 101.1];
    %yt=1./y;n=length(yt);m=n/3;
    %s1=sum(yt(1:m)),s2=sum(yt(m+1:2*m)),s3=sum(yt(2*m+1:end))
    %b=((s3-s2)/(s2-s1))^(1/m)
    %a=(s2-s1)*(b-1)/(b*(b^m-1)^2)
    %k=(s1-a*b*(b^m-1)/(b-1))/m
    %y1=yuce(1:18,a,b,k)
    

    [原文档在百度网盘里链接:https://pan.baidu.com/s/1rKEWW4ynqH-rM_Gt15aCUw
    提取码:tdby
    ]

    ##欢迎批评指正!

    展开全文
  • 入门学习Linux常用必会60个命令实例详解doc/txt

    千次下载 热门讨论 2011-06-09 00:08:45
    -p,--preserve-timestamps:以<来源>文件的访问/修改时间作为相应的目的文件的时间属性。 -s,--strip:用strip命令删除symbol table,只适用于第一及第二种使用格式。 -S,--suffix=后缀:自行指定...
  • 中信银行总行信息科技部今年在...一、 校招时间线 网申(11月初截止)+ 行测 宣讲会+提前批面试 10月14日 笔试(11月7日) 邮件通知实习(11月28日),正式批的同学大概也是这两天发的面试通知。 实习(2019年12月...
  • 恩智浦智能汽车竞赛电磁组总结

    万次阅读 多人点赞 2020-03-03 11:31:04
    您们好,刚入手智能车可能不知所措,会浪费很时间,不知所措,我把这一年的弯路告诉大家,让大家开始就有一个目标,快速进入实验室的状态,首先我告诉大家,其实学长们的确开始比你们懂得要多,但是经过一段...
  • 开发一个这样的 APP 要多长时间

    千次阅读 2017-12-26 00:00:00
    开始了……我有些尴尬拿着水杯,正对面坐着来访的王总,他是在别处打拼的人,这几年据说收获颇丰,见移动互联网如火如荼,自然也想着进来干一场,尽管王总从事的行当也算跟IT沾边,但毕竟太长时间不接触技术,...
  • 浦发银行 信息科技岗 大数据方向 面经

    万次阅读 多人点赞 2018-08-09 23:00:31
    总之,技术面就这样结束了,我具体多长时间没看表,但大概七八分钟吧,绝对不到十分钟。回来以后我也在反思技术面哪里出了问题。各种原因吧,肯定有我自身的原因。也有可能我前面都是双985都是很优秀的人,到我这...
  • 19跨考中科大计算机408经验贴

    万次阅读 多人点赞 2019-03-20 11:08:57
    本科双非,专业是信息与计算科学,跨考中科大计算机科学技术专业,408只学了一本数据结构,另外三本书自学,本科没项目,英语没什么基础,高中不学英语 考研成绩: 总分383,数一124,政治69,英语73,408专业...
  • 史上最管用的C盘深度清理秘籍

    万次阅读 多人点赞 2019-03-09 15:37:43
    使用电脑的用户都知道,使用电脑一段时间后,会堆积很无用的文件,不仅占用磁盘空间,而且导致系统运行速度变慢,所以清理c盘垃圾是非常有必要的。 无论我们给C盘分大的分区,Windows都有办法把它填满。像休眠...
  • MATLAB 2018b 安装与简介

    万次阅读 多人点赞 2019-02-18 13:07:00
    matlab2018b安装教程 该版本是mathworks官方开发的新版本的商业数学软件,可以帮助用户不仅仅将自己的...与matlab2018a相比,matlab2018b拥有更数据分析、机器学习和深度学习选项,并且速度比以往更快。其亮点...
  • 作为已经搞了几年代码的老司机,对于这种动不动就喊着精通某种语言的初学者有点无奈,现在很刚毕业或者毕业没有几年的程序员喊着精通几种编程语言,而且这种基本上在面试上遇到老程序员都会遭到技术细节的洗礼,...
  • 深度学习常见算法的介绍和比较

    万次阅读 多人点赞 2018-02-08 22:00:06
    很多人都有误解,以为深度...关于深度学习的理论推导,太大太复杂,一些常见的深度学习算法本人也是模模糊糊的,看过好多次的,隔断时间就会忘记,现在对其系统的整理一下(从历史,致命问题出发,再看具体算法的思想,
  • 前言 还记得我们在 服务端增删改配置数据之后如何通知集群中的其他机器 中分析了服务端... 客户端与服务端直接是连接还是短连接? 客户端与服务端是推还是拉? ConfigService.addListener 订阅配置消息 在【N...
  • xshell 连接 linux 响应时间

    千次阅读 2020-06-12 14:30:07
    1.在linux或者你连接好的xshell里面,输入命令:vim /etc/ssh/sshd_config 2.按/命令进行检索查询DNS,找到...4.想直接将改正的立刻生效,那么就敲下面的命令,如果不愿意,可以重启。 service sshd.service rest.
  • 这篇文章很,近7000字。我选取了我人生中的几个重要经历和抉择,这些事件,持续影响了我的一生,希望对大家有所启发。 通过这篇文章,我只想让大家知道,我跟大家一样都只是普通人,也曾经处在比大家更差的阶段,...
  • MySQL优化技巧

    万次阅读 多人点赞 2017-09-10 14:14:00
    从数据库读出越的数据,那么查询就会变得越慢。并且,如果我们的数据库服务器和WEB服务器是两台独立的服务器的话,这还会增加网络传输的负载。 所以,我们应该养成一个需要什么就取什么的好的习惯。 Hibernate...
  • 关于用户访问请求慢,TTFB时间长的问题分析

    万次阅读 多人点赞 2017-11-29 19:44:01
    用户访问某个请求页面的时候,经常会出现白屏或者是卡顿的情况,通过Chrome开发工具调试查看,发现请求访问过程中,请求中经常会出现某个请求访问时间超长的情况,有时几秒,有时几秒,有时几百毫秒,时间不等。...
  • 浏览器对同一域名进行请求的最大并发连接数 当我们在浏览网页的时候,对浏览速度有一个重要的影响因素,就是...但是如果同时有更的并发连接数,这样就会大大的提高网页加载速度。浏览器的并发连接数也并非越大越好。
  • 大家好,我是二哥呀。 前天的文章提了一嘴,有个客户从长沙开了 9 个小时...当然了,大佬离开华为有一段时间了,因为创业。一开始,创业做得风生水起,无奈碰上疫情,再加上经济下行,维艰了。 这一点我深有感受,之
  • 朋友圈大家又佛又丧,背地里却在天天向上,真是看透你们了。 当看朋友圈和跟大家聊天时,大家表现的都很谦虚:“最近堕落了”、“最近不咋”、“穷困潦倒”、“混日子呗”……然而,最近发现的一件件事,真是细...
  • 时间规划 我觉得计划里面,对于自己时间的规划是很重要的,比如你现在想学习Redis相关的知识点,那我觉得你至少得给自己一个大概的时间规划,比如你用一个月的时间去学完Redis所有的基础知识,再一个月的时间去...
  • oracle定时器job长时间执行无法结束

    万次阅读 2016-12-22 10:59:37
    正常情况下,这些存储过程执行完毕需要几时间,但有时不知道什么原因一天都执行不完,导致第二天的job也无法顺利执行。如果不进行人工干预,这个job也许就再也不会执行下去了。通过查询和测试我知道卡死的原因是...
  • 请注意,这本书成书已经二十年,当时的带宽是很低的,假设只有16Mbps,RTT为1个单位,带宽换算成字节的话大概就是2MBps,简单按照进制换算,记为2000000Bps,我们假设TCP的段长为1000字节,初始拥塞窗口为1个段...
  • 认真看了多少少可以学到点东西 大神勿喷 首先,我们知道破解一个游戏需要分析它的apk,于是我们需要用到MT管理器(因为我是从MT开始的),这个度娘一下可以出来。额,也可点链接...
  • 如何将一个URL转换为一个短URL?

    万次阅读 多人点赞 2018-04-21 14:40:41
    》,现在想起来这是一个绝对不简单的问题,需要考虑很方面,今天和大家一起学习研究一下! 短网址:顾名思义,就是将网址缩短到一个很短的网址,用户访问这个短网址可以重定向到原本的网址(也就是还原的过程...
  • 程序员的年之痒

    万次阅读 多人点赞 2020-11-09 08:27:52
    那时候在读高中二年级,那个中午刚到学校大门外,阳光正好通过那个传单刺到了我的眼睛,传单的内容很,是一个技术学院为了招生写的关于黑客的描述,大概意思是那是热爱自由、平等、开源,躲在黑暗角落的怪人。...
  • 人工智能毫无疑问是2019年CES最热门话题之一,自1956年人工智能提出概念以来,人工智能发展几经波折,随着近年来人工智能学者和技术开始涌现,人工智能上了快速发展的道路。 一年一度的全球电子行业标杆意义盛会...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 438,626
精华内容 175,450
关键字:

十里地要走多长时间