2021年1月31日星期日

操作系统内存大页(THP)对redis性能的影响

操作系统内存大页(THP)对redis性能的影响。

目录
  • THP
    • THP对redis的影响
    • 关闭THP

redis启动日志的warning:

WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo madvise > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled (set to 'madvise' or 'never').

THP

内存大页机制(Transport Huge Pages,THP),是linux2.6.38后支持的功能,该功能支持2MB的大爷内存分配,默认开启。常规的内存分配为4KB维度。

THP对redis的影响

THP能减少内存分配的次数,同时可以加快子进程的fork速度。

但是redis采用了写时复制机制,一旦有数据要修改,redis不会直接修改内存数据,而是copy一份这个数据,然后进行修改,DOUBLE了。

在THP开启的情况下,如果就算只有2KB的数据,Redis也需要复制2MB的内存大页,而在常规情况下,只需要复制4KB的内存页,使得每次写命令引起的复制内存页的单位放大了512倍,这会拖慢写操作的执行时间,导致大于写操作慢查询,最终影响redis的性能。

所有在redis服务器需要关闭linux的THP

关闭THP

 echo never > /sys/kernel/mm/transparent_hugepage/enabled

再次启动redis发现文章开始的waring已经不见了。









原文转载:http://www.shaoqun.com/a/521248.html

跨境电商:https://www.ikjzd.com/

insider:https://www.ikjzd.com/w/1786

primc:https://www.ikjzd.com/w/129


操作系统内存大页(THP)对redis性能的影响。目录THPTHP对redis的影响关闭THPredis启动日志的warning:WARNINGyouhaveTransparentHugePages(THP)supportenabledinyourkernel.ThiswillcreatelatencyandmemoryusageissueswithRedis.Tofixthisissuerunt
net-a-porter:net-a-porter
联动优势电子商务:联动优势电子商务
立即下架!三大新品牌起诉侵权,波及多平台1000+店铺...:立即下架!三大新品牌起诉侵权,波及多平台1000+店铺...
揭秘你所不知道的亚马逊A9算法细节,亚马逊的A9算法有哪些,:揭秘你所不知道的亚马逊A9算法细节,亚马逊的A9算法有哪些,
亚马逊这类产品夏天如约火爆!卖家要开始为新常态做好布局了!:亚马逊这类产品夏天如约火爆!卖家要开始为新常态做好布局了!

2021年1月30日星期六

重磅!亚马逊或将开通爱尔兰站,狂揽38亿欧元大市场

有外媒指出,亚马逊要在爱尔兰开设新的站点了?

 

亚马逊将开通爱尔兰站?

 

有消息称,开发商正在首都都柏林边缘的巴尔唐纳建立亚马逊的在爱尔兰的第一个"物流中心",这暗示了这家网络零售巨头可能正计划推出一个亚马逊,即专门针对本地市场的网站。

 

image.png

 

最近,亚马逊在西都柏林的拉斯库尔曾为使用亚马逊Prime服务的爱尔兰用户开设了一个小规模的服务中心。但这只是一个配送中心,它不储存货物,基本上只是协调从国外到达的包裹,然后送到客户手中。

 

然而,巴尔唐纳的物流中心将更像它在美国和其他地方开创的履行中心。不像在拉斯库尔那样,只是对来自英国的包裹进行分类,巴尔唐纳将在其网站上持有上市销售的产品库存。爱尔兰客户的订单将首次在爱尔兰在的巴尔唐纳物流中心提货和包装,然后交货。

 

目前,在亚马逊上购买的大多数爱尔兰商品都是在英国包装的,必须经受退欧检查的考验,从而产生额外费用和延迟的风险。当巴尔唐纳的产品上线后,产品将避开"英国脱欧管道",更快地到达爱尔兰客户。

 

此外,爱尔兰当地媒体最近披露,亚马逊还在科克(Cork)寻找可容纳1000名员工的办公空间,最近还达成了一项在都柏林增加办公室的协议。

 

通过巴尔唐纳计划,亚马逊将有可能为其大多数爱尔兰客户提供当天或次日的送货服务,而这一能力目前受到其在英国使用设施服务该市场的限制。当然,人们期待已久的亚马逊爱尔兰站只是时间问题。

 

38亿欧元大市场,爱尔兰人最爱网购鞋服

 

亚马逊盯上爱尔兰市场不是没有道理的,其背后是巨大的市场潜力的诱惑。

 

爱尔兰虽是西欧小国,国土面积并不大,只有7万多平方公里,但是在GDP却十分可以拿得出手。2020年世界GDP排名中,爱尔兰就以25770.3558亿元GDP总量位列第34名。

 

由此可见,爱尔兰是一个让人不能忽视的掘金地。

 

爱尔兰人经常挂在嘴边的一个词就是"生活品质"。追求生活品质怎么能少得了买买买买。

 

PayPal一项调查显示,爱尔兰消费者更愿意选择跨境在线商店而非本土商店。此外,爱尔兰人也是世界上较大的跨境在线购物群体,有84%的爱尔兰消费者在海外网站购物。

 

IBISWorld发布的一份报告显示,2019年爱尔兰的电子商务销售额预计将增长12.9%,达到22亿欧元。这一数字相比2010年增长了一倍以上,2010年爱尔兰电子商务销售额为10.5亿欧元。

 

该研究公司预测,在接下来的五年间,爱尔兰电商销售额将以11.2%的复合年增长率增长至38亿欧元。

 

不仅如此,相关数据显示,2019年爱尔兰互联网渗透率84%,线上购物者比例81%,E-GDP(电子商务销售额占GDP的比例)2.53%,电商营业额增长率7%,而同一时间,卖家在欧洲的主要市场德国,其互联网渗透率也93%,线上购物者比例83%,E-GDP(电子商务销售额占GDP的比例)1.71%,电商营业额增长率:9.14%。

 

据悉,目前,爱尔兰访问量前三的电子商务网站分别为:亚马逊英国站(市场份额5.6%左右)、eBay(3.6%)、速卖通。

 

而服装和鞋类是爱尔兰电商行业最大的产品细分市场,预计占爱尔兰电商销售额的约39%,其次是消费电子产品,约占市场份额的33%。



英国脱欧,税收成本增大,爱尔兰遭殃

 

亚马逊可能将要开爱尔兰站点,和英国脱欧有很大的关系。

 

在地理位置上,爱尔兰和英国隔海相望,两国首都(都柏林-伦敦)的距离只相差了446公里,8个小时的车程,考虑到两国地理位置,通常爱尔兰网购者都会在英国网站购物。

 

image.png

 

据很多英国站卖家反映,不少爱尔兰订单都在英国站完成的,但是因为今年1月英国脱欧,爱尔兰的买家将承担更多税收。

 

今年1月1日,英国已完成脱欧,实现全面的政治和经济独立,但对爱尔兰零售业产生了冲击,增加了爱尔兰电商购物者的成本,同时也给本地带来商机。

 

对于爱尔兰本地零售商、供货商来说,英国脱欧将面临着两个问题。

 

一、从英国进货的商品将单独进行认证和检查。

 

虽然英国商品不需要承担进入欧盟的关税,但它们必须遵守欧盟食品法规。这对那些想从英国向爱尔兰商店、仓库供货的零售商来说是一个非常严重的问题——对于受规定约束的货物,现在必须单独进行认证和检查。

 

二、从英国进口商品需承担更多税收

 

另一个问题是,进口到英国仓库的欧盟货物,开箱后再重新包装运往爱尔兰,现在都要缴税。

 

如果涉及的唯一加工就是重新包装,这都要缴税,那么这种计算方式显然是不合理的。很难想象,从意大利进口到英国仓库的意大利面,如果被送到爱尔兰超市,为什么要交关税?

 

不仅如此,对于爱尔兰电商购物者来说,从英国网站上购买商品的成本将会上升,最高要上涨40%的价格。

 

因为税收,一些商品的价格可能会上涨40%以上。比如,购买超过150欧元的东西时,需要支付关税和增值税。

 

在2021年7月之前,爱尔兰网购者购买价值在22欧元以下的商品不会产生任何差别。但是,英国收入委员会英国退欧部门的雷•瑞恩表示,从1月开始,超过22欧元的订单将产生额外费用。

 

网购者在购买标价在23欧元或以上的商品时,将面临额外的进口费用,因为需要支付增值税。

 

英国竞争与消费者保护委员会(CCPC)表示,消费者在与英国公司购物时,如果产品存在缺陷或不符合描述,他们在退货或寻求赔偿方面的权利也会减少。

 

爱尔兰站开设后,亚马逊英国站订单或下降

 

目前,亚马逊上大部分爱尔兰客户的订单都是在英国站完成的,然后包裹通过邮局从英国运到爱尔兰。

 

而爱尔兰消费者如果从非欧盟国家购物将要支付更多税,于是亚马逊已经开始筹划建爱尔兰的订单履行中心,订单履行中心将建立在都柏林西部巴尔唐纳(Baldonnell)的一个商业园区里,大量订单的交付速度会更快。

 

建立爱尔兰的订单履行中心后将使亚马逊绕过英国,避免因英国脱欧交易安排而出现任何延误或额外收费。

 

对于英国站的卖家来说,缴纳20%的税已经是板上钉钉的事,据英国卖家最近的反馈,因为税收成本增大,在同行不涨价的情况下,自己的订单和排名都跌得很惨。

 

有卖家猜测,如果亚马逊再建爱尔兰站点,英国站卖家单量可能再一步下降。当然,对于入驻爱尔兰站点的新卖家来说,从爱尔兰本地的物流(逃离了英国爆仓和延误的情况)、成本(减免了税收)和消费者购买力来考虑。

 

长远来看,亚马逊新建站点对于中国卖家不会是件坏事,而是会进一步开拓爱尔兰的电商市场。

 

跨境卖家们,不妨期待一下这个即将到来的新站点。





原文转载:http://www.shaoqun.com/a/521224.html

跨境电商:https://www.ikjzd.com/

isbn:https://www.ikjzd.com/w/174

出口易:https://www.ikjzd.com/w/1317


有外媒指出,亚马逊要在爱尔兰开设新的站点了?亚马逊将开通爱尔兰站?有消息称,开发商正在首都都柏林边缘的巴尔唐纳建立亚马逊的在爱尔兰的第一个"物流中心",这暗示了这家网络零售巨头可能正计划推出一个亚马逊,即专门针对本地市场的网站。最近,亚马逊在西都柏林的拉斯库尔曾为使用亚马逊Prime服务的爱尔兰用户开设了一个小规模的服务中心。但这只是一个配送中心,它不储存货物,基本上只是协调从国外到达的包裹,然后
宝贝格子:宝贝格子
抢注商标:抢注商标
如何申请亚马逊品牌授权?(图文实操):如何申请亚马逊品牌授权?(图文实操)
口述:女神的老公有性怪癖 她找我陪睡:口述:女神的老公有性怪癖 她找我陪睡
同行费尽心机恶搞你时,亚马逊卖家有多难受?:同行费尽心机恶搞你时,亚马逊卖家有多难受?

Java基础之:泛型

Java基础之:泛型

在不使用泛型的情况下,在ArrayList 中,添加3个Dog。

Dog对象含有name 和 age, 并输出name 和 age (要求使用getXxx())。

package class_Generic;import java.util.ArrayList;​public class ClassTest01 {​ @SuppressWarnings({ "rawtypes", "unchecked" }) public static void main(String[] args) {  ArrayList dog = new ArrayList();  dog.add(new Dog("旺财",2));  dog.add(new Dog("来福",4));  dog.add(new Dog("小黑",6));  for (Object obj : dog) {   Dog temp = (Dog)obj;   System.out.println(temp);  }    //使用泛型改进  //"<>"尖括号内应写入期望在ArrayList中存放的元素的类型或父类。  ArrayList<Dog> dogList = new ArrayList<Dog>();  dogList.add(new Dog("旺财",2));  dogList.add(new Dog("来福",4));  dogList.add(new Dog("小黑",6));  for (Dog d : dogList) { //在使用dogList内元素时,编译类型可以直接使用Dog   System.out.println(d);  } }}class Dog{ private String name; private Integer age; public Dog(String name, Integer age) {  this.name = name;  this.age = age; } public String getName() {  return name; } public void setName(String name) {  this.name = name; } public Integer getAge() {  return age; } public void setAge(Integer age) {  this.age = age; } @Override public String toString() {  return "Dog [name=" + name + ", age=" + age + "]"; } }​

  

总结:可以看到在不适用泛型的情况下,每次取出ArrayList中的对象都需要使用Object类型。需要向下转型才可以获得原来的数据类型Dog,而使用泛型指定之后让ArrayList中取出的元素直接就是Dog类型,但同时在加入元素时也只加入Dog类型及其子类的实例对象。而若不适用泛型,那么加入到ArrayList中的元素类型不受约束(不安全)。

 

泛型介绍

  1. 泛型又称参数化类型,是jdk5.0出现的新特性,解决数据类型的安全性问题。

  2. Java 泛型可以保证如果程序在编译时没有发出警告,那么在运行时就不会出现ClassCastException异常。

  3. 在类声明时通过一个标识来表示类中某个属性的类型或是某个方法的返回值及参数类型。

泛型实例化

在类名后面指定参数类型的值(类型)。

package com.atguigu.generic;import java.util.ArrayList;import java.util.HashMap;public class Generic02 { public static void main(String[] args) {  //给public class ArrayList<E> {}  //解读  //给 E泛型 传入类型String  //表我们可以给al放入的String, 或者是它的子类型  ArrayList<String> al = new ArrayList<String>();  al.add("tt");  al.add("hello");    //使用HashMap  //public class HashMap<K,V> {}  //解读  //1. K 指定为 String  //2. V 指定为 Customer  //3. 当我们使用hm 时,编译器,就会约束 加入 的 k 是String , v 就是 Customer  HashMap<String, Customer> hm = new HashMap<String, Customer>();  hm.put("hello1", new Customer());  hm.put("100", new Person());//多态    HashMap<String, IMy> hm2 = new HashMap<String, IMy>();    hm2.put("200", new Tiger()); }}interface IMy { }​class Tiger implements IMy { }​class Customer { }​class Person extends Customer { }

​

泛型使用

创建 3个学生对象。放入到 HashMap中,要求 Key 是 String, name, 使用泛型, Value 就是 学生对象。使用两种方式遍历

package class_Generic;​import java.util.HashMap;import java.util.Iterator;import java.util.Map;import java.util.Map.Entry;import java.util.Set;​public class ClassWork01 {​ public static void main(String[] args) {​  HashMap<String , Student> hashMap = new HashMap<>();  Student student1 = new Student("小范");  Student student2 = new Student("小黄");  Student student3 = new Student("小雨");  hashMap.put(student1.getName(),student1);  hashMap.put(student2.getName(),student2);  hashMap.put(student3.getName(),student3);    Set<String> keySet = hashMap.keySet();  for (String string : keySet) {   System.out.println("key:" + string + ",value:" + hashMap.get(string));  }    System.out.println("===========================");    Set<Entry<String, Student>> entrySet = hashMap.entrySet();  Iterator<Entry<String, Student>> iterator = entrySet.iterator();  while(iterator.hasNext()) {   Map.Entry<String, Student> node = iterator.next();   System.out.println("key:" + node.getKey() + ",value:" + node.getValue());  } }​}class Student{ private String name;​ public Student(String name) {  this.name = name; }​ @Override public String toString() {  return "Student [name=" + name + "]"; }​ public String getName() {  return name; }​ public void setName(String name) {  this.name = name; } }

 

泛型练习题

定义Employee类

1) 该类包含:private成员变量name,age,birthday,其中 birthday 为 MyDate 类的对象;

2) 为每一个属性定义 getter, setter 方法;

3) 重写 toString 方法输出 name, age, birthday

4) MyDate类包含: private成员变量month,day,year;并为每一个属性定义 getter, setter 方法;

5) 创建该类的 3 个对象,并把这些对象放入 ArrayList 集合中(ArrayList 需使用泛型来定义),对集合中的元素进行排序,并遍历输出:

排序方式: 调用ArrayList 的 sort 方法 , 传入 Comparator对象[使用泛型],先按照name,排序,如果name相同,则按生日日期的先后排序。【即:定制排序】

package class_Generic;import java.util.ArrayList;import java.util.Comparator;public class ClassWork02 { public static void main(String[] args) {  Employee employee = new Employee("c小范", 20, new MyDate(2000, 3, 26));  Employee employee2 = new Employee("a小黄", 18, new MyDate(1999, 11, 25));  Employee employee3 = new Employee("b小雨", 20, new MyDate(2000, 4, 26));​  ArrayList<Employee> list = new ArrayList<>(); // 推荐写法​  list.add(employee);  list.add(employee2);  list.add(employee3);  System.out.println("=============排序前=============");  for (Employee em : list) {   System.out.println(em);  }​  list.sort(new Comparator<Employee>() {   // 先按照name,排序,如果name相同,则按生日日期的先后排序。   @Override   public int compare(Employee o1, Employee o2) {    if (!(o1.getName().equals(o2.getName()))) {     return o1.getName().compareTo(o2.getName());    }​    //未封装//    MyDate temp1 = o1.getBirthday();//    MyDate temp2 = o2.getBirthday();//    if (temp1.equals(temp2)) {//     return 0;//    } else {//     if (temp1.getYear() != temp2.getYear()) {//      return temp1.getYear() - temp2.getYear();//     }//     if (temp1.getMonth() != temp2.getMonth()) {//      return temp1.getMonth() - temp2.getMonth();//     }//     if (temp1.getDay() != temp2.getDay()) {//      return temp1.getDay() - temp2.getDay();//     }//     return 0;//    }        //封装方式    return o1.getBirthday().compareTo(o2.getBirthday());   }​  });​  System.out.println("=============排序后=============");​  for (Employee em : list) {   System.out.println(em);  } }​}​class Employee { private String name; private int age; private MyDate birthday;​ public Employee(String name, int age, MyDate birthday) {  super();  this.name = name;  this.age = age;  this.birthday = birthday; }​ @Override public String toString() {  return "Employee [name=" + name + ", age=" + age + ", birthday=" + birthday + "]"; }​ public String getName() {  return name; }​ public void setName(String name) {  this.name = name; }​ public int getAge() {  return age; }​public void setAge(int age) {this.age = age; }​public MyDate getBirthday() {return birthday; }​public void setBirthday(MyDate birthday) {this.birthday = birthday; }​@Overridepublic boolean equals(Object obj) {if (this == obj)return true;if (obj == null)return false;if (getClass() != obj.getClass())return false;Employee other = (Employee) obj;if (name == null) {if (other.name != null)return false; } else if (!name.equals(other.name))return false;return true; }}​class MyDate implements Comparable<MyDate>{//使用泛型指定比较MyDate类型对象private int year;private int month;private int day;​public MyDate(int year, int month, int day) {super();this.year = year;this.month = month;this.day = day; }​public int getYear() {return year; }​public void setYear(int year) {this.year = year; }​public int getMonth() {return month; }​public void setMouth(int month) {this.month = month; }​public int getDay() {return day; }​public void setDay(int day) {this.day = day; }​@Overridepublic String toString() {return year + "-" + month + "-" + day; }​@Overridepublic boolean equals(Object obj) {if (this == obj)return true;if (obj == null)return false;if (getClass() != obj.getClass())return false;MyDate other = (MyDate) obj;if (day != other.day)return false;if (month != other.month)return false;if (year != other.year)return false;return true; }​@Overridepublic int compareTo(MyDate o) {//比较if(year != o.year) {return year - o.year; }if(month != o.month) {return month - o.month; }return day - o.day; }​}

程序输出:

=============排序前=============

Employee [name=c小范, age=20, birthday=2000-3-26]

Employee [name=a小黄, age=18, birthday=1999-11-25]

Employee [name=b小雨, age=20, birthday=2000-4-26]

=============排序后=============

Employee [name=a小黄, age=18, birthday=1999-11-25]

Employee [name=b小雨, age=20, birthday=2000-4-26]

Employee [name=c小范, age=20, birthday=2000-3-26]

 

 









原文转载:http://www.shaoqun.com/a/521221.html

跨境电商:https://www.ikjzd.com/

易麦:https://www.ikjzd.com/w/2048

etsy:https://www.ikjzd.com/w/169.html


Java基础之:泛型在不使用泛型的情况下,在ArrayList中,添加3个Dog。Dog对象含有name和age,并输出name和age(要求使用getXxx())。packageclass_Generic;importjava.util.ArrayList;​publicclassClassTest01{​@SuppressWarnings({"rawtypes","
吴佳:吴佳
lastpass:lastpass
亚马逊旺季补货-你准备好如何应对库存高峰期了吗?:亚马逊旺季补货-你准备好如何应对库存高峰期了吗?
跟卖+威胁+鼓励卖家优化listing ,最牛跟卖套路及防跟卖策略揭秘!:跟卖+威胁+鼓励卖家优化listing ,最牛跟卖套路及防跟卖策略揭秘!
印度美妆电商Purplle获800万美元C轮融资:印度美妆电商Purplle获800万美元C轮融资

为什么会出现血瘀体质,血瘀体质应该如何调理?

核心提示:小张(化名)不知道是内分泌失调,还是男朋友不上进,经常惹她生气的原因,小张近段时间以来,脾气暴躁,稍有点事情就能把她点爆。另外,从来不痛经的小张甚至开始痛经了,更让小张痛心的是,她脸上经常长斑了。

小张(化名)不知道是内分泌失调,还是男朋友不上进,经常惹她生气的原因,小张近段时间以来,脾气暴躁,稍有点事情就能把她点爆。另外,从来不痛经的小张甚至开始痛经了,更让小张痛心的是,她脸上经常长斑了。

爱美之心人皆有之,何况还是女生。小张着急又崩溃,开始病急乱投医,可是各种护肤品用了都没有任何效果。无奈之下,小张去看了一次中医,诊断为血瘀。

医生对小张说:"舌底的血管都胀成这样了,现在才开始调理,脸上肯定会长斑啊。"

其实,很多人都和小张一样,直到血瘀出现了表症,才意识到需要调理了。其实,血瘀的辨证很简单,看舌像即可,对照看看你有没有这些问题。

一、出现这些舌像,小心是血瘀了,别忽视

如果出现以下四种舌象,应当立即去医院检查。

1、暗紫舌

血淤最常见到的症状就是出现暗紫舌,也叫匀紫舌,简单来说就是,舌头的颜色出现了改变,有些是变成匀紫发红,有些是淡紫色,这种舌象是因为舌头的血液里面出现还原血红蛋白增多引起的,有些患者还会伴有口唇紫绀或四肢紫绀,暗紫舌的出现是全身性血淤的表现。

2、淤点舌

正常情况,我们的舌头是淡红色的,但如果舌尖或舌头两侧出现明显的黑色或青色的淤点或淤斑,就要小心了。身体出现血淤会影响舌头的血液循环,舌头的毛细血管堵塞,血液就会从红色变成黑色,表现出来的就是淤点舌或淤斑舌。

3、舌底血管的粗胀曲张

我们的舌头下面有两条纵向分布的静脉,正常情况下,这两条静脉是淡蓝色,并且直径不超过2mm,而如果舌底下的两条静脉变得又黑又粗,甚至弯弯曲曲的,说明血淤找上门了[1],这种舌象是因为舌体的静脉血液回流出现障碍,从而导致静脉发生变化,也就是说明出现了血淤。

4、舌淡

血淤还会出现一种容易被忽视的舌象,那就是淡舌,当舌体的小动脉发生硬化或堵塞时,就会导致血液无法供应,从而出现淡舌的现象,尤其是广泛动脉血管病变的糖尿病患者,最常见这种舌象。

因此,只需要观察舌象就可以看出是否出现血瘀,那么,血瘀跟什么有关,为什么会出现血瘀体质?

二、为什么会出现血瘀体质

事实上,血瘀体质跟很多因素都有关系,首先是情绪,血瘀跟情绪有密切关系,长期抑郁、紧张焦虑或烦躁易怒等不良情绪会使得机体气血运行不畅,郁结日久则血液循环受阻,从而导致血瘀的出现。

其次,大量摄入过于油腻的食物或甜食会导致体内的血脂增高,血液因此变得越来越黏稠,从而影响血液循环,当气血运行不畅时就会出现血瘀体质。此外,常年患病或体质较虚弱的人群也比较容易形成血瘀体质,比如老年人、糖尿病人等。

而缺乏运动或是在寒冷的天气下也会导致血瘀的出现,一旦出现血瘀体质,及时调理很重要,那么,血瘀体质应该怎样调理?

三、血瘀体质应该如何调理

形成血瘀体质的因素有很多,所以,调理血瘀的方法也有很多,对症治疗方能达到更好的效果。

● 饮食上多吃行气活血食物:生姜、洋葱、白萝卜、桂皮等都是具有活血化瘀作用的,血瘀体质的人在饮食上可以多摄入这类食物,而适量的红葡萄酒也可以改善血液循环,此外,山楂、米醋能够降低血脂的血液黏稠度,黑木耳具有清除堆积在血管壁上淤积的作用,多吃这些食物都能够调理血瘀体质。

● 三七粉等中药调理:血瘀体质还可以通过喝中药来进行调理,三七、当归、红花等中药都具有行气活血的功效,都能够改善气滞血瘀体质。

● 运动:坚持锻炼也能够改善血瘀体质,尤其是老年人,但在选择运动方式时应尽量避免过于激烈的球类,"快步走"就是一个不错的选择。

● 愉悦的心情:保持愉悦的情绪以及快乐的心情对于气血的运行都有很大的帮助,在日常生活中,可以通过听音乐、与人交流或是参加集体活动等来缓解不良的情绪。

此外,做好保暖工作以及积极治疗慢性疾病等都是有助于改善气血的运行,也能帮助调理血瘀体质。

值得提醒的是,不论是哪种调理方式,对于血瘀体质来说,都是需要长期坚持才能达到效果的,而如果血瘀体质比较严重,应当及时去医院,寻找专业医生的治疗。

 

参考资料:

[1] 舌头紫暗、脸上多斑……血瘀的产生原因和征象.央视网.2019-12-04

[2] 李益梅.气滞血瘀对身体的危害及调理方式[J].健康必读:下半月,2011:359-359.



未经作者允许授权,禁止转载

39健康网()原创内容,未经授权不得转载,违者必究。内容合作请联系:020-85501999-8819或39media@mail.39.net

原文转载:http://health.shaoqun.com/a/149003.html

跨境电商:https://www.ikjzd.com/

xinong:https://www.ikjzd.com/w/1368

淘粉:https://www.ikjzd.com/w/1725


核心提示:小张(化名)不知道是内分泌失调,还是男朋友不上进,经常惹她生气的原因,小张近段时间以来,脾气暴躁,稍有点事情就能把她点爆。另外,从来不痛经的小张甚至开始痛经了,更让小张痛心的是,她脸上经常长斑了。 小张(化名)不知道是内分泌失调,还是男朋友不上进,经常惹她生气的原因,小张近段时间以来,脾气暴躁,稍有点事情就能把她点爆。另外,从来不痛经的小张甚至开始痛经了,更让小张痛心的是,她脸上经常长斑
taofenba:taofenba
亚马逊礼品卡:亚马逊礼品卡
每周精选:大量卖家因MWS授权被封号!订单显示为个位数!:每周精选:大量卖家因MWS授权被封号!订单显示为个位数!
7年增长370倍!中欧班列为争第一发空箱?:7年增长370倍!中欧班列为争第一发空箱?
亚马逊全类目审核自助检测工具:亚马逊全类目审核自助检测工具

夫妻生活选择早上好,还是晚上好?这3个黄金时间,别错过了

核心提示:  对于任何事来说,都有最佳时机,就好比性生活,时间若把握不精准,不仅愉悦感会下降,有时还会败了兴致。  小丽前段时间就因为这事,跟老公进行了"家暴"。  "大清早,困得不行还闹,我一脚把他踹下了床!"  大多数的人只有在晚上才有时间"XXOO",此时也兴致最高。但对于某些人来说......

对于任何事来说,都有最佳时机,就好比性生活,时间若把握不精准,不仅愉悦感会下降,有时还会败了兴致。

小丽前段时间就因为这事,跟老公进行了"家暴"。

"大清早,困得不行还闹,我一脚把他踹下了床!"

大多数的人只有在晚上才有时间"XXOO",此时也兴致最高。但对于某些人来说,早上兴致更为浓烈。到底,夫妻生活早上好还是晚上更好呢?

一天中,哪个时间点同房最好?

·晚上10点

哈佛大学医学院相关专家通过研究发现:女性在夜间10点左右的时候,右大脑细胞可以说是最为活跃的,这时候她们更容易产生一些幻想,且其内容很多都是和"性"相关的,所以,这期间女性的兴致是最高的,男性要把握好时机哦!

·清晨9点

早上九点,由于睾丸激素分泌的数量可以说是一天当中最多的时候,所以,这时男性的性欲望是非常高的,且身体机能也处于一个比较优质的状态,这时候进行房事,也更容易获得性愉悦。

·下午三点

荷尔蒙专家阿丽莎?维蒂将下午3点描述为"曼妙时刻"。相关研究显示:这时间段,女性的激素和皮质醇水平都处于一个比较高峰的状态,身体会比较敏感,精力也比较旺盛;而同一时间,男性也会分泌较高的雌性激素。所以,这时候"办事",会相对的更和谐,而且也更容易满足。

所以,有条件、有精力的朋友,一定要记住上面这3个最佳同房时间点,这样就可以愉快的进行那事啦!如果没有,或者感觉麻烦,那就记住一点:在状态最好的时候进行,也就是身体状态满分,双方都有兴趣的时候,这样也可以甜甜蜜蜜。

健康性生活,一定要避开这几个时间点

想要拥有一个质量优质、健康的性生活,除了抓住最佳的性生活时间段,还要注意避开一些时间点,以免尴尬,影响健康,甚至影响彼此的感情。

▲月经期

经期女性阴道分泌液被经血中和成碱性,成为良好的细菌培养基,同时子宫内膜脱落,子宫内有伤口,子宫口又微开,同房易将细菌带入,所以如果还是任"性"而为,很容易导致细菌侵袭,导致女性患上阴道炎、宫颈炎、盆腔炎等疾病。

▲喝酒后

很多人以为酒后助"性",其实不然,喝酒后进行性生活,很容易导致血管升高,诱发心脑血管疾病,尤其是喝醉呕吐的患者,要是呕吐物呛入器官、肺脏,还可能引发意外。

▲生病时

人在生病的时候,不管是身体还是精神状态,都会比较差,这时更应该注重休息,而不是性行为。

所以,如果处于这些时间段,还是先克制一下吧,为了健康着想!

夫妻亲热的注意事项

1、夫妻之间,性事要注意控制频率,不然像男性,过频进行房事会让前列腺组织很受伤,而且频繁射精,前列腺液大量排出,前列腺局部防御能力也跟着下降,容易导致慢性前列腺炎的发生;而女的则容易导致宫颈损伤,诱发炎症。

Ps:合适的性生活频率主要还是以双方的满足感为主,不劳累、无不适症状即可。

2、不管男女,都应该注意私密部位的卫生,不然很容易导致细菌、病毒感染,像HPV病毒感染最主要的途径就是性传播,若是在平时生活中性生活不注意卫生就很容易中招。所以要重视事前事后的清洗。

3、亲热后,别马上洗澡,这样很容易引发心慌、气喘等表现,尤其是冷水澡,容易导致皮肤血管骤然收缩,大量血液会流回心脏,加重心脏的负担,所以最好休息一会再去洗。

4、亲热后,别急着睡觉,这样睡眠的迟钝效应加上刺激的迟钝效应,反而会加重你的疲劳感,甚至持续到第二天,让你腰酸背痛;而在马上睡觉,也会让伴侣觉得你不够爱她、关心她,所以,建议亲热后两个人可以聊聊天,或者起来去做一些日常生活中的事情,缓一缓,在休息。

总结:想要一个高质量的性爱,要学会把握好最佳时机,避开错误时机,同时注意一些性爱注意事项,这样才可以让性生活更加和谐,更促进双方的感情,你get到了吗?

参考资料:


[1]《聪明男人会把握时机:做人做事做爱都有最佳时间》.健康时报.2016-11-28

[2]《什么时候最适合做爱?专家称下午三点最棒》.环球网 .2015-12-29

未经作者允许授权,禁止转载


原文转载:http://health.shaoqun.com/a/148999.html

跨境电商:https://www.ikjzd.com/

易麦:https://www.ikjzd.com/w/2048

抢注商标:https://www.ikjzd.com/w/1053


核心提示:  对于任何事来说,都有最佳时机,就好比性生活,时间若把握不精准,不仅愉悦感会下降,有时还会败了兴致。  小丽前段时间就因为这事,跟老公进行了"家暴"。  "大清早,困得不行还闹,我一脚把他踹下了床!"  大多数的人只有在晚上才有时间"XXOO",此时也兴致最高。但对于某些人来说...... 对于任何事来说,都有最佳时机,就好比性生活,时间若把握不精准,不仅愉悦感会下降,有时还会败了兴致
zozotown:zozotown
bestbuy:bestbuy
亚马逊黄金日购物意愿降低?电子商务整体搜索量下降84%:亚马逊黄金日购物意愿降低?电子商务整体搜索量下降84%
亚马逊店铺被投诉侵权售假如何申诉? :亚马逊店铺被投诉侵权售假如何申诉?
亚马逊新手卖家如何批量养买家号?:亚马逊新手卖家如何批量养买家号?

男生厌倦女生时的表现 男朋友厌倦期女生该咋办

 

男生开始厌倦一个女生其实是很明显的,如果你们的感情已经出现下面的迹象,就该引起重视了!赶紧了解一下吧。

男生厌倦女生时的表现 男朋友厌倦期女生该咋办

男生厌倦女生时的表现

1、看见你就觉得烦

他开始减少与你约会的次数,避免与你接触的机会。即使答应你的约会,也会敷衍了事,满脸不快,想方设法节约时间。这是很明显的厌倦表现。

2、发生争吵时,态度越来越强硬

以前沟通对你很有耐心,即使发生争吵也总是主动缓和关系。而现在对你变得不耐烦,总是按照自己的意愿说话、做事,强制和命令女人按照他的想法做事情。态度蛮横,不再为你考虑,甚至一言不合就吵架,强硬的态度让女人望尘莫及。

3、开始听到嫌弃你的声音

热恋时看你哪儿都顺眼,宝贝的各种叫。而开始厌倦你后,关于你的穿着、妆容、性格,都会数落一番。还开始拿着你和别人比较,进行比较之后,拿着你的缺点说事儿,毫无顾忌的戳痛你。

4、各种挑毛病

经常挑刺儿,对你做的事情指指画画,一会儿说你买的东西不好看,一会儿说饭太难吃,一会说你太小心眼。要知道他当初可是对你各种称赞。

5、吵架变成常事

虽说恋爱闹点矛盾很正常,但如果你们以前不这样,而如今频率很高,那就得引起警惕了。总之,一段正常的感情一定不会三天两头就吵架,因为有包容。

6、对你的关心不屑一顾

他不想要你的关心,对你的付出不屑一顾,他拒绝接受你对他的照顾,他宁愿自己亲力亲为,也不愿意你干预他的人生,面对你的示好,他会冷冰冰的拒绝,让你束手无策,不知道该怎么办。

7、对你漠不关心

你和他聊天,不是敷衍你,就是爱理不理,尽管你已经跟他重复很多遍,他可能全当空气。你生病了,他坐视不理,对你的事情心不在焉,这样的行为是男人厌倦女人的表现。

8、不愿为你花钱

虽说金钱不是衡量感情的唯一标准,但一定能是感情的试金石。以前的他总是会时不时买点小礼物给你惊喜,也会满足你的力所能及的要求。而如今需要花钱的地方,总是找理由搪塞,甚至各种数落。这正是不想再为你多付出,产生厌倦的表现。

男生厌倦女生时的表现 男朋友厌倦期女生该咋办

男人进入恋爱厌倦期,女人该怎么办

有自己的朋友圈

不要因为男朋友而疏远好朋友,这样在男朋友不能陪你时还有好朋友,你也就不会觉得自己除了他什么也没有,从而变得患得患失,然后神经质,最后只会把你们的距离越拉越大。

投其所好

男士出现厌倦期,很有可能是你和他之间逐渐缺少交集,导致越来越疏远。比如他喜欢的东西,你并不感冒甚至反对。这样他自然在一次两次后与你出现隔阂。所以,拉近距离的最好方式就是投其所好,重新制造你们两人的交集。

有自己热衷的事

给自己和对方空间去做自己喜欢的事,这样才不会在恋爱中有被束缚的感觉,也不会迷失自我,更不会给对方负重感。不要万事依赖对方,一种没他就活不了的态度。适当的保持距离,让双方都能自由呼吸,当你没那么在乎他时,他才会有危机感,从而更加珍惜你。女生应当适当地表现自己柔弱的一面,这样男生的大男子主义才有处彰显,太过强势的女生很容易让男生有受挫感,因此打退堂鼓。

做一个漂亮,精致的女生

男人都是视觉生物,或许他喜欢你是从你美丽的样貌开始的。不少男人在生活中自己会表现的非常大大咧咧,邋遢的不行。但如果女生也像自己男友一样。那么男人绝对会抛弃你,男人能容忍自己邋遢不堪,但不能容忍女友也又脏又不爱打扮。所以,要学会做一个漂亮,精致的女生是非常必不可少的。每个男人都希望和女友走在街上时,被别的男人投来羡慕嫉妒恨的目光。

自信

最后最重要的是女生一定要自信,不管任何时候都不要忘记让自己变得优秀,有梦就去追,不要因为任何人放弃自我,当你更优秀的时候,对方才会更加卖力地想要去抓紧你。为别人而活的人,永远不被重视,当你失去自己的那一天开始你也在渐渐地失去他。

原文转载:http://lady.shaoqun.com/a/265118.html

跨境电商:https://www.ikjzd.com/

aicpa:https://www.ikjzd.com/w/1373

凹凸曼:https://www.ikjzd.com/w/1392


男生开始厌倦一个女生其实是很明显的,如果你们的感情已经出现下面的迹象,就该引起重视了!赶紧了解一下吧。男生厌倦女生时的表现1、看见你就觉得烦他开始减少与你约会的次数,避免与你接触的机会。即使答应你的约会,也会敷衍了事,满脸不快,想方设法节约时间。这是很明显的厌倦表现。2、发生争吵时,态度越来越强硬以前沟通对你很有耐心,即使发生争吵也总是主动缓和关系。而现在对你变得不耐烦,总是按照自己的意愿说话、做
贸发局:贸发局
网络星期一:网络星期一
HelloProfit:HelloProfit
什么是亚马逊快闪店?亚马逊为什么要关闭快闪店?:什么是亚马逊快闪店?亚马逊为什么要关闭快闪店?
怎么选好产品?亚马逊选品应该考虑的事情:怎么选好产品?亚马逊选品应该考虑的事情

2021年1月29日星期五

2021最新 Java基础面试题精选(附刷题小程序)

推荐使用小程序阅读

为了能让您更加方便的阅读
本文所有的面试题目均已整理至下面的小程序《面试手册》
可以通过微信扫描(或长按)下图的二维码享受更好的阅读体验!

ah_xct


目录
  • 推荐使用小程序阅读
  • 1. Java 基本概念
    • 1.1 Java源程序的扩展名是什么?
    • 1.2 什么是标识符?
    • 1.3 标识符有哪些特点?
    • 1.4 请说明环境变量Path 与 classpath 区别
    • 1.5 java程序经编译后产生的字节码文件扩展名是什么?
    • 1.6 请说出常用的DOS命令并解释?
    • 1.7 请解释Java语言的跨平台特性?
    • 1.8 请说明JDK、JRE、JVM的区别?
  • 2. Java 基础
    • 2.1 注释的分类及作用?
    • 2.2 请说出Java中数据类型的分类?基本数据类型都有哪些?
    • 2.3 Java中数据的类型转换有几种?分别是什么?
    • 2.4 Java语言中的字符char可以存储一个中文汉字吗?为什么呢?
    • 2.5 请说明 && 和 & 的区别?
    • 2.6 请说明 == 与 = 的区别?
    • 2.7 三元运算符的基本格式是什么?
    • 2.8 三元运算符的执行流程是什么?
    • 2.9 使用键盘录入数据的三个步骤是什么?
    • 2.10 请说明for、while、do…while三种循环的格式以及执行流程,以及它们的区别。
    • 2.11 定义一个方法的格式是什么,以及方法的注意事项?
    • 2.12 private 关键字在哪里使用? 被 private 修饰的成员有什么特点?
    • 2.13 为什么要有 this 关键字?this 关键字的含义?
    • 2.14 final 关键字是什么意思,可以修饰那些成员?被修饰的成员有哪些特点?
    • 2.15 形式参数是基本类型要的是什么?是类名、抽象类名、接口名时分别要的是什么?
    • 2.16 返回值类型是基本类型返回的是什么?是类名、抽象类名、接口名分别返回的是什么?
    • 2.17 package它有什么作用?
    • 2.18 import的作用?
    • 2.19 请解释 ==与equals()方法的区别?
    • == 解读
    • equals 解读
    • 2.20 请简述泛型是什么?有什么用?在哪里用?
    • 2.21 如何编写一个泛型方法,让它能够接受泛型参数并返回泛型类型?并举例
    • 2.22 请简述Java中如何使用泛型编写带有参数的类?并举例
    • 2.23 请说说文件名称过滤器FilenameFilter的作用?
    • 2.24 请简述递归是什么?注意事项是什么?
    • 2.25 两个对象的 hashCode() 相同,则 equals() 也一定为 true,对吗?
    • 2.26 Java 中的 Math. round(-1. 5) 等于多少?
  • 3. Java 变量
    • 3.1 请写出Java标识符的命名规则
    • 3.2 变量是什么?
    • 3.3 变量的定义格式是什么?
    • 3.4 成员变量与局部变量的区别?
    • 3.5 静态变量与成员变量的区别?
  • 4. Java String
    • 4.1 String s = "a"+"b"+"c"; 创建了多少对象,分别是什么?
    • 4.2 如何实现StringBuffer和String的相互转换?
    • 4.3 如何实现String和int数据的相互转换
    • 4.4 如何实现【基本数据类型】与【基本数据封装类】之间的相互转换
    • 4.5 请说明String与StringBuffer二者之间的区别?
    • 4.6 请说明StringBuffer与StringBilder二者之间的区别?
    • 4.7 什么是正则表达式?
    • 4.8 如何实现Date与long相互转换?
    • 4.9 如何实现Date与String相互转换?
    • 4.10 String 属于基础的数据类型吗?
    • 4.11 String str="i" 与 String str=new String("i")一样吗?
    • 4.12 如何将字符串反转?
    • 4.13 String 类的常用方法都有那些?
  • 5. Java 类、抽象类、接口、内部类、代码块
    • 5.1 类是什么? 对象是什么?举例说明
    • 5.2 类由哪些内容组成?
    • 5.3 什么是匿名对象?什么时候使用匿名对象?
    • 5.4 构造方法的作用是什么?构造方法的特点是什么?构造方法的注意事项? 构造方法中可不可以写return 语句呢?
    • 5.5 一个类的缺省构造方法可以有参数吗?
    • 5.6 请说明一个对象的创建过程做了哪些事情?
    • 5.7 子父类中构造方法的执行有什么特点?为什么要这样?
    • 5.8 静态代码块,构造代码块,构造方法的执行顺序是什么以及执行特点?
    • 5.9 抽象类是什么,抽象类的特点?
    • 5.10 抽象类中有没有构造方法,如果有它是用来做什么的?
    • 5.11 接口中成员变量的特点,以及成员方法的特点?
    • 5.12 请说出类与类,类与接口,以及接口与接口的关系以及特点?
    • 5.13 抽象类和接口的区别?
    • 成员区别
    • 关系区别
    • 设计理念区别
    • 5.14 内部类有哪些访问特点?
    • 5.15 匿名内部类的格式是什么?其本质是什么?
    • 5.16 抽象类必须要有抽象方法吗?
    • 5.17 抽象类能使用 final 修饰吗?
  • 6. 封装、继承、多态
    • 6.1 请解释什么是方法的重载?
    • 6.2 使用面向对象【封装】的好处有哪些?
    • 6.3 Java 中的类的继承特点是什么以及继承的注意事项?
    • 6.4 继承的好处是什么?
    • 6.5 this 和 super 分别是什么,他们各自的应用场景是什么?
    • 6.6 什么是方法重写?需要注意哪些问题?
    • 6.7 方法重写和重载有什么区别?
    • 6.8 什么是多态,多态的前提是什么?
    • 6.9 多态中成员(成员变量,成员方法,静态成员方法)的访问特点是什么?
    • 6.10 多态的好处?
    • 6.11 多态的弊端是什么,如果我们想访问子类的特有的功能我们应该怎么办?
  • 7. Java 容器
    • 7.1 数组有几种创建的方式?分别是什么?
    • 7.2 请简述集合和数组的异同点?
    • 集合:
    • 数组:
    • 7.3 迭代器Iterator是什么?怎么使用?有什么特点?
    • 7.4 请简述常见的数据结构有哪些?
    • 7.5 请简述ArrayList、Vector、LinkedList三者的特点?
    • ArrayList
    • Vector
    • LinkedList
    • 7.6 请简述ArrayList、Vector、LinkedList,分别在什么时候使用?
    • 线程安全
    • 非线程安全
    • 7.7 请简述并发修改异常产生的原因?如何解决?
    • 异常
    • 解决方式
    • 7.8 请简述List和List之间有什么区别?
    • 7.9 请简述Set集合的特点?
    • 7.10 请简述HashSet是如何保证元素唯一性的?
    • 7.11 请简述TreeSet是如何保证元素唯一性与排序的?
    • 7.12 请说明Map接口和Collection接口的区别
    • 7.13 请说出Map集合的遍历方式
    • 7.14 请说明HashMap和Hashtable的区别
    • 7.15 请解释Collection与Collections的区别
    • 7.16 Java 容器都有哪些?
    • 7.17 List、Set、Map 之间的区别是什么?
    • 7.18 如何决定使用 HashMap 还是 TreeMap?
    • 7.19 说一下 HashMap 的实现原理?
    • 7.20 说一下 HashSet 的实现原理?
    • 7.21 如何实现数组和 List 之间的转换?
    • 7.22 Array 和 ArrayList 有何区别?
    • 7.23 在 Queue 中 poll()和 remove()有什么区别?
    • 7.24 Iterator 和 ListIterator 有什么区别?
    • 7.25 怎么确保一个集合不能被修改?
  • 8. Java 异常
    • 8.1 请说说什么是异常?异常的分类?
    • 8.2 请说出异常处理的方式?
    • 8.3 请说说编译期异常和运行期异常的区别?
    • 8.4 请说说throws与throw的区别?
    • 8.5 请说说final、finally与finalize的区别?
    • 8.6 请说说异常的注意事项及如何使用异常处理?
    • 8.7 请说出最常见到的RuntimeException异常
    • 8.8 请简述IO流的分类
  • 9. Java IO
    • 9.1 请简述字符编码是什么?请说出常见字符编码表?
    • 9.2 请说出学习过的IO流中的常用方法?
    • 9.3 请说出转换流OutputStreamWriter与InputStreamReader 的作用?
    • 9.4 请简述打印流(PrintStream、PrintWriter)的特点?
    • 9.5 BIO、NIO、AIO 有什么区别?
    • 9.6 Files的常用方法都有哪些?


1. Java 基本概念

1.1 Java源程序的扩展名是什么?

.java

1.2 什么是标识符?

在java语言中能够我们自己起名的都叫标识符

1.3 标识符有哪些特点?

标识符是大小写字母、数字字符、$和_组成,不能以数字开头,也不能是java关键字,并且区分大小写

1.4 请说明环境变量Path 与 classpath 区别

path是系统用来指定可指定文件的完整路径。Path是用来搜索所执行的可执行文件路径的,如果执行的可执行文件不在当前目录下,那就会依次搜索path中设置的路径。

classpath是指定你在程序中所使用的类(.class)文件所在的位置。

1.5 java程序经编译后产生的字节码文件扩展名是什么?

字节码文件扩展名是 .class

1.6 请说出常用的DOS命令并解释?

  • d: 回车
    盘符切换
  • dir (directory)
    列出当前目录下的文件以及文件夹
  • cd (change directory)
    改变指定目录(进入指定目录)
  • cd..
    退回到上一层目录
  • cd \
    退回到跟目录
  • md (make directory)
    创建目录
  • rd (remove directory)
    删除目录
  • del (delete)
    删除文件,删除一堆后缀名一样的文件*.txt
  • cls (clear screen)
    清屏
  • exit
    退出dos命令行

1.7 请解释Java语言的跨平台特性?

Java语言是跨平台运行的,其实就是不同的操作系统,使用不同的JVM映射规则,让其与操作系统无关,完成了跨平台性。JVM对上层的Java源文件是不关心的,它关注的只是由源文件生成的类文件(class file)。

1.8 请说明JDK、JRE、JVM的区别?

  • JDK
    Java Development Kit(Java开发工具包)。JDK是整个JAVA的核心,包括了Java运行环境(Java Runtime Environment),一堆Java工具(javac/java/javap等)
  • JRE
    Java Runtime Environment(java运行时环境)。也就是我们说的JAVA平台。所有的Java程序都要在JRE下才能运行。包括JVM和JAVA核心类库和支持文件。与JDK相比,它不包含开发工具(编译器、调试器和其他工具)。
  • JVM
    Java Virtual Mechinal(JAVA虚拟机)。JVM是JRE的一部分,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。

2. Java 基础

2.1 注释的分类及作用?

  • 单行注释
    注释单行代码或为单行代码添加描述的时候使用
  • 多行注释
    注释多行代码或为代码添加多行描述的时候使用
  • 文档注释
    生产java帮助文档的时候使用,开发中常用来描述类、描述方法

2.2 请说出Java中数据类型的分类?基本数据类型都有哪些?

  • 基本数据类型
    • byte
    • short
    • int
    • long
    • float
    • double
    • char
    • boolean
  • 引用数据类型
    • 数组
    • 类
    • 接口

2.3 Java中数据的类型转换有几种?分别是什么?

  • 强制类型转换
    容量大的类型向容量小的类型转换时使用
  • 隐式类型转换
    容器小的类型向容量大的类型转换时使用

2.4 Java语言中的字符char可以存储一个中文汉字吗?为什么呢?

char型变量是用来存储Unicode编码的字符的,unicode编码字符集中包含了汉字,所以,char型变量中可以存储汉字。不过,如果某个特殊的汉字没有被包含在unicode编码字符集中,那么,这个char型变量中就不能存储这个特殊汉字。
补充说明:unicode编码占用两个字节,所以,char类型的变量也是占用两个字节。

2.5 请说明 && 和 & 的区别?

&和&&都可以用作逻辑与的运算符,表示逻辑与(and),当运算符两边的表达式的结果都为true时,整个运算结果才为true,否则,只要有一方为false,则结果为false。

&&还具有短路的功能,即如果第一个表达式为false,则不再计算第二个表达式

&还可以用作位运算符,当&操作符两边的表达式不是boolean类型时,&表示按位与操作。

2.6 请说明 == 与 = 的区别?

  • ==
    比较运算符,用来比较操作符两边的变量的值是否相等。
  • =
    赋值运算符,把操作符右边的值,赋值给左边的变量

2.7 三元运算符的基本格式是什么?

三元运算符的格式是: 条件表达式 ? 表达式1 : 表达式2

2.8 三元运算符的执行流程是什么?

三元运算符的执行流程: 首先计算条件表达式的值看其返回结果是true还是false,如果是true就执行表达式1,如果是false就执行表达式2

2.9 使用键盘录入数据的三个步骤是什么?

  • 第一步导包
    格式: import java.util.Scanner ;位置: 在class上边
  • 第二步创建Scanner对象
    格式: Scanner sc = new Scanner(System.in) ;
  • 第三步获取键盘录入数据
    格式: int x = sc.nextInt() ;

2.10 请说明for、while、do…while三种循环的格式以及执行流程,以及它们的区别。

  • for循环语句格式
    for(初始化语句;判断条件语句;控制条件语句) {
    循环体语句;
    }
    • 执行流程:
      1. 执行初始化语句
      2. 执行判断条件语句,看其结果是true还是false,如果是false,循环结束;如果是true,继续执行。
      3. 执行循环体语句
      4. 执行控制条件语句
      5. 回到b继续
  • while循环语句格式
    while(判断条件语句) {
    循环体语句;
    }
    • 执行流程:
      1. 执行判断条件语句,看其结果是true还是false
        如果是false,循环结束。
        如果是true,继续执行。
      2. 执行循环体语句
      3. 回到a继续
  • do…while循环语句格式
    do {
    循环体语句;
    }while((判断条件语句);
    • 执行流程:
      1. 执行循环体语句
      2. 执行判断条件语句,看其结果是true还是false,如果是false,循环结束;如果是true,继续执行。
      3. 回到a继续
  • 三种循环语句的区别
    • do…while循环至少会执行一次循环体
    • for循环和while循环只有在条件成立的时候才会去执行循环体

注意:写程序优先考虑for循环,再考虑while循环,最后考虑do…while循环

2.11 定义一个方法的格式是什么,以及方法的注意事项?

  • 格式
    修饰符 返回值类型 方法名(参数类型 参数名1, 参数类型 参数名2 ….){
    方法体 ;
    return 返回值 ;
    }
  • 注意事项
    A. 方法不调用不执行
    B. 方法与方法是平级关系,不能嵌套定义
    C. 方法定义的时候参数之间用逗号隔开
    D. 方法调用的时候不用在传递数据类型
    E. 如果方法有明确的返回值,一定要有return带回一个值

2.12 private 关键字在哪里使用? 被 private 修饰的成员有什么特点?

类中的成员需要私有的时候使用private关键字
特点:
是一个权限修饰符。
可以修饰成员(成员变量和成员方法)
被private修饰的成员只在本类中才能访问

2.13 为什么要有 this 关键字?this 关键字的含义?

this用来解决成员变量与局部变量重名问题
this关键字代表的是本类对象引用;谁调用我,this就代表谁.

2.14 final 关键字是什么意思,可以修饰那些成员?被修饰的成员有哪些特点?

final最终的意思。

  • 可修饰

    • 类
    • 成员变量
    • 成员方法
  • 特点

    • final修饰类,此类不能被继承。
    • final修饰变量,变量就成了常量,只能被赋值一次
    • final修饰方法,方法不能被重写

2.15 形式参数是基本类型要的是什么?是类名、抽象类名、接口名时分别要的是什么?

形式参数是基本类型要的是一个基本类型的变量或者具体的常量值

  • 类名时
    要的是一个该类的对象
  • 抽象类名时
    要的是一个继承自该类的一个子类对象
  • 接口时
    要的是一个实现了该接口的子类对象

2.16 返回值类型是基本类型返回的是什么?是类名、抽象类名、接口名分别返回的是什么?

返回值是基本数据类型的时候返回的是一个具体的值

  • 类名时
    本质上返回的是一个该类对应的子类对象
  • 抽象类名时
    返回的应该是一个继承自该类的子类对象
  • 接口名的时
    返回的是一个实现了该接口的子类对象

2.17 package它有什么作用?

package,包的意思,其实就是文件夹,它可以对类进行分类管理

2.18 import的作用?

在不同包下的类之间相互访问的时候,发现,每次使用不同包下的类的时候,都需要加包的全路径。比较麻烦,这个时候,java就提供了( import )导包的功能。
使用import可以将包中的类导入进来,以后使用类的时候,不需导包,直接使用,简化了书写。

2.19 请解释 ==与equals()方法的区别?

== 解读

对于基本类型和引用类型 == 的作用效果是不同的,如下所示:

  • 基本类型:比较的是值是否相同;
  • 引用类型:比较的是引用是否相同;

代码示例:

String x = "string";String y = "string";String z = new String("string");System.out.println(x==y); // trueSystem.out.println(x==z); // falseSystem.out.println(x.equals(y)); // trueSystem.out.println(x.equals(z)); // true

代码解读:因为 x 和 y 指向的是同一个引用,所以 == 也是 true,而 new String()方法则重写开辟了内存空间,所以 == 结果为 false,而 equals 比较的一直是值,所以结果都为 true。

equals 解读

equals 本质上就是 ==,只不过 String 和 Integer 等重写了 equals 方法,把它变成了值比较。看下面的代码就明白了。

首先来看默认情况下 equals 比较一个有相同值的对象,代码如下:

class Cat { public Cat(String name) { this.name = name; } private String name; public String getName() { return name; } public void setName(String name) { this.name = name; }}Cat c1 = new Cat("mbb");Cat c2 = new Cat("mbb");System.out.println(c1.equals(c2)); // false

输出结果出乎我们的意料,竟然是 false?这是怎么回事,看了 equals 源码就知道了,源码如下:

public boolean equals(Object obj) { return (this == obj);}

原来 equals 本质上就是 ==。

那问题来了,两个相同值的 String 对象,为什么返回的是 true?代码如下:

String s1 = new String("mbb");String s2 = new String("mbb");System.out.println(s1.equals(s2)); // true

同样的,当我们进入 String 的 equals 方法,找到了答案,代码如下:

public boolean equals(Object anObject) { if (this == anObject) { return true; } if (anObject instanceof String) { String anotherString = (String)anObject; int n = value.length; if (n == anotherString.value.length) {  char v1[] = value;  char v2[] = anotherString.value;  int i = 0;  while (n-- != 0) {  if (v1[i] != v2[i])   return false;  i++;  }  return true; } } return false;}

原来是 String 重写了 Object 的 equals 方法,把引用比较改成了值比较。

总结 :== 对于基本类型来说是值比较,对于引用类型来说是比较的是引用;而 equals 默认情况下是引用比较,只是很多类重新了 equals 方法,比如 String、Integer 等把它变成了值比较,所以一般情况下 equals 比较的是值是否相等。

2.20 请简述泛型是什么?有什么用?在哪里用?

  • 泛型是什么?
    泛型是一种特殊的类型,它把指定类型的工作推迟到客户端代码声明并实例化类或方法的使用进行。也被称为参数化类型,可以把类型当做参数一样传递过来,在传递过来之前我不明确,但是在使用的时候就就明确了。
  • 泛型的好处
    • 提高了程序的安全性
    • 将运行期遇到的问题转移到了编译期
    • 省去了类型强转的麻烦
  • 泛型的常见应用
    • 泛型类
    • 泛型方法
    • 泛型接口

2.21 如何编写一个泛型方法,让它能够接受泛型参数并返回泛型类型?并举例

泛型方法,指把泛型定义在方法上,使用泛型类型来替代原始类型

public static T[] sort(T[] t){ Arrays.sort(t); return t;}

2.22 请简述Java中如何使用泛型编写带有参数的类?并举例

泛型类,指把泛型定义在类上,使用泛型类型来替代原始类型

class GenericClass { private T t; public void setT(T t) { this.t = t; } public T getT() { return t; }}

2.23 请说说文件名称过滤器FilenameFilter的作用?

FilenameFilter是文件名过滤器,用来过滤不符合规则的文件名,并返回合格的文件。

2.24 请简述递归是什么?注意事项是什么?

所谓递归,是指程序调用自身。
注意,递归不会无休止地调用下去,它必然有一个出口,当满足条件时程序也就结束了,不然的话,那就是死循环了。

2.25 两个对象的 hashCode() 相同,则 equals() 也一定为 true,对吗?

不对,两个对象的 hashCode() 相同,equals() 不一定 true。

代码示例:

String str1 = "通话";String str2 = "重地";System. out. println(String. format("str1:%d | str2:%d", str1. hashCode(),str2. hashCode()));System. out. println(str1. equals(str2));

执行的结果:

str1:1179395 | str2:1179395false

代码解读:很显然"通话"和"重地"的 hashCode() 相同,然而 equals() 则为 false,因为在散列表中,hashCode() 相等即两个键值对的哈希值相等,然而哈希值相等,并不一定能得出键值对相等。

2.26 Java 中的 Math. round(-1. 5) 等于多少?

等于 -1,因为在数轴上取值时,中间值(0.5)向右取整,所以正 0.5 是往上取整,负 0.5 是直接舍弃。

3. Java 变量

3.1 请写出Java标识符的命名规则

  • 包
    全部小写
  • 单层包
    小写,举例:itcast,com
  • 多层包
    小写,并用 . 隔开,举例:cn.itcast, com.baidu
  • 类或者接口:
    • 一个单词
      首字母大写,举例:Student,Demo
    • 多个单词
      每个单词首字母大写,举例:HelloWorld,StudentName
  • 方法或者变量:
    • 一个单词
      首字母小写,举例:name,main
    • 多个单词
      从第二个单词开始,每个单词首字母大写,举例:studentAge,showStudentNames()
  • 常量
    全部大写
    • 一个单词
      大写,举例:PI
    • 多个单词
      大写,并用 _ 隔开,举例:STUDENT_MAX_AGE

3.2 变量是什么?

变量,在程序运行时,值可以被修改的量。

3.3 变量的定义格式是什么?

数据类型 变量名 = 变量值

3.4 成员变量与局部变量的区别?

  • 在类中的位置不同
    成员变量:在类中方法外
    局部变量:在方法定义中或者方法声明上

  • 在内存中的位置不同
    成员变量:在堆内存
    局部变量:在栈内存

  • 生命周期不同
    成员变量:随着对象的创建而存在,随着对象的消失而消失
    局部变量:随着方法的调用而存在,随着方法的调用完毕而消失

  • 初始化值不同
    成员变量:有默认初始化值
    局部变量:没有默认初始化值,必须定义,赋值,然后才能使用。

3.5 静态变量与成员变量的区别?

  • 所属不同
    静态变量属于类,所以也称为为类变量
    成员变量属于对象,所以也称为实例变量(对象变量)

  • 内存中位置不同
    静态变量存储于方法区的静态区
    成员变量存储于堆内存

  • 内存出现时间不同
    静态变量随着类的加载而加载,随着类的消失而消失
    成员变量随着对象的创建而存在,随着对象的消失而消失

  • 调用不同
    静态变量可以通过类名调用,也可以通过对象调用
    成员变量只能通过对象名调用

4. Java String

4.1 String s = "a"+"b"+"c"; 创建了多少对象,分别是什么?

  • 5个对象
    • a
    • b
    • c
    • ab
    • abc

因为字符串的特点是一旦被创建就不能被改变,所有在使用常量进行相加的时候,都是在创建新的字符串对象,最后在把字符串"abc"这个常量值赋值给引用变量s

4.2 如何实现StringBuffer和String的相互转换?

  1. 通过String类的构造方法
  2. 通过StringBuffer类中的toString()方法
  3. 通过StringBuffer类中的substring()方法 (注:不常用)
    String 转换到 StringBuffer的方式:
  4. 通过StringBuffer类的构造方法
  5. 通过StringBuffer类的append()、insert()方法

4.3 如何实现String和int数据的相互转换

  1. String – Integer – int通过Integer类的intValue()方法
  2. 通过Integer类的parseInt(String s)方法
    Int 转换到 String的方式:
  3. Int – Integer – String Integer的toSting()
  4. 通过String类的valueOf()方法
  5. 通过Integer类的toSting(int i)方法
  6. 通过与字符串""相连接

4.4 如何实现【基本数据类型】与【基本数据封装类】之间的相互转换

  1. 通过包装类的构造方法
  2. 通过包装类的静态方法valueOf()
    包装类 转换到 基本数据类型的方式:
  3. 通过包装类的方法xxxValue()

4.5 请说明String与StringBuffer二者之间的区别?

String类表示内容不可以改变的字符串
StringBuffer类表示内容可以被修改的字符串

4.6 请说明StringBuffer与StringBilder二者之间的区别?

  • StringBilder
    是线程不安全的,运行效率高

    如果一个字符串变量是在方法里面定义,这种情况只可能有一个线程访问它,不存在不安全的因素了,则用StringBuilder。

  • StringBuffer
    是线程安全的,运行要低于StringBilder

    如果要在类里面定义成员变量,并且这个类的实例对象会在多线程环境下使用,那么最好用StringBuffer。

4.7 什么是正则表达式?

正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在很多文本编辑器里,正则达表示通常被用来检索、替换那些符合某个模式的文本。

4.8 如何实现Date与long相互转换?

  • Date 转 long
    通过Date类的getTime()方法
  • long 转 Date
    通过Date类的构造方法

4.9 如何实现Date与String相互转换?

  • Date 转 String

    • Date类的toString()方法
    • DateFormat类的format()方法
  • String 转 Date

    • Date类的构造方法

      已过时,被DateFormat类的parse(String s)方法取代

    • DateFormat类的parse()方法

4.10 String 属于基础的数据类型吗?

String 不属于基础类型
基础类型有 8 种:

  • byte
  • boolean
  • char
  • short
  • int
  • float
  • long
  • double

而 String 属于对象

4.11 String str="i" 与 String str=new String("i")一样吗?

不一样,因为内存的分配方式不一样。String str="i"的方式,Java 虚拟机会将其分配到常量池中;而 String str=new String("i") 则会被分到堆内存中。

4.12 如何将字符串反转?

使用 StringBuilder 或者 stringBuffer 的 reverse() 方法。

示例代码:

// StringBuffer reverseStringBuffer stringBuffer = new StringBuffer();stringBuffer.append("abcdefg");System.out.println(stringBuffer.reverse()); // gfedcba// StringBuilder reverseStringBuilder stringBuilder = new StringBuilder();stringBuilder.append("abcdefg");System. out. println(stringBuilder.reverse()); // gfedcba

4.13 String 类的常用方法都有那些?

  • indexOf():返回指定字符的索引。
  • charAt():返回指定索引处的字符。
  • replace():字符串替换。
  • trim():去除字符串两端空白。
  • split():分割字符串,返回一个分割后的字符串数组。
  • getBytes():返回字符串的 byte 类型数组。
  • length():返回字符串长度。
  • toLowerCase():将字符串转成小写字母。
  • toUpperCase():将字符串转成大写字符。
  • substring():截取字符串。
  • equals():字符串比较。

5. Java 类、抽象类、接口、内部类、代码块

5.1 类是什么? 对象是什么?举例说明

是一组相关属性和行为的集合是一个抽象的东西,对象则是该类的一个具体的体现。

举例: 学生就是一个类,然后每一个学生都是学生的一个个具体的体现,所以每一个学生就是一个学生。

5.2 类由哪些内容组成?

类由成员变量和成员方法组成
成员变量对应的就是事物的属性(就是事物固有的信息,比如: 人的属性有身高 , 姓名 , 年龄 , 学历…) , 成员方法对应的是行为(行为: 就是该事物可以做的事情,比如:人的行为有: 吃饭,睡觉…)

5.3 什么是匿名对象?什么时候使用匿名对象?

匿名对象指:没有起名字的对象
使用匿名对象:
a:调用方法,仅仅只调用一次的时候
b:匿名对象可以作为实际参数传递

5.4 构造方法的作用是什么?构造方法的特点是什么?构造方法的注意事项? 构造方法中可不可以写return 语句呢?

构造方法的作用是用于给类的成员变量赋值,完成类的初始化工作

  • 构造方法的特点:
    构造方法的名称和类名相同
    构造方法没有返回值类型,连void也没有
    构造方法没有具体的返回值

  • 构造方法的注意事项:

    • 如果一个类没有给出构造方法,系统将会提供一个默认无参的构造方法

    • 如果我们给出类构造方法,系统将不会提供默认无参的构造方法,这个时候如果我们还想使用无参的构造方法来创建对象,那么就需要我们给出无参的构造方法
      可以写空的return语句.

5.5 一个类的缺省构造方法可以有参数吗?

一个类的缺省构造方法没有参数

5.6 请说明一个对象的创建过程做了哪些事情?

Student s = new Student();

  1. 将Student.class 字节码文件加载到内存
  2. 在栈内存中,开辟一个空间存储 s变量,用来记录Student对象的引用
  3. 在堆内存中,开辟一个空间存储 new Student()对象的成员信息
  4. 加载类中静态成员
  5. 执行类中静态代码块
  6. 加载对象中普通成员
  7. 执行构造代码块
  8. 执行构造方法
  9. 将new Student()的地址赋值给 s 变量

5.7 子父类中构造方法的执行有什么特点?为什么要这样?

  1. 子类有所有的构造方法默认都会访问父类中空参数的构造方法。
    因为子类会继承父类中的数据,可能还会使用父类的数据。所以,子类初始化之前,一定要先完成父类数据的初始化。
    每一个构造方法的第一条语句默认都是:super()
  2. 如果父类中没有空参数的构造方法,通过下列方式解决
    • 子类通过super去显示调用父类其他的带参的构造方法
    • 子类通过this去调用本类的其他构造方法(本类其他构造也必须首先可以访问了父类构造)

注意:super(…)或者this(…)必须出现在第一条语句上,否则,就会有父类数据的多次初始化

5.8 静态代码块,构造代码块,构造方法的执行顺序是什么以及执行特点?

  1. 先执行所有的静态代码块,再执行所有的构造代码块,最后执行构造方法
  2. 静态代码块只执行一次, 构造代码块和构造方法,每创建一次对象就执行一次

5.9 抽象类是什么,抽象类的特点?

  • 抽象类的定义
    使用了关键字abstract声明的类叫做"抽象类"。如果一个类里包含了一个或多个抽象方法,类就必须指定成abstract(抽象)。"抽象方法",属于一种不完整的方法,只含有一个声明,没有方法主体。

  • 抽象类的特点:

    • 抽象类的定义格式: abstract class 类名{}

    • 抽象方法的定义格式: public abstract 返回值类型 方法名();

    • 抽象类中可以存在抽象方法,也可以存在非抽象方法

    • 抽象类不能直接进行实例化,我们可以使用多态的形式进行进行间接实例化

    • 抽象类的子类

      • 可以是抽象类

        如果子类还是抽象类,那么我们还是不能进行实例化,还需要一个子类去继承

      • 也可以是非抽象类

        子类必须重写父类的抽象方法

5.10 抽象类中有没有构造方法,如果有它是用来做什么的?

抽象类虽然不能进行实例化,但是抽象类中是存在构造方法,该构造方法的作用是用于子类访问父类数据时的初始化.

5.11 接口中成员变量的特点,以及成员方法的特点?

接口中的成员变量都是常量,存在默认的访问修饰符:

public static final

接口中的成员方法都是抽象方法,存在默认的访问修饰符:

public abstract

5.12 请说出类与类,类与接口,以及接口与接口的关系以及特点?

  • 类与类
    是继承的关系,只支持单继承,可以是多层继承。
  • 类与接口
    是实现的关系,可以是多实现
  • 特点
    • 一个类可以继承一个类的同时,还可以实现多个接口
    • 接口与接口是继承的关系,可以是单继承也可以是多继承

5.13 抽象类和接口的区别?

成员区别

  • 抽象类
    • 成员变量
      可以是变量,也可以是常量
  • 构造方法
    有
  • 成员方法
    可以抽象,也可以非抽象
  • 接口:
    • 成员变量
      只可以常量
    • 成员方法
      只可以抽象

关系区别

  • 类与类
    继承,单继承
  • 类与接口
    实现,单实现,多实现
  • 接口与接口
    继承,单继承,多继承

设计理念区别

  • 抽象类
    被继承体现的是:"is a"的关系。 抽象类中定义的是该继承体系的共性功能。
  • 接口
    被实现体现的是:"like a"的关系。 接口中定义的是该继承体系的扩展功能。

5.14 内部类有哪些访问特点?

  1. 内部类可以直接访问外部类的成员,包括私有
  2. 外部类要访问内部类的成员,必须先创建内部类对象

5.15 匿名内部类的格式是什么?其本质是什么?

  • 匿名内部类的格式
    new 类名或者接口名() {
    方法重写 ;
    } ;
  • 本质
    匿名内部类本质是一个继承了某一个类或者实现了某一个接口的子类对象

5.16 抽象类必须要有抽象方法吗?

不需要,抽象类不一定非要有抽象方法。

示例代码:

abstract class Cat { public static void sayHi() { System.out.println("hi~"); }}

上面代码,抽象类并没有抽象方法但完全可以正常运行。

5.17 抽象类能使用 final 修饰吗?

不能,定义抽象类就是让其他类继承的,如果定义为 final 该类就不能被继承,这样彼此就会产生矛盾,所以 final 不能修饰抽象类

6. 封装、继承、多态

6.1 请解释什么是方法的重载?

方法重载指在同一个类中,允许存在一个以上的同名方法,只要它们的参数个数或者参数类型不同即可。

方法重载特点:
a) 与返回值类型无关,只看方法名和参数列表
b) 在调用时,虚拟机通过参数列表的不同来区分同名方法

6.2 使用面向对象【封装】的好处有哪些?

隐藏实现细节,提供公共的访问方式;
提高了代码的复用性;
提高安全性。

6.3 Java 中的类的继承特点是什么以及继承的注意事项?

继承的特点: 在java语言中类的继承只支持单继承,不支持多继承.但是可以多层继承。

继承的注意事项:

  1. 子类只能继承父类非私有的成员
  2. 子类不能继承父类的构造方法,但是可以通过super去访问父类的构造方法
  3. 不要为了某个功能去使用继承

6.4 继承的好处是什么?

  1. 提高了代码的维护型
  2. 提供了代码的复用性
  3. 让类与类之间产生了关系, 是多态的前提

6.5 this 和 super 分别是什么,他们各自的应用场景是什么?

  • this
    代表的是本类对象的引用 , 谁调用我这个方法,这个方法里边的this就代表谁。一般的使用场景是,当局部变量隐藏了成员变量的时候,我们可以使用this去明确指定要访问的是成员变量

  • super
    代表的是父类存储空间的一个标志(可以理解为父类对象的引用),我们可以使用super来访问父类的成员

6.6 什么是方法重写?需要注意哪些问题?

方法重写:指子类中出现了和父类中一模一样的方法声明,也被称为方法覆盖,方法复写

需要注意的问题:

1. 父类中私有方法不能被重写2. 子类重写父类方法时,访问权限不能更低3. 父类静态方法,子类也必须通过静态方法进行重写。(其实这个算不上方法重写,但是现象确实如此)

6.7 方法重写和重载有什么区别?

  • 重载Overload
    表示同一个类中可以有多个名称相同的方法,但这些方法的参数列表各不相同(即参数个数或类型不同),与返回值类型无关。
  • 重写Override
    发生在子父类中的一个现象, 子类中出现了和父类中一模一样的方法,与返回值有关.

6.8 什么是多态,多态的前提是什么?

一种事物在不同时刻表现出来的状态就是多态

多态的前提:

  • 需要有继承
  • 需要有方法重写(其实没有也是可以的,但是没有意义),不同状态的表现就是就是靠方法重写体现的
  • 需要有父类的引用指向子类对象:Fu f = new 子类()

6.9 多态中成员(成员变量,成员方法,静态成员方法)的访问特点是什么?

  • 访问成员变量
    编译看左边 , 运行看左边

    因为成员变量其实就是属性,属性就是只该事物的描述信息,所以使用父类在访问的时候,访问的就是父类的成员变量

  • 成员方法
    编译看左边,运行看右边

    这个是多态的本质,存在动态绑定的机制

  • 静态成员方法
    编译看左边,运行看左边

    所以说静态算不上重写

6.10 多态的好处?

  1. 提供了代码的维护性(通过继承保证)
  2. 提供了代码的扩展性(通过多态保证),这个特点也体现了多态的最常见的应用,作为参数传递.

6.11 多态的弊端是什么,如果我们想访问子类的特有的功能我们应该怎么办?

多态的弊端,不能访问子类中特有的功能
如果我们还想使用子类中特有的功能,我们需要使用向下转型

向下转型: 就是将父类的引用强制转换成子类的引用,在向下转型的过程中需要注意一个异常: ClassCastException

7. Java 容器

7.1 数组有几种创建的方式?分别是什么?

2种。动态创建和静态创建。

7.2 请简述集合和数组的异同点?

集合:

  • 可以存储不同类型的元素(通常使用存储一种类型元素)
  • 集合的长度可以改变

数组:

  • 必须存储相同一类型的元素
  • 数组的长度固定

7.3 迭代器Iterator是什么?怎么使用?有什么特点?

Iterator 接口提供遍历任何 Collection 的接口。我们可以从一个 Collection 中使用迭代器方法来获取迭代器实例。迭代器取代了 Java 集合框架中的 Enumeration,迭代器允许调用者在迭代过程中移除元素。

Iterator 使用代码如下:

List<String> list = new ArrayList<>();Iterator<String> it = list.iterator();while(it.hasNext()){ String obj = it.next(); System.out.println(obj);}

Iterator的特点是更加安全,因为它可以确保,在当前遍历的集合元素被更改的时候,就会抛出 ConcurrentModificationException 异常。

7.4 请简述常见的数据结构有哪些?

  • 线性表
  • 链表
  • 栈
  • 队列
  • 树
  • 哈希表

7.5 请简述ArrayList、Vector、LinkedList三者的特点?

ArrayList

底层数组结构

  • 特点
    • 线程不同步
    • 效率高
    • 元素查找快
    • 增删慢;

Vector

底层数组结构

  • 特点
    • 线程同步
    • 安全
    • 元素查找快
    • 增删慢

LinkedList

底层链表结构

  • 特点
    • 线程不同步
    • 效率高
    • 元素增删快
    • 查找慢

7.6 请简述ArrayList、Vector、LinkedList,分别在什么时候使用?

线程安全

Vector

非线程安全

  • 查找多
    ArrayList
  • 增删多
    LinkedList

7.7 请简述并发修改异常产生的原因?如何解决?

异常

ConcurrentModificationException

在迭代器迭代的过程中,集合中的元素个数发生了改变,此时导致并发修改异常。

解决方式

  1. 通过列表迭代器自带的方法完成元素增删操作。
  2. 通过for循环遍历集合,使用集合中的方法完成元素增删操作。

7.8 请简述List<? extends T>和List<? super T>之间有什么区别?

  • List<? extends T>
    向下限制
    ? extends T : 代表接收的泛型类型为T类型或T子类类型
  • List<? super T>
    向上限制
    ? super T :代表接收的泛型类型为T类型或T父类类型

7.9 请简述Set集合的特点?

  1. 不能存储重复元素;
  2. 元素是按照某种排序规则存储的

7.10 请简述HashSet是如何保证元素唯一性的?

HashSet集合中存储的元素,通过重写hashCode() 与 equals()方法来保证元素唯一性

7.11 请简述TreeSet是如何保证元素唯一性与排序的?

  1. 实现自然排序接口 Comparable,重写 compareTo(T t)方法
  2. 实现比较器排序接口 Comparator,重写 compare(T t1, T t2)方法

7.12 请说明Map接口和Collection接口的区别

Map接口是双列集合顶层接口,每个位置存储一对元素(key, value)
Collection接口是单列集合顶层接口,每个位置存储一个元素

7.13 请说出Map集合的遍历方式

  1. 键找值
  2. 键值对对象,找键,找值

7.14 请说明HashMap和Hashtable的区别

  • HashMap
    • 线程不同步
    • 效率高
    • 可以存储null键null值
  • Hashtable
    • 线程同步
    • 数据安全
    • 不可以存储null键null值

7.15 请解释Collection与Collections的区别

  • Collection
    单列集合的顶层接口,包含集合中常用的方法。
  • Collections
    集合工具类,包含获取集合最大元素值、集合排序等方法。

7.16 Java 容器都有哪些?

Java 容器分为 Collection 和 Map 两大类,其下又有很多子类,如下所示:

  • Collection
  • List
    • ArrayList
    • LinkedList
    • Vector
    • Stack
  • Set
    • HashSet
    • LinkedHashSet
    • TreeSet
  • Map
    • HashMap
    • LinkedHashMap
    • TreeMap
    • ConcurrentHashMap
    • Hashtable

7.17 List、Set、Map 之间的区别是什么?

List、Set、Map 的区别主要体现在两个方面:元素是否有序、是否允许元素重复。

三者之间的区别,如下表:

7.18 如何决定使用 HashMap 还是 TreeMap?

对于在 Map 中插入、删除、定位一个元素这类操作,HashMap 是最好的选择,因为相对而言 HashMap 的插入会更快,但如果你要对一个 key 集合进行有序的遍历,那 TreeMap 是更好的选择。

7.19 说一下 HashMap 的实现原理?

HashMap 基于 Hash 算法实现的,我们通过 put(key,value)存储,get(key)来获取。当传入 key 时,HashMap 会根据 key. hashCode() 计算出 hash 值,根据 hash 值将 value 保存在 bucket 里。当计算出的 hash 值相同时,我们称之为 hash 冲突,HashMap 的做法是用链表和红黑树存储相同 hash 值的 value。当 hash 冲突的个数比较少时,使用链表否则使用红黑树。

7.20 说一下 HashSet 的实现原理?

HashSet 是基于 HashMap 实现的,HashSet 底层使用 HashMap 来保存所有元素,因此 HashSet 的实现比较简单,相关 HashSet 的操作,基本上都是直接调用底层 HashMap 的相关方法来完成,HashSet 不允许重复的值。

7.21 如何实现数组和 List 之间的转换?

  • 数组转 List
    使用 Arrays.asList(array) 进行转换。

  • List 转数组
    使用 List 自带的 toArray() 方法。

  • 代码示例:

    // list to arrayList<String> list = new ArrayList<String>();list.add("这个");list.add("小程序");list.add("很赞");list.toArray();// array to listString[] array = new String[]{"这个","小程序","很赞"};Arrays.asList(array);

7.22 Array 和 ArrayList 有何区别?

  • Array 可以存储基本数据类型和对象,ArrayList 只能存储对象。
  • Array 是指定固定大小的,而 ArrayList 大小是自动扩展的。
  • Array 内置方法没有 ArrayList 多,比如 addAll、removeAll、iteration 等方法只有 ArrayList 有。

7.23 在 Queue 中 poll()和 remove()有什么区别?

  • 相同点:都是返回第一个元素,并在队列中删除返回的对象。

  • 不同点:如果没有元素 poll()会返回 null,而 remove()会直接抛出 NoSuchElementException 异常。

  • 代码示例:

    Queue<String> queue = new LinkedList<String>();queue.offer("string"); // addSystem.out.println(queue.poll());System.out.println(queue.remove());System.out.println(queue.size());

7.24 Iterator 和 ListIterator 有什么区别?

  • Iterator 可以遍历 Set 和 List 集合,而 ListIterator 只能遍历 List。
  • Iterator 只能单向遍历,而 ListIterator 可以双向遍历(向前/后遍历)。
  • ListIterator 从 Iterator 接口继承,然后添加了一些额外的功能,比如添加一个元素、替换一个元素、获取前面或后面元素的索引位置。

7.25 怎么确保一个集合不能被修改?

可以使用 Collections.unmodifiableCollection(Collection c) 方法来创建一个只读集合,这样改变集合的任何操作都会抛出 Java. lang. UnsupportedOperationException 异常。

示例代码如下:

List<String> list = new ArrayList<>();list. add("x");Collection<String> clist = Collections.unmodifiableCollection(list);clist.add("y"); // 运行时此行报错System.out.println(list.size());

8. Java 异常

8.1 请说说什么是异常?异常的分类?

  • 什么是异常?
    Java异常是java提供的用于处理程序中错误的一种机制。
    所谓错误是指在程序运行的过程中发生的一些异常事件(如:除0错误,数组下标越界,所要读取的文件不存在)。设计良好地程序应该在程序异常发生时提供处理这些错误的方法,使得程序不会因为异常的发送而阻断或产生不可预见的结果。

    Java程序的执行过程中如出现异常事件,可以生成一个异常类对象,该异常对象封装了异常事件的信息,并将被提交给java运行时系统,这个过程称为抛出异常。

    当java运行时系统接收到异常对象时,会寻找能处理这一异常的代码并把当前异常对象交其处理,这一过程称为捕获异常。

  • 异常的分类

    • Exception
      所有异常类的父类,其子类对应了各种各样的可能出现的异常事件,一般需要用户显示的声明或捕获。
    • Error
      称为错误,由java虚拟机生成并抛出,包括动态链接失败,虚拟机错误等,程序对其不做处理。
    • Runtime Exception
      一类特殊的异常,如被0除、数组下标超范围等,其产生比较频繁,处理麻烦,如果显示的声明或捕获将会对程序可读性和运行效率影响很大。因此由系统自动检测并将它们交给缺省的异常处理程序(用户可不必对其处理)。

8.2 请说出异常处理的方式?

  • 捕获异常

    try{}catch(XxxException e){}finally{}
  • 抛出异常

    throw \ throws()
  • 异常五个关键字

    • try
      try{…}语句制定了一段代码,这段代码就是一次捕获并处理异常的范围。在执行过程中,这段代码可能会产生并抛出一种或几种类型的异常对象,它后面的catch语句要分别对这些异常做相应的处理。如果没有异常发生,所有的catch代码段都被略过不执行。
    • catch
      在catch语句块中是对异常进行处理的代码,每个try语句块可以伴随一个或多个catch语句,用于处理可能产生的不同类型的异常对象。在catch中声明的异常对象(catch(XxxException e))封装了异常事件发生的信息,在catch语句块中可以使用这个对象的一些方法获取这些信息。
    • finally
      finally语句为异常处理提供一个统一的出口,使得在控制流程转到程序的其他部分以前,能够对程序的状态做统一的管理。无论try所指定的程序块中是否抛出异常,finally所指定的代码都要执行。通常在finally语句中可以进行资源的清除工作。
    • throw
      throws关键字通常被应用在声明方法时,用来指定可能抛出的异常。多个异常可以使用逗号隔开。当在主函数中调用该方法时,如果发生异常,就会将异常抛给指定异常对象。
    • throws
      throw关键字通常用在方法体中,并且抛出一个异常对象。程序在执行到throw语句时立即停止,它后面的语句都不执行。通常throw抛出异常后,如果想在上一级代码中捕获并处理异常,则需要在抛出异常的方法中使用throws关键字在方法声明中指定要抛出的异常;如果要捕获throw抛出的异常,则必须使用try{}catch{}语句。

8.3 请说说编译期异常和运行期异常的区别?

  • 编译时异常
    程序正确,但因为外在的环境条件不满足引发。对商用软件系统,程序开发者必须考虑并处理这类异常。Java编译器强制要求处理这类异常,如果不捕获这类异常,程序将不能被编译。
  • 运行期异常
    这意味着程序存在bug,如数组越界,0被除,传入参数不满足规则等,这类异常需要更改程序来避免,java编译器强制要求处理这类异常。
  • 错误
    一般很少见,也很难通过程序解决。它可能源于程序的bug,但一般更可能源于环境问题,如内存耗尽。错误在程序中无须处理,而由运行环境处理。

8.4 请说说throws与throw的区别?

  • throws
    通常被应用在声明方法时,用来指定可能抛出的异常。多个异常可以使用逗号隔开。当在主函数中调用该方法时,如果发生异常,就会将异常抛给指定异常对象。
  • throw
    通常用在方法体中,并且抛出一个异常对象。程序在执行到throw语句时立即停止,它后面的语句都不执行。通常throw抛出异常后,如果想在上一级代码中捕获并处理异常,则需要在抛出异常的方法中使用throws关键字在方法声明中指定要抛出的异常;如果要捕获throw抛出的异常,则必须使用try{}catch{}语句。

8.5 请说说final、finally与finalize的区别?

  • final
    用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。内部类要访问局部变量,局部变量必须定义成final类型。
  • finally
    是异常处理语句结构的一部分,表示总是执行。
  • finalize
    是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提高垃圾收集时的其他资源回收,例如关闭文件等。JVM不保证此方法总被调用。

8.6 请说说异常的注意事项及如何使用异常处理?

  1. 子类重写父类方法时,子类的方法必须抛出相同的异常或父类异常的子类。
  2. 如果父类抛出了多个异常,子类重写父类时,只能抛出相同的异常或者是他的子集,子类不能抛出父类没有的异常。
  3. 如果被重写的方法没有异常抛出,那么子类的方法绝对不可以抛出异常,如果子类方法内有异常发生,那么子类只能try…catch,不能throws

8.7 请说出最常见到的RuntimeException异常

  • NullPointerException
    空指针引用异常
  • ClassCastException
    类型强制转换异常
  • IllegalArgumentException
    传递非法参数异常
  • ArithmeticException
    算术运算异常
  • ArrayStoreException
    向数组中存放与声明类型不兼容对象异常
  • IndexOutOfBoundsException
    下标越界异常
  • NumberFormatException
    数字格式异常

8.8 请简述IO流的分类

  • 字节流
    • 字节输入流 InputStream
    • 字节输出流 OutputStream
  • 字符流
    • 字符输入流 Reader
    • 字符输出流 Writer

9. Java IO

9.1 请简述字符编码是什么?请说出常见字符编码表?

  • 字符编码是什么?
    字符编码(英语:Character encoding)也称字集码,是把字符集中的字符编码为指定集合中某一对象,以便文本在计算机中存储和通过通信网络的传递。常见的例子包括将拉丁字母表编码成摩斯电码和ASCII。其中,ASCII将字母、数字和其他符号编号,并用7比特的二进制来表示这个整数。通常会额外使用一个扩充的比特,以便以1个字节的方式存储。
  • 常见的字符编码表如下
    • ASCII
    • GB2312
      是一个简体中文字符集,由6763个常用汉字和682个全角的非汉字字符组成。
    • GBK
      GBK编码标准兼容GB2312,共收录汉字21003个、符号883个,并提供1894个造字码位,简、繁体字融于一库
    • GB18030
      是在GBK基础上增加了一部分汉字
      Big5:在台湾、香港与澳门地区,使用的是繁体中文字符集
    • Unicode
      将世界上所有的符号都纳入其中,无论是英文、日文、还是中文等,大家都使用这个编码表,这样就利于同一的管理,在这个编码表中每一个字符占两个字节
    • UTF-8
      为了提高Unicode的编码效率,于是就出现了UTF-8编码。UTF-8可以根据不同的符号自动选择编码的长短。比如英文字母可以只用1个字节就够了。

9.2 请说出学习过的IO流中的常用方法?

  • 字节输入流 InputStream
    • read()
      读取一个字节
    • read(byte[])
      读取一个字节数组
  • 字节输出流
    • write(int)
      写入一个字节
    • write(byte[])
      写入一个字节数组
  • 字符输入流
    • read()
      读取一个字符
    • read(char[])
      读取一个字符数组
  • 字符缓冲输入流
    • readLine()
      读取一行字符串
  • 字符输出流
    • write(int)
      写入一个字符
    • write(char[])
      写入一个字符数组
    • write(String)
      写入一个字符串
  • 字符缓冲输出流
    • newLine()
      写入一个换行符

9.3 请说出转换流OutputStreamWriter与InputStreamReader 的作用?

  • OutputStreamWriter
    使用编码表对字节流的数据进行编码
  • InputStreamReader
    使用编码表对字节流中的数据进行解码

9.4 请简述打印流(PrintStream、PrintWriter)的特点?

  • PrintStream的特点
    在OutputStream基础之上提供了增强的功能,即可以方便地输出各种类型的数据(而不仅限于byte类型)的格式化表示形式。PrintStream的方法从不抛出IOException
  • PrintWriter的特点
    提供了PrintStream的所有打印方法,其方法也从不抛出IOException。
  • 区别
    作为处理流使用时,PrintStream只能封装OutputStream类型的字节流,而PrintWriter既可以封装OutputStream类型的字节流,还能够封装Writer类型的字符输出流并增强其功能。

9.5 BIO、NIO、AIO 有什么区别?

  • BIO
    Block IO 同步阻塞式 IO,就是我们平常使用的传统 IO,它的特点是模式简单使用方便,并发处理能力低。
  • NIO
    New IO 同步非阻塞 IO,是传统 IO 的升级,客户端和服务器端通过 Channel(通道)通讯,实现了多路复用。
  • AIO
    Asynchronous IO 是 NIO 的升级,也叫 NIO2,实现了异步非堵塞 IO ,异步 IO 的操作基于事件和回调机制。

9.6 Files的常用方法都有哪些?

  • Files.exists():检测文件路径是否存在。
  • Files.createFile():创建文件。
  • Files.createDirectory():创建文件夹。
  • Files.delete():删除一个文件或目录。
  • Files.copy():复制文件。
  • Files.move():移动文件。
  • Files.size():查看文件个数。
  • Files.read():读取文件。
  • Files.write():写入文件。

本文由博客一文多发平台 OpenWrite 发布!









原文转载:http://www.shaoqun.com/a/521190.html

跨境电商:https://www.ikjzd.com/

002315焦点科技:https://www.ikjzd.com/w/1831

美菜:https://www.ikjzd.com/w/1874


推荐使用小程序阅读为了能让您更加方便的阅读本文所有的面试题目均已整理至下面的小程序《面试手册》可以通过微信扫描(或长按)下图的二维码享受更好的阅读体验!目录推荐使用小程序阅读1.Java基本概念1.1Java源程序的扩展名是什么?1.2什么是标识符?1.3标识符有哪些特点?1.4请说明环境变量Path与classpath区别1.5java程序经编译后产生的字节码文件扩展名是什么?1.6请说出常用的
agora:agora
zozotown:zozotown
一文教你读懂亚马逊品牌备案后台操作流程!:一文教你读懂亚马逊品牌备案后台操作流程!
口述:五年感情敌不过一张房产证:口述:五年感情敌不过一张房产证
2019穆斯林斋月的习俗活动&禁忌事项一览!:2019穆斯林斋月的习俗活动&禁忌事项一览!