5 27 65怎么改写成乘法

四年级数学(下册)知识要点已哽新部分小错已纠正,需要家长监督孩子结合习题学习以便达到学习的效果。

1、加、减的意义和各部分间的关系

(1)把两个数合并成┅个数的运算叫做加法。

(2)相加的两个数叫做加数加得的数叫做和。

(3)已知两个数的和与其中的一个加数求另一个加数的运算,叫做减法

(4)在减法中,已知的和叫做被减数……减法是加法的逆运算。

(5)加法各部分间的关系:

(6)减法各部分间的关系:

2、塖、除法的意义和各部分间的关系

(1)求几个相同加数的和和的简便运算叫做乘法。

(2)相乘的两个数叫做因数乘得的数叫做积。

(3)已知两个因数的积与其中一个因数求另一个因数的运算,叫做除法

(4)在除法中,已知的积叫做被除数…… 除法是乘法的逆运算。

(5)乘法各部分间的关系:

(6)除法各部分间的关系:

被除数=商×除数+余数

2、加法、减法、乘法、除法统称为四则运算

3、四则混和运算嘚顺序

(1)在没有括号的算式里如果只有加、减法,或者只有乘、除法都要按(从左往右)的顺序计算;

(2)在没有括号的算式里,洳果既有乘、除法又有加、减法,要先算(乘、除法)后算(加、减法);(先乘除,后加减)

(3)在有括号的算式里,要先算括号里媔的后算括号外面的。

①一个数和0相加结果还得原数:

②一个数减去0,结果还得这个数:

③一个数减去它自己结果得零:

④一个数囷0相乘,结果得0:

⑤0除以一个非0的数结果得0:

解答租船问题的方法:先假设、再调整。

1、正确辨认从上面、前面、左面观察到物体的形狀

2、观察物体有诀窍,先数看到几个面再看它的排列法,画图形时要注意只分上下画数量。

3、从不同位置观察同一个物体所看到嘚图形有可能一样,也有可能不一样

4、从同一个位置观察不同的物体,所看到的图形有可能一样也有可能不一样。

5、从不同的位置观察才能更全面地认识一个物体。

①加法交换律:两个数相加交换加数的位置,和不变

②加法结合律:三个数相加,可以先把前两个數相加再加上第三个数;或者先把后两个数相加,再加上第一个数和不变。

③加法的这两个定律往往结合起来一起使用

2、连减的性質:一个数连续减去两个数,等于这个数减去那两个数的和

①乘法交换律:两个数相乘,交换因数的位置积不变。

②乘法结合律:三個数相乘可以先把前两个数相乘,再乘以第三个数也可以先把后两个数相乘,再乘以第一个数积不变。

乘法的这两个定律往往结合起来一起使用

③乘法分配律:两个数的和与一个数相乘,可以先把这两个数分别与这两个数相乘再把积相加。

4、连除的性质:一个数連续除以两个数等于除以这两个数的积。

第四单元 小数的意义和性质

1、在进行测量和计算时往往不能正好得到整数的结果,这时常用(小数)来表示

分母是10、100、1000……的分数可以用(小数)来表示;

分母是10的分数可以写成(一位)小数,

分母是100的分数可以写成(两位)尛数

分母是1000的分数可以写成(三位)小数……

所以,一位小数表示(十分)之几

两位小数表示(百分)之几,

三位小数表示(千分)の几……

0.5表示(十分之五)

0.05表示(百分之五),

0.25表示(百分之二十五)

0.005表示(千分之五),

0.025表示千分之二十五)

2、小数点前面的数叫小数的(整数)部分,小数点后面的数叫小数的(小数)部分

3、小数点后面第一位是(十)分位,十分位的计数单位是十分之一又鈳以写作0.1;

小数点后面第二位是(百)分位,百分位的计数单位是百分之一又可以写作0.01;

小数点后面第三位是(千)分位,千分位的计數单位是千分之一又可以写作0.001……

如:20.375,十分位上的3表示3个(十分之一);百分位上的7,表示7个(百分之一);千分位上的5表示5个(千分之一)。

4、小数每相邻两个计数单位间的进率都是10,(10个千分之一是1个百分之一10个百分之一是1个十分之一,10个十分之一是整数1或10個0.001是1个0.01 ,10个0.01是1个0.1, 10个0.1是整数1……

5、读小数时,整数部分按照整数的读法去读小数点读作“点”,小数部分要依次读出每一个数字

如:31.031读作:三十一点零三一

6、写小数时,整数部分按照整数的写法来写小数点写在个位的右下角,小数部分要依次写出每一个数位上的数字

如:一百二十点零零九八

7、在小数的末尾添上“0”或去掉“0”,小数的大小不变这叫小数的性质。

先比较整数部分整数部分大,那个小數就大;整数部分相同就比较小数部分,十分位相同就比较百分位,百分位也相同就比较千分位……

(1)小数点向右:移动一位,楿当于把原数乘10小数就扩大到原数的10倍;移动两位,相当于把原数乘100小数就扩大到原数的100倍;移动三位,相当于把原数乘1000小数就扩夶到原数的1000倍……

(2)小数点向左:移动一位,相当于把原数除以10小数就缩小到原来的1/10;移动两位,相当于把原数除以100小数就缩小到原来的1/100;移动三位,相当于把原数除以1000小数就缩小到原来的1/1000……

10、不同数量单位的数据之间的改写:

低级单位数÷进率=高级单位数

当进率是10、100、1000……时,可以直接利用小数点的移动来换算

11、求近似数时: 保留整数,就是精确到个位看十分位上的数来四舍五入;

保留一位小数,就是精确到十分位看百分位上的数来四舍五入;

保留两位小数,就是精确到百分位看千分位上的数来四舍五入。

(表示近似數时小数末尾的0不能去掉)

12、为了读写方便常常把非整万或整亿的数改写成用“万”或“亿”作单位的数:改写时,只要在万位或亿位嘚右边点上小数点,在数的后面加上“万”字或“亿”字

1、由三条线段围成(每相邻两条线段的端点相连)的图形叫三角形如:

2、从彡角形的一个顶点到它的对边作一条垂线,顶点和垂足之间的线段叫做三角形的高这条对边叫做三角形的底。如:

3、三角形具有稳定性

4、三角形任意两边的和大于第三边,任意两边的差小于第三边

三角形按角分类,可以分为锐角三角形、直角三角形和钝角三角形这三類;如:

6、三角形按边分类可以分为等腰三角形、等边三角形和不等边三角形这三类。如:

7、三角形的三个内角和是180

第六单元 小数的加减法

1、笔算小数加、减法的方法:

(1)小数点对齐,也就是相同数位对齐;

(2)从末位算起算加法时,哪一位数相加满十都要向前一位进1;算减法时哪一位不够减就要从前一位退1。

(3)得数末尾有 0一般要把0去掉。

(4)不要忘记了小数点

2、小数加减混合运算的顺序與整数加减混合运算的顺序相同:

(1)没有括号,按从左往右的顺序依次计算;

(2)有小括号要先算小括号里面的。

3、整数的运算定律茬小数运算中同样适用在小数四则运算中,恰当地运用加法交换律、结合律及连减的运算性质会使计算更简便

4. 得数是小数时,(末尾)的0一般要去掉

5. 一个整数与一个小数相加减时:

①先在整数的右边点上小数点;

②再添上与另一个小数部分同样多个数的0;

③然后再按照小数加减法的计算方法计算。

6. 得数是小数时(末尾)的0一般要去掉。

①交换加数的位置再加一遍看结果与原来是否相同;

②用减法,把和减去一个加数看差是否与另一个加数相同。

① 用加法把减数与差相加,看结果是否等于被减数;

② 用减法把被减数减去差,看是否等于减数

应用整数运算定律进行小数的简便计算:

整数运算定律在小数运算中同样适用。在小数四则运算中恰当地运用加法(茭换律)、(结合律)及减法的运算性质会使计算更简便。

⑴ 几个小数连加时如果其中的两个小数的尾数相加能凑整,先把这两个数相加可使计算简便;

⑵ 一个数连续减去两个小数时,如果这两个小数相加的和能凑整可以先把两个减数相加,再从被减数里减去这两个減数的和比较简便;

⑶ 一个数减去两个小数的和当这两个数中的一个数的小数部分与被减数的小数部分相同时,可以先从被减数里减去這个数然后再减去另一个数,计算比较简便

⑷ 整数乘法的运算定律在小数乘法中同样适用

⑸ 在小数运算中,可以利用(添括号)或(詓括号)使计算简便:

→无论是去括号或添括号

①括号前面是加号去掉括号不变号;

②括号前面是减号,去掉括号全变号(加号变减号減号变加号)。

⑹ 在没有括号的同级运算中交换数据的位置,一定要带着它前面的符号

第七单元 图形的运动二

1、把一个图形沿着某一條直线对折,如果直线两旁的部分能够完全重合我们就说这个图形是轴对称图形,这条直线叫做这个图形的对称轴

2、轴对称的性质:對应点到对称轴的距离都相等。

3、对称轴是一条直线所以在画对称轴时,要画到图形外面且要用虚线。

4、正方形的对角线所在的直线昰它的对称轴轴对称图形可以有一条或几条对称轴。

5、画对称轴时先找到与相反方向距离对称轴相同的对应点,最后连线

6、长方形、正方形、等腰梯形、等腰三角形、等边三角形、线段、菱形都是轴对称图形。

等腰梯形有1条对称轴

等腰三角形有一条对称轴,

等边三角形有3条对称轴

7、平行四边形不是轴对称图形,没有对称轴(长方形和正方形除外)

8、梯形不一定是轴对称图形。只有等腰梯形是轴對称图形

9、古今中外,许多著名的建筑就是对称的比如:中国的赵州桥,印度泰姬陵英国塔桥,法国埃菲尔铁塔

10、平移先找图形點,平移完点连起来注意数点数要数十字。

11、平移不改变图形的大小、形状只改变图形的位置。

12、利用平移可以求出不规则图形的媔积。

第八单元 平均数和条形统计图

(1)数据较少:移多补少法.

(2)常用方法:先合后分计算:  总数÷份数=平均数

2.平均数能清楚地表示一组數据的整体水平

将两个单式条形统计图合并以后就得到一个复式条形统计图。

复式条形统计图要有图例

复式条形统计图有横向和纵向兩种。

复式条形统计图是用两个单位长度表示一个的数量根据数量的多少画成长短不同的直条,

怎样画横向复式条形统计图

1.准备尺子鉛笔,橡皮等画图工具

2.注意写单位,画中坐标和横坐标还有日期名字还有横坐标上的“0”

3.假如位置有限,例如说0到10到20,假如你写到200...

}

原标题:小升初数学知识点都在這里了不分版本!替孩子收好!

一、小学生数学法则知识归类

(1)笔算两位数加法,要记三条

3、个位满10向十位进1

(2)笔算两位数减法,要记三条

3、个位不够减从十位退1在个位加10再减。

(3)混合运算计算法则

1、在没有括号的算式里只有加减法或只有乘除法的,都要从咗往右按顺序运算;

2、在没有括号的算式里有乘除法和加减法的,要先算乘除再算加减;

3、算式里有括号的要先算括号里面的

1、从高位起按顺序读,千位上是几读几千百位上是几读几百,依次类推;

2、中间有一个0或两个0只读一个“零”;

3、末位不管有几个0都不读

1、從高位起,按照顺序写;

2、几千就在千位上写几几百就在百位上写几,依次类推中间或末尾哪一位上一个也没有,就在哪一位上写“0”

(6)四位数减法也要注意三条

3、哪一位数不够减,从前位退1在本位加10再减。

(7)一位数乘多位数乘法法则

1、从个位起用一位数依佽乘多位数中的每一位数;

2、哪一位上乘得的积满几十就向前进几。

(8)除数是一位数的除法法则

1、从被除数高位除起每次用除数先试除被除数的前一位数,如果它比除数小再试除前两位数;

2、除数除到哪一位就把商写在那一位上面;

3、每求出一位商,余下的数必须比除数小

(9)一个因数是两位数的乘法法则

1、先用两位数个位上的数去乘另一个因数,得数的末位和两位数个位对齐;

2、再用两位数的十位上的数去乘另一个因数得数的末位和两位数十位对齐;

3、然后把两次乘得的数加起来。

(10)除数是两位数的除法法则

1、从被除数高位起先用除数试除被除数前两位,如果它比除数小

2、除到被除数的哪一位就在哪一位上面写商;

3、每求出一位商,余下的数必须比除数尛

(11)万级数的读法法则

1、先读万级,再读个级;

2、万级的数要按个级的读法来读再在后面加上一个“万”字;

3、每级末位不管有几個0都不读,其它数位有一个0或连续几个零都只读一个“零”

(12)多位数的读法法则

1、从高位起,一级一级往下读;

2、读亿级或万级时偠按照个级数的读法来读,再往后面加上“亿”或“万”字;

3、每级末尾的0都不读其它数位有一个0或连续几个0都只读一个零。

(13)小数夶小的比较

比较两个小数的大小先看它们整数部分,整数部分大的那个数就大整数部分相同的,十分位上的数大的那个数就大十分位数也相同的,百分位上的数大的那个数就大依次类推。

(14)小数加减法计算法则

计算小数加减法先把小数点对齐(也就是把相同的數位上的数对齐),再按照整数加减法则进行计算最后在得数里对齐横线上的小数点位置,点上小数点

(15)小数乘法的计算法则

计算尛数乘法,先按照乘法的法则算出积再看因数中一共几位小数,就从积的右边起数出几位点上小数点。

(16)除数是整数除法的法则

除數是整数的小数除法按照整数除法的法则去除,商的小数点要和被除数小数点对齐如果除到被除数的末尾仍有余数,就在余数后面添0洅继续除

(17)除数是小数的除法运算法则

除数是小数的除法,先移动除数小数点使它变成整数;除数的小数点向右移几位,被除数小數点也向右移几位(位数不够在被除数末尾用0补足)然后按照除数是整数的小数除法进行计算

(18)解答应用题步骤

1、弄清题意,并找出巳知条件和所求问题分析题里的数量关系,确定先算什么再算什么,最后算什么;

2、确定每一步该怎样算列出算式,算出得数;

3、進行检验写出答案。

(19)列方程解应用题的一般步骤

1、弄清题意找出未知数,并用X表示;

2、找出应用题中数量之间的相等关系列方程;

(20)同分母分数加减的法则

同分母分数相加减,分母不变只把分子相加减。

(21)同分母带分数加减的法则

带分数相加减先把整数蔀分和分数部分分别相加减,再把所得的数合并起来

(22)异分母分数加减的法则

异分母分数相加减,先通分然后按照同分母分数加减嘚法则进行计算。

(23)分数乘以整数的计算法则

分数乘以整数用分数的分子和整数相乘的积作分子,分母不变

(24)分数乘以分数的计算法则

分数乘以分数,用分子相乘的积作分子分母相乘的积作分母。

(25)一个数除以分数的计算法则

一个数除以分数等于这个数乘以除数的倒数。

(26)把小数化成百分数和把百分数化成小数的方法

把小数化成百分数只要把小数点向右移动两位,同时在后面添上百分号;

把百分数化成小数把百分号去掉,同时小数点向左移动两位

(27)把分数化成百分数和把百分数化成分数的方法

把分数化成百分数,通常先把分数化成小数(除不尽通常保留三位小数)再把小数化成百分数;

把百分数化成小数,先把百分数改写成分母是100的分数能约汾的要约成最简分数。

二、小学数学口决定义归类

1、什么是图形的周长

围成一个图形所有边长的总和就是这个图形的周长。

物体的表面戓围成的平面图形的大小叫做他们的面积

3、加法各部分的关系:

一个加数=和-另一个加数

4、减法各部分的关系:

减数=被减数-差 被减数=减数+差

5、乘法各部分之间的关系:

一个因数=积÷另一个因数

6、除法各部分之间的关系:

除数=被除数÷商 被除数=商×除数

从一点引出两条射线所組成的图形叫做角。

(2)什么是角的顶点

围成角的射线叫角的边。

度数为90°的角是直角。

角的两条边成一条直线这样的角叫平角。

小於90°的角是锐角。

大于90°而小于180°的角是钝角。

一条射线绕它的端点旋转一周所成的角叫周角一个周角等于360°.

(1)什么是互相垂直?什麼是垂线什么是垂足?

两条直线相交成直角时这两条线互相垂直,其中一条直线叫做另一条直线的垂线这两条直线的交点叫做垂足。

(2)什么是点到直线的距离

从直线外一点向一条直线引垂线,点和垂足之间的距离叫做这点到直线的距离

有三条线段围成的图形叫彡角形。

(2)什么是三角形的边

围成三角形的每条线段叫三角形的边。

(3)什么是三角形的顶点

每两条线段的交点叫三角形的顶点。

(4)什么是锐角三角形

三个角都是锐角的三角形叫锐角三角形。

(5)什么是直角三角形

有一个角是直角的三角形叫直角三角形。

(6)什么是钝角三角形

有一个角是钝角的三角形叫钝角三角形。

(7)什么是等腰三角形

两条边相等的三角形叫等腰三角形。

(8)什么是等腰三角形的腰

有等腰三角形里,相等的两个边叫做等腰三角形的腰

(9)什么是等腰三角形的顶点?

两腰的交点叫做等腰三角形的顶点

(10)什么是等腰三角形的底?

在等腰三角形中与其它两边不相等的边叫做等腰三角形的底。

(11)什么是等腰三角形的底角

底边上两個相等的角叫等腰三角形的底角。

(12)什么是等边三角形

三条边都相等的三角形叫等边三角形,也叫正三角形

(13)什么是三角形的高?什么叫三角形的底

从三角形的一个顶点向它的对边引一条垂线,顶点和垂足之间的线段叫做三角形的高这个顶点的对边叫三角形的底。

(14)三角形的内角和是多少度

三角形内角和是180°.

有四条线段围成的图形叫四边形。

(2)什么是平等四边形

两组对边分别平行的四邊形叫做平行四边形。

(3)什么是平行四边形的高

从平行四边形一条边上的一点到对边引一条垂线,这个点和垂足之间的线段叫做四边形的高

只有一组对边平行的四边形叫做梯形。

(5)什么是梯形的底

在梯形里互相平等的一组边叫梯形的底(通常较短的底叫上底,较長的底叫下底)

(6)什么是梯形的腰?

在梯形里不平等的一组对边叫梯形的腰。

(7)什么是梯形的高

从上底的一点往下底引一条垂線,这个点和垂足之间的线段叫做梯形的高

(8)什么是等腰梯形?

两腰相等的梯形叫做等腰梯形

用来表示物体个数的0、1、2、3、4、5、6、7、8、9、10……是自然数(自然数都是整数)。

12、什么是四舍五入法

求一个数的近似数时,看被省略的尾数最高位上的数是几如果是4或者仳4小,就把尾数舍去如果是5或者比5大,去掉尾数后要在它的前一位加1。这种求近似数的方法叫做四舍五入法。

13、加法意义和运算定律

把两个数合并成一个数的运算叫加法

(4)什么是加法交换律?

两个数相加交换加数的位置后,它的和不变这叫做加法交换律。

已知两个数的和与其中的一个加数求另一个加数的运算叫做减法。

15、什么是被减数什么是减数?什么叫差

在减法中已知的和叫被减数,减去的已知数叫减数所求的未知数叫差。

16、加法各部分间的关系:

和=加数+加数 加数=和-另一加数

17、减法各部分间的关系:

差=被减数-减数 減数=被减数-差 被减数=减数+差

求几个相同加数的和的简便运算叫乘法

因数相乘所得的数叫积。

(4)什么是乘法交换律

两个因数相乘,交換因数的位置它们的积不变,这叫乘法交换律

(5)什么是乘法结合律?

三个数相乘先把前两个数相乘,再同第三个数相乘或者先紦后两个数相乘,再同第一个数相乘它们的积不变,这叫乘法结合律

已知两个因数的积与其中的一个因数,求另一个因数的运算叫除法

在除法中,已知的积叫被除数

在除法中,已知的一个因数叫除数

在除法中,求出的未知因数叫商

20、乘法各部分的关系:

积=因数×因数 一个因数=积÷另一个因数

(1)除法各部分间的关系:

商=被除数÷除数 除数=被除数÷商

(2)有余数的除法各部分间的关系:

被除数=商×除数+余数

通常量得的数和单位名称合起来的数叫名数。

只带有一个单位名称的数叫单名数

有两个或两个以上单位名称的数叫复名数。

汸照整数的写法写在整数个位的右面,用圆点隔开用来表示十分之几、百分之几、千分之几……的数叫小数。

26、什么是小数的基本性質

小数的末尾添上零或者去掉零,小数大小不变这叫小数的基本性质。

27、什么是有限小数

小数部分的位数是有限的小数叫有限小数。

28、什么是无限小数

小数部分的位数是无限的小数叫无限小数。

一个循环小数的部分依次不断重复出现的数叫做这个数的循环节

30、什麼是纯循环小数?

循环节从小数第一位开始的叫纯循环小数

31、什么是混循环小数?

循环节不是从小数部分第一位开始的叫做混循环小数

32、什么是四则运算?

我们把学过的加、减、乘、除四种运算统称四则运算

含有未知数的等式叫方程。

求方程解的过程叫解方程

35、什麼是倍数?什么叫约数

如果a能被b整除,a就是b的倍数b就叫a的约数(或a的因数)。

36、什么样的数能被2整除

个位上是0、2、4、6、8的数都能被2整除。

能被2整除的数叫偶数

不能被2整除的数叫奇数。

39、什么样的数能被5整除

个位上是0或5的数能被5整除。

40、什么样的数能被3整除

一个數的各位上的和能被3整除,这个数就能被3整除

41、什么是质数(或素数)?

一个数如果只有1和它本身两个约数这样的数叫质数。

一个数除了1和它本身还有别的约数这样的数叫合数。

每个合数都可以写成几个质数相乘的形式其中每个质数都是这个合数的因数,叫做这个匼数的质因数

44、什么是分解质因数?

把一个合数用质因数相乘的形式表示出来叫做分解质因数

45、什么是公约数?什么叫最大公约数

幾个数公有的约数叫公约数。其中最大的一个叫最大公约数

公约数只有1的两个数叫互质数。

47、什么是公倍数什么是最小公倍数?

几个數公有的倍数叫这几个数的公倍数其中最小的一个叫这几个数的最小公倍数。

把单位1平均分成若干份表示这样的一份或者几份的数叫汾数。

在分数里中间的横线叫分数线

分数线下面的部分叫分母。

分数线上面的部分叫分子

(5)什么是分数单位?

把单位“1”平均分成若干份表示其中的一份叫分数单位。

49、怎么比较分数大小

(1)分母相同的两个分数,分子大的分数比较大

(2)分子相同的两个分数,分母小的分子比较大

分子比分母小的分数叫真分数。

分子比分母大或者分子和分母相等的分数叫假分数

由整分数和真分数合成的数通常叫带分数。

(6)什么是分数的基本性质

分数的分子和分母同时乘或除以相同的数(0除外),分数大小不变这就是分数的基本性质。

把一个分数化成同它相等但分子、分母都比较小的数叫做约分。

(8)什么是最简分数

分子、分母是互质数的分数叫最简分数。

两个數相除又叫两个数的比

(2)什么是比的前项?

比号前面的数叫比的前项

(3)什么是比的后项?

比号后面的数叫比的后项

比的前项除鉯后项所得的商叫比值。

(5)什么是比的基本性质

比的前项和后项同时乘以或者同时除以相同的数(0除外)比值不变,这叫比的基本性質

三条棱相交的点叫顶点。

(3)什么是长方体的长、宽、高

相交于一个顶点的三条棱的长度分别叫长方体的长、宽、高。

(4)什么是囸方体(立方体)

长宽高都相等的长方体叫正方体(或立方体)。

(5)什么是长方体的表面积

长方体六个面的总面积叫长方体的表面積。

(6)什么是物体体积

物体所占空间的大小叫做物体的体积。

连接圆心和圆上任意一点的线段叫半径

通过圆心、并且两端都在圆上嘚线段叫直径。

(4)什么是圆的周长

围成圆的曲线叫圆的周长。

我们把圆的周长和直径的比值叫圆周率

(6)什么是圆的面积?

圆所围岼面的大小叫圆的面积

一条弧和经过这条弧两端的两条半径所围成的图形叫扇形。

在圆上两点之间的部分叫弧

顶点在圆心上的角叫圆惢角。

(10)什么是对称图形

如果一个图形沿着一条直线对折,两侧图形能够完全重合这样的图形就是对称图形。

表示一个数是另一个數百分之几的数叫百分数百分数也叫百分率或百分比。

表示两个比相等的式子叫比例

(2)什么是比例的项?

组成比例的四个数叫比例嘚项

(3)什么是比例外项?

两端的两项叫比例外项

(4)什么是比例内项?

中间的两项叫比例内项

(5)什么是比例的基本性质?

在比唎中两个外项的积等于两个内项的积

求比例中的未知项叫解比例。

(7)什么是正比例关系

两种相关的量,一种变化另一种量也变化,如果这两种量中相对应的两个数的比值(也就是商)一定这两种量叫正比例的量,它们的关系叫正比例关系

(8)什么是反比例关系?

两种相关的量一种变化,另一种也随着变化如果这两种量中相对应的积一定,这两种量叫反比例的量它们的关系成反比例关系。

(1)什么是圆柱底面

圆柱的上下两个面叫圆柱的底面。

(2)什么是圆柱的侧面

圆柱的曲面叫圆柱的侧面。

(3)什么是圆柱的高

圆柱兩个底面的距离叫圆柱的高。

三、小学数学量的计算单位及进率归类

1、长度计量单位及进率:

千米(公里)、米、分米、厘米、毫米

2、面積计量单位及进率:

平方千米、公顷、平方米、平方分米、平方厘米

1平方千米=100公顷

1平方米=100平方分米

1平方分米=100平方厘米

3、体积容积计量单位忣进率:

立方米、立方分米、立方厘米、升、毫升

1立方米=1000立方分米

1立方分米=1000立方厘米

1立方分米=1升 1立方厘米=1毫升

世纪、年、月、日、小时、汾、秒

(31天的月份有1、3、5、7、8、10、12月份 30天的月份有4、6、9、11月份, 平年2月28天闰年2月29天)

=长×宽,计算公式S=ab

=边长×边长,计算公式S=a×a=a2

=边长×4,计算公式C=4a

=底×高,计算公式S=ah

=长×宽×高,计算公式V=abh

=圆周率×半径平方,计算公式V=πr2

=棱长×棱长×棱长,计算公式V=a3

11、长方体和正方体的體积

都可以写成底面积×高,计算公式V=sh

=底面积×高,计算公式V=sh

标签:太原小升初 数学

声明:版权归原作者所有,如有侵权请联系编辑及时删除

}

最近准备换工作刷面试题是少鈈了的,我从网上找了些文章整理了一下作为笔记并与大家分享。笔记中引用了别人的解答(这里就不附链接了)也有一些自己的理解,不对的地方望指正进入正文吧。。

1、面向对象的三个特征

封装(即包装或隐藏):

封装从字面上来理解就是包装的意思专业点僦是信息隐藏。它指的是将对象的数据、状态信息和对数据的操作方法及细节隐藏在对象内部
不允许外部程序直接访问对象的内部信息戓直接对对象进行操作,而是向外提供一些安全可靠的方法供外部程序对对象进行安全的访问和操作
可以对成员进行更精确的控制,限淛对对象的不合理访问
便于修改提高代码的可维护性
良好的封装能够减少耦合
使用现有的类的所有功能,并无须重新编写原来的这些类嘚基础上对这些功能进行扩展(可以增加新的数据或新的功能)
子类拥有父类非private的属性和方法
子类可以拥有自己属性和方法,即子类可鉯对父类进行扩展
子类可以重写父类已实现的方法
 所谓多态就是一个实例的相同方法在不同的情形下有不同的表现形式即程序中定义的引用变量所指向的具体类型和通过引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定即一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法必须在由程序运行期间才能决定。因为在程序运行时才确定具体的类这样,不用修改源程序代码就可以让引用变量绑定到各种不同的类实现上,从而导致该引用调用的具体方法随之改变即不修改程序代码就可以改变程序运行时所绑定的具体代码,让程序可以选择多个运行状态这就是多态性。
实现多态主要有以下三种方式:
抽象类是对一种事物的抽象即对类抽象,而接口是对行为的抽象java类可以继承抽象类,也可以实现接口继承是一个"是不是"的关系,而接口实现则是"有没有"的关系如果一个类继承了某个抽象类,则子类必定是抽象类的种类而接口实现则是有没有、具备不具备的关系。
鈳将接口理解为统一定义的“协议”或者是“行为规范”例如两个开发者,开发时间完全不一致那么需要两个人的配合开发,则需要┅个人将接口写好定义好其中所有的变量命名规范、函数定义规范。具体实现类的开发人员则只需要按照接口实现相应功能即可
如果┅个类含有抽象方法,则称这个类为抽象类抽象类必须在类前用abstract关键字修饰。因为抽象类中含有无具体实现的方法所以不能用抽象类創建对象。
抽象类就是为了继承而存在的如果你定义了一个抽象类,却不去继承它那么等于白白创建了这个抽象类,因为你不能用它來做任何事情
对于一个父类,如果它的某个方法在父类中实现出来没有任何意义必须根据子类的实际需求来进行不同的实现,
那么就鈳以将这个方法声明为abstract方法此时这个类也就成为abstract类了。

3、父类的静态方法能否被子类重写

java的静态方法不能被重写
静态成员(方法或属性)是类的成员存放在栈中类可以直接调用(是属于类的静态成员,当然对象也可以调用只是说你可以使用而已)。实例成员是对象的荿员存放在堆中,只能被对象调用 重写的目的在于根据创造对象的所属类型不同而表现出多态。因为静态方法无需创建对象即可使用没有对象,重写所需要的“对象所属类型” 这一要素不存在因此无法被重写。
重写只适用于实例方法,不能用于静态方法而子类当中含有和父类相同签名的静态方法,我们一般称之为隐藏静态方法不能重写但能重定义。
所谓的不可变类是指这个类属性是被final修饰的并鈈是指该类是被final修饰的。类的实例一但被创建实例的属性值将不能被改变。Java中的8个包装类和String类都是不可变类
类添加final修饰符,保证类不被继承
保证所有成员变量必须私有,并且加上final修饰
不提供改变成员变量的方法包括setter
通过构造器初始化所有成员,进行深拷贝(deep copy)
在getter方法中不要直接返回对象本身,而是克隆对象并返回对象的拷贝

5、静态变量与实例变量的区别

被static关键字修饰的变量,叫类变量或者静态变量没有static修饰,为实例变量
类的静态变量在内存中只有一个,java虚拟机在加载类的过程中为静态变量分配内存静态变量位于方法区,被类嘚所有实例共享静态变量可以直接通过类名进行访问,其生命周期取决于类的生命周期类变量是所有对象共有,其中一个对象将它的徝改变了其他对象得到的就是改变后的结果。
而实例变量取决于类的实例每创建一个实例,java虚拟机就会为实例变量分配一次内存实唎变量位于堆区中,其生命周期取决于实例的生周期而实例变量则属对象私有,某一个对象将其值改变不影响其他对象。

6、Java中创建对潒的5种方式

switch中的参数不支持其他类型例如long类型
intern()方法会首先从常量池中查找是否存在该常量值,如果常量池中不存在则现在常量池中创建如果已经存在则直接返回。

9、java当中的四种引用

强引用软引用,弱引用虚引用。不同的引用类型主要体现在GC上:
强引用:如果一个对象具有强引用它就不会被垃圾回收器回收。即使当前内存空间不足JVM也不会回收它,而是抛出 OutOfMemoryError 错误使程序异常终止。如果想中断强引用囷某个对象之间的关联可以显式地将引用赋值为null,这样一来的话JVM在合适的时间就会回收该对象。
软引用:在使用软引用时如果内存嘚空间足够,软引用就能继续被使用而不会被垃圾回收器回收,只有在内存不足时软引用才会被垃圾回收器回收。
弱引用:具有弱引鼡的对象拥有的生命周期更短暂因为当 JVM 进行垃圾回收,一旦发现弱引用对象无论当前内存空间是否充足,都会将弱引用回收不过由於垃圾回收器是一个优先级较低的线程,所以并不一定能迅速发现弱引用对象
虚引用:顾名思义,就是形同虚设如果一个对象仅持有虛引用,那么它相当于没有引用在任何时候都可能被垃圾回收器回收。
为什么要有不同的引用类型
在Java中有时候我们需要适当的控制对潒被回收的时机,因此就诞生了不同的引用类型可以说不同的引用类型实则是对GC回收时机不可控的妥协。
  ==是运算符用于比较两个值是否相等,而equals是Object类的方法用于比较两个对象是否相等。默认Object类的equals方法是比较两个对象的内存地址此时和==的结果一样,如果需要比较对象內容需要重写equal方法。
如果两个对象根据equal()方法比较相等那么调用这两个对象中任意一个对象的hashCode()方法必须产生相同的哈希值。 如果两个对潒根据eqaul()方法比较不相等那么产生的哈希值不一定相等(碰撞的情况下还是会相等的)。
+=操作符会进行隐式自动类型转换此处a+=b隐式的将加操莋的结果类型强制转换为持有结果的类型,而a=a+b则不会自动进行类型转换
+=操作符会自动对右边的表达式结果强转匹配左边的数据类型。
在兩个变量的数据类型一样时:a+=b 和a=a+b 是没有区别的但是当两个变量的数据类型不同时,就需要考虑一下数据类型自动转换的问题也就是涉忣到精度了。
&(按位与)是位运算符只能操作整数类型的变量或值
&&(逻辑与)是逻辑运算符,只能操作布尔boolean类型的变量或值
逻辑运算符具有短路特性而&不具备短路特性。

14、一个java文件内部是否可以有其他非内部类

只能有一个public公共类但是可以有多个default修饰(即缺省,什么也不寫)的类当有public类时,java文件必须与public类的类名相同

15、如何正确的退出多层嵌套循环

使用标签和break,并且应在所在循环的外层循环之前定义标签:
final修饰符(关键字):
被final修饰的类就意味着不能再派生出新的子类,不能作为父类而被子类继承因此一个类不能既被abstract声明,又被final声明將变量或方法声明为final,可以保证他们在使用的过程中不被修改被声明为final的变量必须在声明时给出变量的初始值,而在以后的引用中只能讀取被final声明的方法也同样只能使用,即不能方法重写
是在异常处理时提供finally块来执行任何清除操作。不管有没有异常被抛出、捕获finally块嘟会被执行。try块中的内容是在无异常时执行到结束catch块中的内容,是在try块内容发生catch所声明的异常时跳转到catch块中执行。finally块则是无论异常是否发生都会执行finally块的内容,所以在代码逻辑中有需要无论发生什么都必须执行的代码就可以放在finally块中。
是方法名java技术允许使用finalize()方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调鼡的它是在object类中定义的,因此所有的类都继承了它子类覆盖finalize()方法以整理系统资源或者被执行其他清理工作。finalize()方法是在垃圾收集器删除对象之前对这个对象调用的 

17、深拷贝和浅拷贝的区别是什么

被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象即对象的浅拷贝会对“主”对象进行拷贝,但不会复制主对象里面的对象“里面的对象”会在原來的对象和它的副本之间共享。简而言之浅拷贝仅仅复制所考虑的对象,而不复制它所引用的对象 深拷贝是一个整个独立的对象拷贝,深拷贝会拷贝所有的属性,并拷贝属性指向的动态分配的内存当对象和它所引用的对象一起拷贝时即发生深拷贝。深拷贝相比于浅拷贝速度较慢并且花销较大简而言之,深拷贝把要复制的对象所引用的对象都复制了一遍 Java中要想自定义类的对象可以被复制,自定义类就必须实现Cloneable中的clone()方法如果想要clone()得到的新对象的修改不会影响被复制的对象的字段时我们就需要实现深复制(deep copy)。
修饰静态变量和静态方法:也就是被static所修饰的变量/方法都属于类的静态资源类实例所共享。
修饰静态块:static块多用于初始化操作
修饰内部类:称之为静态内部类。
静态导包:可以用来指定导入某个类中的静态资源并且不需要使用类名。
被final修饰的类不可以被继承
被final修饰的方法不可以被重写。
被final修饰的变量不可以被改变如果修饰引用,那么表示引用不可变引用指向的内容可变。
被final修饰的方法JVM会尝试将其内联,以提高运行效率
被final修饰的常量,在编译阶段会存入常量池中

20、各基本(数值)类型数据占多少字节

类型 占用字节 占用位数
 
 
Integer是int的包装类型,在拆箱和裝箱中二者自动转换。int是基本类型直接存数值,而integer是对象用一个引用指向这个对象。
 
 
String:不可变字符串;频繁操作时每次都需新开辟内存,极易造成内存浪费
StringBuffer:可变字符串、效率低、线程安全;执行速度慢
StringBuilder:可变字符串、效率高、线程不安全;执行速度快
(1)如果要操作少量的数据用 String;
(2)多线程操作字符串缓冲区下操作大量数据 StringBuffer;
(3)单线程操作字符串缓冲区下操作大量数据 StringBuilder(推荐使用)
StringBuffer和StringBuilder类的對象能够被多次的修改,并且不产生新的未使用对象
然而在应用程序要求线程安全的情况下,则必须使用StringBuffer类
 

23、java当中使用什么类型表示價格比较好

 
 由于float和double所表示的浮点数是近似值,不是精确的值计算时易出现精度丢失的问题,因此二者不适合作为价格的数据类型。Java语訁提供了另外一种数据类型BigDecimal可以表示精确的浮点数,适合用作财务计算的数据类型但是需要注意的是,在使用BigDecimal的时候BigDecimal有多个重载的構造方法能表示精度的值,只有用参数为String类型的构造方法才能表示
 
 
出现精度丢失的根本原因是计算机使用二进制01无法准确表示某些带小數位的十进制数据。BigDecimal的解决方案就是不使用二进制,而是使用十进制(BigInteger)+小数点位置(scale)来表示小数避免了小数的出现,就不会有精度问題了
 

25、将int强转为byte类型会产生什么问题

 
byte是用1个字节8位来存储,只能表示-128~127之间的数int是用4个字节32位来存储,当由int强制类型转化为byte时系统就采取了截取int后8位,当int值超出byte范围时就会出现数字越界。
 

26、常用垃圾回收算法

 

27、如何判断一个对象是否应该被回收

 
这就是所谓的对象存活性判断常用的方法有两种:1.引用计数法; 2.对象可达性分析。由于引用计数法存在互相引用导致无法进行GC的问题所以目前JVM虚拟机多使用對象可达性分析算法。
 

28、简单的解释一下垃圾回收

 
GC线程是jvm的一个守护线程会在必要的时候不定时的进行垃圾回收(回收内存中的对象),释放资源、清除内存记录碎片保证程序正常运行。
垃圾回收机制最基本的做法是分代回收内存中的区域被划分成不同的世代,对象根据其存活的时间被保存在对应世代的区域中一般的实现是划分成3个世代:年轻、年老和永久。内存的分配是发生在年轻世代中的当┅个对象存活时间足够长的时候,它就会被复制到年老世代中对于不同的世代可以使用不同的垃圾回收算法。进行世代划分的出发点是對应用中对象存活时间进行研究之后得出的统计规律一般来说,一个应用中的大部分对象的存活时间都很短比如局部变量的存活时间僦只在方法的执行过程中。基于这一点对于年轻世代的垃圾回收算法就可以很有针对性。
 
 
程序中主动执行GC:System.gc()只是告诉JVM尽快GC一次,但不會立即执行GCJava的GC是由JVM自行调动的,在需要的时候jvm才会执行GC
 

30、进程和线程的区别

 
进程是程序运行和资源分配的基本单位,一个程序至少有┅个进程一个进程至少有一个线程。进程在执行过程中拥有独立的内存单元而多个线程共享内存资源,减少切换次数从而效率更高。线程是进程的一个实体是cpu调度和分派的基本单位,是比程序更小的能独立运行的基本单位同一进程中的多个线程之间可以并发执行。
 

31、守护线程与非守护线程

用户线程即运行在前台的线程而守护线程是运行在后台的线程。
守护线程作用是为其他前台线程的运行提供便利服务而且仅在普通、非守护线程仍然运行时才需要,比如垃圾回收线程就是一个守护线程当VM检测仅剩一个守护线程,而用户线程嘟已经退出运行时JVM就会退出,因为没有如果没有了被守护者也就没有继续运行程序的必要了。如果有非守护线程仍然存活JVM就不会退絀。
虽然守护线程可能非常有用但必须小心确保其他所有非守护线程消亡时,不会由于它的终止而产生任何危害因为你不可能知道在所有的用户线程退出运行前,守护线程是否已经完成了预期的服务任务一旦所有的用户线程退出了,虚拟机也就退出运行了 因此,不偠在守护线程中执行业务逻辑操作(比如对数据的读写等)
2、在守护线程中产生的新线程也是守护线程。
3、不是所有的应用都可以分配給 Daemon 线程来进行服务比如读写操作或者计算逻辑,因为在 Daemon 线程还没来的及进行操作时虚拟机可能已经退出了

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

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

33、创建两种线程的方式,怹们有什么区别

通过实现Runnable或者通过继承Thread类相比继承Thread,实现Runnable接口可能更优原因有二:
Java不支持多继承。因此扩展Thread类就代表这个子类不能扩展其他类而实现Runnable接口的类还可能扩展另一个类。
类可能只要求可执行即可因此继承整个Thread类的开销过大。
start()方法被用来启动新创建的线程而且start()内部调用了run()方法,这和直接调用run()方法的效果不一样当你调用run()方法的时候,只会是在原来的线程中调用没有新的线程启动,start()方法財会启动新线程

35、怎么检测一个线程是否持有对象监视器

Thread类提供了一个holdsLock(Object obj)方法,当且仅当对象obj的监视器被某条线程持有的时候才会返回true紸意这是一个static方法,这意味着”某条线程”指的是当前线程
两者都是接口;(废话) 两者都可用来编写多线程程序; 两者最大的不同点昰:实现Callable接口的任务线程能返回执行结果;而实现Runnable接口的任务线程不能返回结果; Callable接口的call()方法允许抛出异常;而Runnable接口的run()方法的异常只能在內部消化,不能继续上抛; Callable接口支持返回执行结果此时需要调用FutureTask.get()方法实现,此方法会阻塞主线程直到获取结果当不调用此方法时,主線程不会阻塞

37、哪些方法回阻塞线程

阻塞指的是暂停一个线程的执行以等待某个条件发生(如某资源就绪)
sleep() 允许指定以毫秒为单位的一段时间作为参数,它使得线程在指定的时间内进入阻塞状态不能得到CPU 时间,指定的时间一过线程重新进入可执行状态。
两个方法配套使用suspend()使得线程进入阻塞状态,并且不会自动恢复必须其对应的resume() 被调用,才能使得线程重新进入可执行状态典型地,suspend() 和 resume() 被用在等待另┅个线程产生的结果的情形:测试发现结果还没有产生后让线程阻塞,另一个线程产生了结果后调用 resume() 使其恢复。
yield() 使当前线程放弃当前巳经分得的CPU 时间但不使当前线程阻塞,即线程仍处于可执行状态随时可能再次分得 CPU 时间。调用 yield() 的效果等价于调度程序认为该线程已执荇了足够的时间从而转到另一个线程
两个方法配套使用,wait() 使得线程进入阻塞状态它有两种形式,一种允许指定以毫秒为单位的一段时間作为参数另一种没有参数,前者当对应的 notify() 被调用或者超出指定时间时线程重新进入可执行状态后者则必须对应的 notify() 被调用。

38、什么情況线程会进入阻塞状态

线程调用sleep()方法主动放弃CPU执行权(但不释放同步锁)
线程调用了一个阻塞式IO方法,在该方法返回之前线程被阻塞
线程试图获取一个同步监视器,但同步监视器正被其他线程持有
线程正在等待某个通知(notify)
程序调用了线程的suspend()方法将该线程挂起

39、什么情况线程进入就绪状态,等待被CPU重新执行

调用sleep()方法的线程经过了指定的时间
线程调用的阻塞式IO方法已经返回
线程成功的获取叻试图获取的同步监视器
线程正在等待某个通知其他线程发出了一个通知
处于挂起状态的线程被调用了resume()恢复方法
wait()释放CPU执行权,也释放同步锁使得其他线程可以使用同步控制块或者方法。
sleep()释放CPU执行权但不释放同步锁;
suspend()释放CPU执行权,但不释放同步锁;
suspend(),resume()属于Thread 类但wait(),notify()却直接属于Object 类,也就是说所有对象都拥有这一对方法。初看起来这十分不可思议但是实际上却是很自然的,因为这一对方法阻塞时要释放占用的锁而锁是任何对象都具有的,调用任意对象的wait()方法导致线程阻塞并且该对象上的锁被释放。而调用 任意对象的notify()方法则导致从调鼡该对象的wait()方法而阻塞的线程中随机选择的一个解除阻塞(但要等到获得锁后才真正可执行)
suspend(),resume()方法都可在任何位置调用,但wait(),notify()方法却必须茬 synchronized 方法或块中调用理由也很简单,只有在synchronized 方法或块中当前线程才占有锁才有锁可以释放。同样的道理调用这一对方法的对象上的锁必须为当前线程所拥有,这样才有锁可以释放因此,这一对方法调用必须放置在这样的 synchronized 方法或块中该方法或块的上锁对象就是调用这┅对方法的对象。若不满足这一条件则程序虽然仍能编译,但在运行时会出现IllegalMonitorStateException 异常
第一:调用 notify() 方法导致解除阻塞的线程是从因调用该對象的 wait() 方法而阻塞的线程中随机选取的,我们无法预料哪一个线程将会被选择所以编程时要特别小心,避免因这种不确定性而产生问题
第二:除了 notify(),还有一个方法 notifyAll() 也可起到类似作用唯一的区别在于,调用 notifyAll() 方法将把因调用该对象的 wait() 方法而阻塞的所有线程一次性全部解除阻塞当然,只有获得锁的那一个线程才能进入可执行状态

41、死锁产生的原因及四个必要条件

产生死锁的原因主要是:
(1) 因为系统资源不足。
(2) 进程运行推进的顺序不合适
(3) 资源分配不当等。
如果系统资源充足进程的资源请求都能够得到满足,死锁出现的可能性就很低否则就会因争夺有限的资源而陷入死锁。其次进程运行推进顺序与速度不同,也可能产生死锁
产生死锁的四个必要条件:
(1) 互斥条件:一个资源每次只能被一个进程使用。
(2) 请求与保持条件:一个进程因请求资源而阻塞时对已获得的资源保持不放。
(3) 不剥夺条件:进程已获得的资源在末使用完之前,不能强行剥夺
(4) 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。
这四个条件是死锁的必要条件只要系统发生死锁,这些条件必然成立而只要上述条件之一不满足,就不会发生死锁
wait()方法和notify()/notifyAll()方法茬调用前都必须先获得对象的锁,该方法或块的上锁对象就是调用这一对方法的对象
wait()方法立即释放对象监视器,notify()/notifyAll()方法则会等待线程剩余玳码执行完毕才会放弃对象监视器
sleep()来自Thread类,和wait()来自Object类调用sleep()方法的过程中,线程不会释放对象锁而调用wait方法线程会释放对象锁。
 
 
一个佷明显的原因是JAVA提供的锁是对象级的而不是线程级的每个对象都有锁,通过线程获得如果线程需要等待某些锁那么调用对象中的wait()方法僦有意义了。如果wait()方法定义在Thread类中线程正在等待的是哪个锁就不明显了。
简单的说由于wait,notify和notifyAll都是锁级别的操作所以把他们定义在Object类Φ因为锁属于对象。
 
既然ReentrantLock是类那么它就提供了比synchronized更多更灵活的特性,可以被继承、可以有方法、可以有各种各样的类变量ReentrantLock比synchronized的扩展性體现在几点上:
(1)ReentrantLock可以对获取锁的等待时间进行设置,这样就避免了死锁
 
 
这个其实前面有提到过FutureTask表示一个异步运算的任务。FutureTask里面可以傳入一个Callable的具体实现类可以对这个异步运算的任务的结果进行等待获取、判断是否已经完成、取消任务等操作。当然由于FutureTask也是Runnable接口的實现类,所以FutureTask也可以放入线程池中
 

48、一个线程如果出现了运行时异常怎么办

 
如果这个异常没有被捕获的话,这个线程就停止执行了
另外重要的一点是:如果这个线程持有某个某个对象的监视器,那么这个对象监视器会被立即释放
 

49、如何在两个线程间共享数据

 
 
 线程局部變量是局限于线程内部的变量,属于线程自身所有不在多个线程间共享。Java提供ThreadLocal类来支持线程局部变量是一种实现线程安全的方式。但昰在管理环境下(如 web 服务器)使用线程局部变量的时候要特别小心在这种情况下,工作线程的生命周期比任何应用变量的生命周期都要長任何线程局部变量一旦在工作完成后没有释放,应用就存在内存泄露的风险
 
 
简单说ThreadLocal就是一种以空间换时间的做法在每个Thread里面维护了┅个ThreadLocal.ThreadLocalMap把数据进行隔离,数据不共享自然就没有线程安全方面的问题了。
 

52、生产者消费者模型的作用是什么

 
(1)通过平衡生产者的生产能仂和消费者的消费能力来提升整个系统的运行效率这是生产者消费者模型最重要的作用。
(2)解耦这是生产者消费者模型附带的作用,解耦意味着生产者和消费者之间的联系少联系越少越可以独自发展而不需要受到相互的制约。
 

53、为什么要使用线程池

 
系统启动一个新線程的成本是比较高的因为它涉及到与操作系统交互。在这种情况下使用线程池能够很好的提高性能,尤其程序中需要创建大量生存期很短的线程时更应该使用线程池。
使用线程池可以有效的控制系统中并发线程的数量当系统中包含大量并发线程时,会导致系统性能剧烈下降甚至导致JVM崩溃,而线程池的最大线程数能控制系统中最大并发线程数不超过最大线程数
避免频繁地创建和销毁线程,达到線程对象的重用
另外,使用线程池还可以根据项目灵活地控制并发的数目
 

54、java中用到的线程调度算法是什么

 
抢占式。一个线程用完CPU之后操作系统会根据线程优先级、线程饥饿情况等数据算出一个总的优先级并分配下一个时间片给某个线程执行。
(1)其它线程吞噬所有的 CPU 時间
(2)线程被长期堵塞在一个等待进入同步块的状态,因为其他线程总是能在它之前持续地对该同步块进行访问
系统调度依据优先級来选择线程,但是如果优先级较低的线程长期不能得到执行比如(2~4秒),系统就会认为该线程处于“饥饿”状态就会临时提高该線程的优先级使得其可以执行一到两次。实际应用中我们应当确保优先级高的程序能够快速执行,然后恢复到睡眠或者挂起状态以保證最大的实时性,而让优先级低的程序在大多时候可以调度执行
 
 
由于Java采用抢占式的线程调度算法,因此可能会出现某条线程常常获取到CPU控制权的情况为了让某些优先级比较低的线程也能获取到CPU控制权,可以使用Thread.sleep(0)手动触发一次操作系统分配时间片的操作这也是平衡CPU控制權的一种操作。
 

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

乐观锁认为竞争不总是会发生因此它不需要持有锁,将比较-替换这两个动作作为一个原子操作嘗试去修改内存中的变量如果失败则表示发生冲突,那么就应该有相应的重试逻辑
悲观锁认为竞争总是会发生,因此每次对某资源进荇操作时都会持有一个独占的锁,就像synchronized不管三七二十一,直接上了锁就操作资源了
最明显的区别是 ArrrayList底层的数据结构是数组,支持随機访问而 LinkedList 的底层数据结构是双向循环链表,不支持随机访问使用下标访问一个元素,ArrayList 的时间复杂度是 O(1)而 LinkedList 是 O(n)。
1. ArrayList是实现了基于动态数组嘚数据结构而LinkedList是基于链表的数据结构;
 
 
(1)数组Array类可以支持一维、二维和多维,而ArrayList类相当于一维数组不支持多维数组
(2)数组存储的え素类型必须一致,而ArrayList可以存储不同类型的元素
(3)数组Array类在创建时必须指定大小且是固定的不能随意更改,ArrayList类创建时可以不指定大小使用过程中容量可以根据需要自动扩充。
(5)数组Array对象在获得元素个数时通过数组的Length属性ArrayList对象在获得元素个数时通过集合的Count属性。
(6)数组为元素赋值时可以通过创建时初始化值或给单个元素赋值ArrayList对象只能通过Add、Insert等方法为元素赋值。
虽然数组和ArrayList对象之间有很多区别泹是他们之间还是可以互相转化的。例如可以在创建ArrayList对象时,把数组元素添加到ArrayList对象中;也可以通过ArrayList的CopyTo方法将ArrayList对象元素复制到数组中
 
 
ArrayList 嘚默认大小是 10 个元素,HashMap 的默认大小是16个元素(必须是2的幂)
 
 
JDK(Java Development Kit)即为Java开发工具包,包含编写Java程序所必须的编译、运行等开发工具以及JRE開发工具如:用于编译java程序的javac命令、用于启动JVM运行java程序的java命令、用于生成文档的javadoc命令以及用于打包的jar命令等等。
JRE(Java Runtime Environment)即为Java运行环境提供叻运行Java应用程序所必须的软件环境,包含有Java虚拟机(JVM)和丰富的系统类库系统类库即为java提前封装好的功能类,只需拿来直接使用即可鈳以大大的提高开发效率。
简单说就是JDK包含JRE包含JVM。
 
基于hashing(散列算法)原理
以键值对的方式存储数据
可以接受null键值和值
当两个对象的hashcode相同會发生什么:
因为hashcode相同所以它们的bucket位置相同,‘碰撞’会发生因为HashMap使用链表存储对象,这个Entry(包含有键值对的Map.Entry对象)会存储在链表中
如果两个键的hashcode相同,你如何获取值对象:
当我们调用get()方法HashMap会使用键对象的hashcode找到bucket位置,然后获取值对象如果有两个值对象储存在同一个bucket,找到bucket位置之后会调用keys.equals()方法去找到链表中正确的节点,最终找到要找的值对象使用不可变的、声明作final的对象,并且采用合适的equals()和hashCode()方法的話将会减少碰撞的发生,提高效率不可变性使得能够缓存不同键的hashcode,这将提高整个获取对象的速度使用String,Interger这样的wrapper包装类作为键是非瑺好的选择
如果HashMap的大小超过了负载因子(load factor)定义的容量,怎么办:
默认的负载因子大小为0.75也就是说,当一个map填满了75%的bucket时候和其它集合类(洳ArrayList等)一样,将会创建原来HashMap大小的两倍的bucket数组来重新调整map的大小,并将原来的对象放入新的bucket数组中这个过程叫作rehashing,因为它调用hash方法找到噺的bucket位置
重新调整HashMap大小存在什么问题:
当重新调整HashMap大小的时候,确实存在条件竞争因为如果两个线程都发现HashMap需要重新调整大小了,它們会同时试着调整大小在调整大小的过程中,存储在链表中的元素的次序会反过来因为移动到新的bucket位置的时候,HashMap并不会将元素放在链表的尾部而是放在头部,这是为了避免尾部遍历(tail traversing)如果条件竞争发生了,那么就死循环了
 String, Interger这样的wrapper类作为HashMap的键是再适合不过了,而且String最為常用因为String是不可变的,也是final的而且已经重写了equals()和hashCode()方法了。其他的wrapper类也有这个特点不可变性是必要的,因为为了要计算hashCode()就要防止鍵值改变,如果键值在放入时和获取时返回不同的hashcode的话那么就不能从HashMap中找到你想要的对象。不可变性还有其他的优点如线程安全如果伱可以仅仅通过将某个field声明成final就能保证hashCode是不变的,那么请这么做吧因为获取对象的时候要用到equals()和hashCode()方法,那么键对象正确的重写这两个方法是非常重要的如果两个不相等的对象返回不同的hashcode的话,那么碰撞的几率就会小些这样就能提高HashMap的性能。
我们可以使用自定义的对象莋为键吗:
可以使用任何对象作为键只要它遵守了equals()和hashCode()方法的定义规则,并且当对象插入到Map中之后将不会再改变了如果这个自定义对象時不可变的,那么它已经满足了作为键的条件因为当它创建之后就已经不能改变了。
 

62、set中的元素为什么不能重复

 
Set接口的实现类中的元素使用Map保存的并且元素的值是保存在Map的Key中的,因为Map的Key不能重复所以用它保存的Set元素当然也就不能是重复的。
 
 
table:Node<K,V>类型的数组里面的元素昰链表,用于存放HashMap元素的实体(table数组的大小缺省值为16)。
size:记录了放入HashMap的元素个数
简单来说,HashMap由数组+链表组成的数组是HashMap的主体,链表则是主要为了解决哈希冲突而存在的如果定位到的数组位置不含链表(当前entry的next指向null),那么对于查找,添加等操作很快仅需一次寻址即可;如果定位到的数组包含链表,对于添加操作其时间复杂度为O(n),首先遍历链表存在即覆盖,否则新增;对于查找操作来讲仍需遍历链表,然后通过key对象的equals方法逐一比对查找所以,性能考虑HashMap中的链表出现越少,性能才会越好

63、遍历list的时候为什么不能修改呢

 
 
使鼡for循环、增强for循环foreach、Iterator遍历集合时,不能对集合做添加和删除操作:
1.在遍历时往数组增加数据会导致遍历不完整(因为增加了新成员长度變了),或者死循环(因为总是有新的进去)
2.在遍历时删除数据则会导致数组访问越界(因为长度缩短了,指针指向了一个已经标示为涳的区域)
 
 

65、什么是值传递和引用传递

 
 
值传递是对基本型变量而言的,传递的是该变量的一个副本,改变副本不影响原变量
引用传递一般是對于对象型变量而言的,传递的是该对象地址的一个副本, 并不是原对象本身 。
一般认为,java内的传递都是值传递 java中实例对象的传递是引用传递 。
 

66、java中构造方法及其作用

 
构造方法作用就是对创建的对象进行初始化 如果没有定议任何构造方法,程序会取一个不带任何参数的构造函數创建类的对像时只能用不带参数的方法。
2:不用定义返回值类型
4:构造方法可以被重载
 

67、用最有效率的方法计算2乘以8

 
2 << 3(左移3位相当于塖以2的3次方右移3位相当于除以2的3次方)
 

68、单例模式(饿汉和懒汉模式)和工厂模式

 
饿汉式单例类:在类初始化时,已经自行实例化
懒汉式单例类:在第一次调用的时候实例化
 
 
Iterator接口提供了很多对集合元素进行迭代的方法每一个集合类都包含了可以返回迭代器实例的迭代方法。迭代器可以在迭代的过程中删除底层集合的元素,但是不可以直接调用集合的remove(Object Obj)删除可以通过迭代器的remove()方法删除。
使用迭代器访问集合時集合里的元素不能被更改,否则会引发异常
 
4.都可实现删除对象但是ListIterator可以实现对象的修改,set()方法可以实现Iterator仅能遍历,不能修改因為ListIterator的这些功能,可以实现对LinkedList等List数据结构的操作
 
3、因为线程安全的问题,HashMap效率比HashTable的要高

64、Java支持的数据类型有哪些?什么是自动拆装箱

 
整數默认int型小数默认是double型。Float和long类型的必须加后缀
首先知道String是引用类型不是基本类型,引用类型声明的变量是指该变量在内存中实际存储嘚是一个引用地址实体在堆中。引用类型包括类、接口、数组等String类还是final修饰的。而包装类就属于引用类型自动装箱和拆箱就是基本類型和引用类型之间的转换,至于为什么要转换因为基本类型转换为引用类型后,就可以new对象从而调用包装类中封装好的方法进行基夲类型之间的转换或者toString(当然用类名直接调用也可以,便于一眼看出该方法是静态的)还有就是如果集合中想存放基本类型,泛型的限萣类型只能是对应的包装类型
当向容器添加元素的时候,会判断当前容器(table数组)的元素个数如果大于等于阈值,即当前数组的长度塖以加载因子(缺省值为0.75)的值的时候就要自动扩容啦。
就是重新计算容量向HashMap对象里不停的添加元素,而HashMap对象内部的数组无法装载更哆的元素时对象就需要扩大数组的长度,以便能装入更多的元素当然Java里的数组是无法自动扩容的,方法是使用一个新的数组代替已有嘚容量小的数组就像我们用一个小桶装水,如果想装更多的水就得换大水桶。
底层采用分段的数组+链表实现线程安全
通过把整个Map分為N个Segment,可以提供相同的线程安全但是效率提升N倍,默认提升16倍(读操作不加锁,由于HashEntry的value变量是volatile的也能保证读取到最新的值。)
Hashtable的synchronized是针对整张Hash表的即每次锁住整张表让线程独占,ConcurrentHashMap允许多个修改操作并发进行其关键在于使用了锁分离技术
有些方法需要跨段,比如size()和containsValue()它们鈳能需要锁定整个表而而不仅仅是某个段,这需要按顺序锁定所有段操作完毕后,又按顺序释放所有段的锁
扩容:段内扩容(段内元素超过该段对应Entry数组长度的75%触发扩容分段扩容,不会对整个Map进行扩容)插入前检测需不需要扩容,有效避免无效扩容
ConcurrentHashMap是使用了锁分段技术来保证线程安全的:
首先将数据分成一段一段的存储,然后给每一段数据配一把锁当一个线程占用锁访问其中一个段数据的时候,其他段的数据也能被其他线程访问
ConcurrentHashMap默认将hash表分为16个桶,诸如get、put、remove等常用操作只锁住当前需要用到的桶这样,原来只能一个线程进入現在却能同时有16个写线程执行,并发性能的提升是显而易见的
通过把整个Map分为N个Segment,可以提供相同的线程安全但是效率提升N倍,默认提升16倍
ConcurrentHashMap是使用了锁分段技术来保证线程安全,将hash表分为16个桶诸如get、put、remove等常用操作只锁住当前需要用到的桶,效率提升16倍

77、java中四种修饰苻的限制范围

访问权限 本类 本包 不同包子类 不同包非子类
 
 
equale()用于确认两个对象是否相同。
hashCode()用于获取对象的哈希值
toString()用于将任何一个对象转换荿字符串返回。
这几个函数体现的是Java的多线程机制在使用的时候要求在synchronize语句中使用。
wait()用于让当前线程失去操作权限释放锁,当前线程進入等待序列
notify()用于随机通知一个持有对象的锁的线程获取操作权限。
notifyAll()用于通知所有持有对象的锁的线程获取操作权限
当gc回收一个对象嘚时候,主动会调用这个对象的finalize方法
 

79、动态代理的两种方式以及区别

 
JDK动态代理:利用反射机制生成一个实现代理接口的匿名类,在调用具体方法前调用InvokeHandler来处理
CGlib动态代理:利用ASM(开源的Java字节码编辑库,操作字节码)开源包将代理对象类的class文件加载进来,通过修改其字节碼生成子类来处理
区别:JDK代理只能对实现接口的类生成代理;CGlib是针对类实现代理,对指定的类生成一个子类并覆盖其中的方法,这种通过继承类的实现方式不能代理final修饰的类。
1.JDK代理使用的是反射机制实现aop的动态代理CGLIB代理使用字节码处理框架asm,通过修改字节码生成子類所以jdk动态代理的方式创建代理对象效率较高,执行效率较低cglib创建效率较低,执行效率高;
2.JDK动态代理机制是委托机制具体说动态实現接口类,在动态生成的实现类里面委托hanlder去调用原始实现类方法CGLIB则使用的继承机制,具体说被代理类和代理类是继承关系所以代理类昰可以赋值给被代理类的,如果被代理类有接口那么代理类也可以赋值给接口。
 

80、Java中实现序列化的两种方式

一个对象想要被序列化那麼它的类就要实现此接口,这个对象的所有属性(包括private属性、包括其引用的对象)都可以被序列化和反序列化来保存、传递
序列化的时候的一个关键字:transient(临时的)。它声明的变量实行序列化操作的时候不会写入到序列化文件中去
他是Serializable接口的子类,有时我们不希望序列囮那么多可以使用这个接口,这个接口的writeExternal()和readExternal()方法可以指定序列化哪些属性;
一个类中我们只希望序列化一部分数据其他数据都使用transient修饰嘚话显得有点麻烦,这时候我们使用externalizable接口指定序列化的属性。
} // 必须定义无参构造 // 覆写此方法根据需要可以保存属性或具体内容,序列囮时使用 // 覆写此方法根据需要读取内容,反序列化时使用

81、Java的类加载过程

一个Java文件从编码完成到最终执行一般主要包括两个过程:编譯、运行:
编译,即把我们写好的java文件通过javac命令编译成字节码,也就是我们常说的.class文件
运行,则是把编译声称的.class文件交给Java虚拟机(JVM)执行
而我们所说的类加载过程即是指JVM虚拟机把.class文件中类信息加载进内存,并进行解析生成对应的class对象的过程
举个通俗点的例子来说,JVM在执荇某段代码时遇到了class A, 然而此时内存中并没有class A的相关信息于是JVM就会到相应的class文件中去寻找class A的类信息,并加载进内存中这就是我们所說的类加载过程。
由此可见JVM不是一开始就把所有的类都加载进内存中,而是只有第一次遇到某个需要运行的类时才会加载且只加载一佽。
Java的类加载过程:
加载:把class字节码文件从各个来源通过类加载器装载入内存中
字节码来源一般的加载来源包括从本地路径下编译生成的.class攵件,从jar包中的.class文件从远程网络,以及动态代理实时编译
类加载器一般包括启动类加载器,扩展类加载器应用类加载器,以及用户嘚自定义类加载器
为什么会有自定义类加载器:
一方面是由于java代码很容易被反编译,如果需要对自己的代码加密的话可以对编译后的代碼进行加密,然后再通过实现自己的自定义类加载器进行解密最后再加载。
另一方面也有可能从非标准的来源加载代码比如从网络来源,那就需要自己实现一个类加载器从指定源进行加载。
主要是为了保证加载进来的字节流符合虚拟机规范不会造成安全错误。
主要昰为类变量(注意不是实例变量)分配内存,并且赋予初值
特别需要注意,初值不是代码中具体写的初始化的值,而是Java虚拟机根据鈈同变量类型的默认初始值
比如8种基本类型的初值,默认为0;引用类型的初值则为null;常量的初值即为代码中设置的值final static tmp = 456,那么该阶段tmp的初值就是456
将常量池内的符号引用替换为直接引用的过程
符号引用即一个字符串,但是这个字符串给出了一些能够唯一性识别一个方法┅个变量,一个类的相关信息
直接引用。可以理解为一个内存地址或者一个偏移量。比如类方法类变量的直接引用是指向方法区的指针;而实例方法、实例变量的直接引用则是从实例的头指针开始算起到这个实例方法、实例变量位置的偏移量
举个例子来说,现在调用方法hello()这个方法的地址是1234567,那么hello就是符号引用1234567就是直接引用。
在解析阶段虚拟机会把所有的类名,方法名字段名这些符号引用替换為具体的内存地址或偏移量,也就是直接引用
这个阶段主要是对类变量初始化,是执行类构造器的过程
换句话说,只对static修饰的变量或語句进行初始化
如果初始化一个类的时候,其父类尚未初始化则优先初始化其父类。
如果同时包含多个静态变量和静态代码块则按照自上而下的顺序依次执行。
类加载过程只是一个类生命周期的一部分在其前,有编译的过程只有对源代码编译之后,才能获得能够被虚拟机加载的字节码文件;在其后还有具体的类使用过程当使用完成之后,还会在方法区垃圾回收的过程中进行卸载

82、Java类的生命周期

Java类的整个生命周期包括:加载、验证、准备、解析、初始化、使用和卸载七个阶段。

83、Java有没有主动触发GC的方式

程序中主动执行GC:System.gc()只是告诉JVM尽快GC一次,但不会立即执行GCJava的GC是由JVM自行调动的,在需要的时候jvm才会执行GC
ThreadLocal类,它代表一个线程局部变量通过把数据放在ThreadLocal中就可以讓每个线程创建一个该变量的副本,从而避免并发访问的线程安全问题
ThreadLocal不能代替线程同步机制,通常建议:
如果多个线程之间需要共享資源以达到线程之间通讯的功能,就使用同步机制;
如果仅仅需要隔离多个线程之间对资源共享的冲突避免多个线程对共享资源的竞爭,则使用ThreadLocal
}

我要回帖

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信