java多线程实例锁问题

1.我在一个方法里面加了两个锁,锁对象分别 是两个实例,
有一个实例会将本实例的线程挂起,
按理说另就只会执行另外一个同步代码块里的内容,
真实情况是两个都已经挂起了,

我的理解是只有锁对象是类class才会两个都挂起,



class Customer implements Runnable{
    Product p;
    Product p1;
    public Customer(Product p,Product p1){
        this.p = p;
        this.p1= p1;
    }
    public Customer(Product p){
        this.p = p; 
    }
    @Override
    public void run() {
        while(true){
            System.out.println("我是消费者被执行了");
            synchronized (p1) {
                System.out.println(p1);
                System.out.println("hellll");
                try {
                    Thread.sleep(222);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            synchronized (p) {
                if(p.flag){
                    System.out.println("消费了"+p.name+"价格:"+p.price);
//                  p.flag=false; 
                    p.notify();
                }else {
                    try {
                        Thread.sleep(1333);
                        p.wait();
                    } catch (InterruptedException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
            } 


        }

    }

}


        Thread cus1 = new Thread(customer1);
        cus1.start();

1个回答

首先,你这个测试类中只有两个线程一个main线程,Thread cus1 = new Thread(customer1);本质上并没有对于锁p1,p的竞争问题。
如果要测试竞争,需要多定义几个执行ustomer 任务的线程。
其次,sleep操作是现场休眠,并不是由于等待锁而挂起了。

soldier_jw
soldier_jw 回复毕小宝: 现在我理解了,可能跟你理解的不太一样,sleep方法只是将线程阻塞一定时间,并不会挂起线程,而是执行到以p.wait()时,当前线程会进入到以p对象为标识的线程池中,所以p1里面的代码不会执行,因为当前线程已经挂起了
大约一年之前 回复
wojiushiwo945you
毕小宝 回复soldier_jw: 那你理解错了,前面p1加锁后线程sleep了,后面的p的代码块就不会执行。如果有另外一个线程的话,线程就会挂在等待p1锁的地方了。
大约一年之前 回复
soldier_jw
soldier_jw 你好,我的理解是锁对象是p的代码被 加锁了,里面的代码不会被执行, 只会不停的执行p1对象锁里面的代码,,,,我这边是直接就卡住了
大约一年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
java多线程实例的成员变量问题

有一个线程通过下面listObj里面的线程实例修改线程的成员变量(修改前会判断线程实例的isBusy状态),那么被修改的该线程实例为毛有时运行会报空值,即逻辑操作取值部分? List<A> listObj=new ArrayList<A>(); for(int i=0;i<30;i++){ A a=new A(); Thread thread=new Thread(a); listObj.add(a); thread.start(); } class A implements Runnable{ public Map map; public boolean isBusy=false; public void run(){ while(true){ if(map!=null){ isBusy=true; //逻辑操作,不影响map,只读 map=null; isBusy=false; }else{ try { Thread.sleep(10); } catch (InterruptedException e) { e.printStackTrace(); } } } } }

请教使用java多线程理解的问题

我觉得面向业务的多线程解决问题的两种思路,一个完整的A业务。1.拆分为多个部分由不同线程协作完成。 2.多个线程多次完成A业务,线程间没有协作。 对于第一种可以用阻塞唤醒,阻塞队列完成。 那第二种难道是多次启动线程就行了吗?,那跟每次新new一个A业务对象有什么区别? 还有什么时候使用多线程最好,举个例子 恳请指点,谢谢谢谢。。

Java多线程,赛跑问题

java初学者,做一个三个学生线程赛跑的例子,当赛跑完成时,打印出比赛成绩,然后线程结束,不知道怎么让他们在某一刻停止,打印出不同成绩

java 多用户线程同步锁

SSM 框架做一个用户取钱的业务,为了防止一个用多端同时取钱, 可以再业务方法前加上synchronized 是方法变成同步方法,每一个请求经过这个业务方法是只能同步等待, 但是如果有很多个用户同时取钱呢(,本来不同的用户取钱时不会相互影响的,) 如果这样做就会降低程序的执行效率, 请问谁知道怎么做?

java多线程编程一定要用sleep方法才能实现吗?

java多线程编程一定要用sleep方法才能实现吗? 我编程时用sleep方法结果正常,但是把sleep方法去掉就乱了,设置flag也没有用。 请帮忙解释下。

一个java多线程的问题

为什么代码中线程VolatileExample 不会终止 ``` package thread; public class VolatileExample extends Thread{ private static boolean flag = false; @Override public void run() { while (!flag) { //System.out.println(1); } } public static void main(String[] args) throws InterruptedException { VolatileExample v = new VolatileExample(); v.start(); Thread.sleep(1000); flag = true; } } ``` 而 ``` package thread; public class VolatileExample extends Thread{ private static boolean flag = false; @Override public void run() { while (!flag) { System.out.println(1); } } public static void main(String[] args) throws InterruptedException { VolatileExample v = new VolatileExample(); v.start(); Thread.sleep(1000); flag = true; } } ``` 却可以正常终止。 还有这样 ``` package thread; public class VolatileExample extends Thread{ private static volatile boolean flag = false; @Override public void run() { while (!flag) { //System.out.println(1); } } public static void main(String[] args) throws InterruptedException { VolatileExample v = new VolatileExample(); v.start(); Thread.sleep(1000); flag = true; } } ``` 线程也可以正常终止。。。求大神指导。。

java多线程画图,界面空白

尝试过使用事件分发线程,但还是空白,线程确实是运行着的。 import java.awt.Color; import java.awt.Graphics; import javax.swing.JPanel; import javax.swing.SwingUtilities; public class test1 extends JPanel { public void paint(Graphics g){ Thread t1=new Thread(new Runnable(){ public void run(){ g.fillRect(50, 50, 50, 50); for(int i=0;;i++){ g.setColor(Color.BLACK); g.fillRect(100+i*20,65,20,20); try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } g.setColor(Color.WHITE); g.fillRect(100+i*20,65,20,20); if((100+(i+1)*20)>=1500){ System.out.println("over1"); break; } } }}); Thread t2=new Thread(){ public void run(){ g.fillRect(50, 500, 50, 50); for(int i=0;;i++){ g.setColor(Color.BLACK); g.fillRect(100+i*20,515,20,20); try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } g.setColor(Color.WHITE); g.fillRect(100+i*20,515,20,20); if((100+(i+1)*20)>=1500){ System.out.println("over2"); break; } } }}; t1.start(); t2.start(); // SwingUtilities.invokeLater(t1); // SwingUtilities.invokeLater(t2); } public test1() { setBounds(50,50,1500,1000); setVisible(true); repaint(); } public static void main(String[] args) { new test1(); } }

Java多线程问题——同样的代码,得不到一样的结果?

初学自学java,学到多线程时,按照书中例子里的代码自己手动敲了一遍,怎么都得不到和书中一样的输出结果,请问为什么会这样? 附上自己敲的代码&运行结果和书中的代码及其运行结果 自己敲的代码如下: ``` public class ThreadDemo9_2 { public static void main(String args[]) { TestThread t=new TestThread(); new Thread(t).start(); for(int i=0;i<10;i++) System.out.println("main线程在运行。"); } } class TestThread implements Runnable { public void run() { for(int i=0;i<10;i++) System.out.println("TestThread在运行。"); } } ``` 自己敲的代码运行结果: ![](https://img-ask.csdn.net/upload/201703/08/1488980729_31857.png) 书中的代码 ![](https://img-ask.csdn.net/upload/201703/08/1488980786_728097.png) 书中的运行结果 ![](https://img-ask.csdn.net/upload/201703/08/1488980820_560073.png)

java多线程读取hbase, 是单例一个client供所有线程使用好呢 ,还是每个线程自己创建线程好呢

java多线程读取hbase, 是单例一个client供所有线程使用好呢 ,还是每个线程自己创建线程好呢 我想明白 ,单例client 与 new 多个client 想比较, 的优缺点和用处

java线程暂停和唤醒问题

java线程如何暂停,暂停的时间未知。之后又可以在程序中唤醒呢?

java 多线程返回list对象

实现接口Callable,能给个例子吗?要求返回ArrayList<CustomOrderBean>();对象

刚开始学习java 多线程遇到的问题

今天刚看的多线程教程 结合网上的实例,自己改的简单代码 结果运行一晃眼 jvm就停了 如图: ![图片说明](https://img-ask.csdn.net/upload/201504/16/1429172697_673097.png) ![图片说明](https://img-ask.csdn.net/upload/201504/16/1429172779_809589.png) 控制台: ![图片说明](https://img-ask.csdn.net/upload/201504/16/1429172804_913970.png) 求友人明示

java多线程中的static和voilate

最近研究voilate原理的时候发现一个问题,voilate关键字是保证多个线程私有内存变量与主内存变量保持一致,来实现线程的可见性,突然有个问题,将变量申明为static,使多个实例共享这个变量不也可以实现多线程共享变量吗?那voliate存在的意义是啥?还不能保证原子性。有没有人帮忙分析下static和voilate

关于java多线程中的join方法

1、主线程可能在子线程结束之前 结束吗?如果可能的话 举一个例子 2、如何理解join方法, 结合实际应用、 非常感谢非常感谢!!!

Java写交易客户端(多线程、对象数据传送等简单问题)

有如下几个类: 1、Ticker类 //此Ticker为简单java类,其属性与服务器传来的json字段对应,通过Decoder类反系列化json //反系列化以后的数据,用以做逻辑判断,符合逻辑,则向服务器发出某种请求 public class Ticker implements Serializable { private static final long serialVersionUID = 2015022601L; private volatile Double buy; private volatile Double contractId; public void setBuy(Double buy) { this.buy = buy; } public void setContractId(Double contractId) { this.contractId = contractId; } } public Double getBuy() { return buy; } public BigDecimal getContractId() { return contractId; } public Ticker() { super(); } public Ticker( Double buy, Double contractId) { this.buy = buy; this.contractId = contractId; } } 2、Decoder类 //此类接收服务器传来的json(msg字符串),采用Gson将其反系列化 //此msg消息一直不断推送过来,比如第一次推送{buy:100,contractId:20},下一次可能是{buy:50,contractId:305} public class Decoder implements Abc{ @Override public void onReceive(String msg){ System.out.println(msg); if (msg.contains("ticker")) { Gson gson=new Gson(); Ticker ticker=gson.fromJson(msg, Ticker.class); //反系列化后得到的数据存于ticker对象 } } } 3、Test类 //此类利用反系列化后的数据进行判断,然后向服务器发出某些请求 public class Test{ 此类里需要用到Decoder里得到的ticker对象的buy及contractId属性值, 比如此类一直在做以下判断 if (buy>contractId){ 向服务器发出一次请求 } } 问题: (1),Test类怎么才能得到Decoder类里实例化的ticker对象的属性值(buy,contractId),是在Ticker加上一个构造方法?还是在Decoder类里写一个方法?或者其他?请给出实际代码。 (付:这是一个线程间通讯的问题么?) (2),Decoder类一直每秒几次的转换服务器推送来的json,每一次得到的ticker对象地址不一样,其ticker只有最近一个的属性有用,这样是不是产生了大量的垃圾,还是说虽然地址不一样,但后产生的ticker自动覆盖了前面的ticker对象? (3),如果此程序采用多线程,同时还使用SWT写了一个UI类,是否要再写一个类用来更新ticker对象的属性到UI界面上(或者采用Eclipse数据绑定的办法)? 现在相当于: Decoder类一直不断在进行json转换, UI类一直在把ticker对象的属性数据更新到UI界面(或者用其他办法更新上去), Test类也一直在使用ticker的属性值进行数据的逻辑判断, 此程序是否应该是至少三个线程?那具体怎么实现多线程(每个类都实现Runnable接口?)?主方法是该放在UI类里,还是放在客服端里(Test类是否可作为客服端)? 请请给出具体多线程实现的代码? (4)如果Test类用于逻辑判断的属性值buy和contractId不采用Decoder类里产生的,而是去UI界面上再次取得,那这个取得过程是否与(2)问的解决办法一样? 真心求教,成功发财了发个大红包!

Java多线程 final和static变量

写了一个多线程中有关final和static的例子,遇到问题了。 ``` public class MyThread implements Runnable { int i = 0; int a = 20; static int b = 20; static int c = 20; static int d = 20; final int finalIntNoStatic = a++; static int staticInt = b++; final int finalInt = c++; static final int STATIC_FINAL_INT = d++; @Override public void run() { while (i < 10) { System.out.println("i=" + i + ",finalIntNoStatic=" + finalIntNoStatic + ",a=" + a + ",staticInt=" + staticInt + ",b=" + b + ",finalInt=" + finalInt + ",c=" + c + ",STATIC_FINAL_INT=" + STATIC_FINAL_INT + ",d=" + d); i++; } } } ``` ``` public class MultiThread { public static void main(String[] args) { for (int i = 0; i < 5; i++) { Thread aThread=new Thread(new MyThread()); aThread.start(); } System.out.println("Run in main thread"); } } ``` 最后打印结果为: ``` i=0,finalIntNoStatic=20,a=21,staticInt=20,b=21,finalInt=20,c=25,STATIC_FINAL_INT=20,d=21 Run in main thread i=0,finalIntNoStatic=20,a=21,staticInt=20,b=21,finalInt=23,c=25,STATIC_FINAL_INT=20,d=21 i=1,finalIntNoStatic=20,a=21,staticInt=20,b=21,finalInt=23,c=25,STATIC_FINAL_INT=20,d=21 i=0,finalIntNoStatic=20,a=21,staticInt=20,b=21,finalInt=21,c=25,STATIC_FINAL_INT=20,d=21 i=2,finalIntNoStatic=20,a=21,staticInt=20,b=21,finalInt=23,c=25,STATIC_FINAL_INT=20,d=21 i=0,finalIntNoStatic=20,a=21,staticInt=20,b=21,finalInt=24,c=25,STATIC_FINAL_INT=20,d=21 i=0,finalIntNoStatic=20,a=21,staticInt=20,b=21,finalInt=22,c=25,STATIC_FINAL_INT=20,d=21 i=1,finalIntNoStatic=20,a=21,staticInt=20,b=21,finalInt=20,c=25,STATIC_FINAL_INT=20,d=21 i=1,finalIntNoStatic=20,a=21,staticInt=20,b=21,finalInt=22,c=25,STATIC_FINAL_INT=20,d=21 i=1,finalIntNoStatic=20,a=21,staticInt=20,b=21,finalInt=24,c=25,STATIC_FINAL_INT=20,d=21 i=3,finalIntNoStatic=20,a=21,staticInt=20,b=21,finalInt=23,c=25,STATIC_FINAL_INT=20,d=21 i=1,finalIntNoStatic=20,a=21,staticInt=20,b=21,finalInt=21,c=25,STATIC_FINAL_INT=20,d=21 i=4,finalIntNoStatic=20,a=21,staticInt=20,b=21,finalInt=23,c=25,STATIC_FINAL_INT=20,d=21 i=2,finalIntNoStatic=20,a=21,staticInt=20,b=21,finalInt=24,c=25,STATIC_FINAL_INT=20,d=21 i=2,finalIntNoStatic=20,a=21,staticInt=20,b=21,finalInt=22,c=25,STATIC_FINAL_INT=20,d=21 i=2,finalIntNoStatic=20,a=21,staticInt=20,b=21,finalInt=20,c=25,STATIC_FINAL_INT=20,d=21 i=3,finalIntNoStatic=20,a=21,staticInt=20,b=21,finalInt=22,c=25,STATIC_FINAL_INT=20,d=21 i=3,finalIntNoStatic=20,a=21,staticInt=20,b=21,finalInt=24,c=25,STATIC_FINAL_INT=20,d=21 i=5,finalIntNoStatic=20,a=21,staticInt=20,b=21,finalInt=23,c=25,STATIC_FINAL_INT=20,d=21 i=2,finalIntNoStatic=20,a=21,staticInt=20,b=21,finalInt=21,c=25,STATIC_FINAL_INT=20,d=21 i=6,finalIntNoStatic=20,a=21,staticInt=20,b=21,finalInt=23,c=25,STATIC_FINAL_INT=20,d=21 i=4,finalIntNoStatic=20,a=21,staticInt=20,b=21,finalInt=24,c=25,STATIC_FINAL_INT=20,d=21 i=4,finalIntNoStatic=20,a=21,staticInt=20,b=21,finalInt=22,c=25,STATIC_FINAL_INT=20,d=21 i=3,finalIntNoStatic=20,a=21,staticInt=20,b=21,finalInt=20,c=25,STATIC_FINAL_INT=20,d=21 i=5,finalIntNoStatic=20,a=21,staticInt=20,b=21,finalInt=22,c=25,STATIC_FINAL_INT=20,d=21 i=5,finalIntNoStatic=20,a=21,staticInt=20,b=21,finalInt=24,c=25,STATIC_FINAL_INT=20,d=21 i=7,finalIntNoStatic=20,a=21,staticInt=20,b=21,finalInt=23,c=25,STATIC_FINAL_INT=20,d=21 i=3,finalIntNoStatic=20,a=21,staticInt=20,b=21,finalInt=21,c=25,STATIC_FINAL_INT=20,d=21 i=8,finalIntNoStatic=20,a=21,staticInt=20,b=21,finalInt=23,c=25,STATIC_FINAL_INT=20,d=21 i=6,finalIntNoStatic=20,a=21,staticInt=20,b=21,finalInt=24,c=25,STATIC_FINAL_INT=20,d=21 i=6,finalIntNoStatic=20,a=21,staticInt=20,b=21,finalInt=22,c=25,STATIC_FINAL_INT=20,d=21 i=4,finalIntNoStatic=20,a=21,staticInt=20,b=21,finalInt=20,c=25,STATIC_FINAL_INT=20,d=21 i=7,finalIntNoStatic=20,a=21,staticInt=20,b=21,finalInt=22,c=25,STATIC_FINAL_INT=20,d=21 i=7,finalIntNoStatic=20,a=21,staticInt=20,b=21,finalInt=24,c=25,STATIC_FINAL_INT=20,d=21 i=9,finalIntNoStatic=20,a=21,staticInt=20,b=21,finalInt=23,c=25,STATIC_FINAL_INT=20,d=21 i=4,finalIntNoStatic=20,a=21,staticInt=20,b=21,finalInt=21,c=25,STATIC_FINAL_INT=20,d=21 i=8,finalIntNoStatic=20,a=21,staticInt=20,b=21,finalInt=24,c=25,STATIC_FINAL_INT=20,d=21 i=8,finalIntNoStatic=20,a=21,staticInt=20,b=21,finalInt=22,c=25,STATIC_FINAL_INT=20,d=21 i=5,finalIntNoStatic=20,a=21,staticInt=20,b=21,finalInt=20,c=25,STATIC_FINAL_INT=20,d=21 i=9,finalIntNoStatic=20,a=21,staticInt=20,b=21,finalInt=22,c=25,STATIC_FINAL_INT=20,d=21 i=9,finalIntNoStatic=20,a=21,staticInt=20,b=21,finalInt=24,c=25,STATIC_FINAL_INT=20,d=21 i=5,finalIntNoStatic=20,a=21,staticInt=20,b=21,finalInt=21,c=25,STATIC_FINAL_INT=20,d=21 i=6,finalIntNoStatic=20,a=21,staticInt=20,b=21,finalInt=20,c=25,STATIC_FINAL_INT=20,d=21 i=6,finalIntNoStatic=20,a=21,staticInt=20,b=21,finalInt=21,c=25,STATIC_FINAL_INT=20,d=21 i=7,finalIntNoStatic=20,a=21,staticInt=20,b=21,finalInt=20,c=25,STATIC_FINAL_INT=20,d=21 i=7,finalIntNoStatic=20,a=21,staticInt=20,b=21,finalInt=21,c=25,STATIC_FINAL_INT=20,d=21 i=8,finalIntNoStatic=20,a=21,staticInt=20,b=21,finalInt=20,c=25,STATIC_FINAL_INT=20,d=21 i=8,finalIntNoStatic=20,a=21,staticInt=20,b=21,finalInt=21,c=25,STATIC_FINAL_INT=20,d=21 i=9,finalIntNoStatic=20,a=21,staticInt=20,b=21,finalInt=20,c=25,STATIC_FINAL_INT=20,d=21 i=9,finalIntNoStatic=20,a=21,staticInt=20,b=21,finalInt=21,c=25,STATIC_FINAL_INT=20,d=21 ``` 我的问题是为什么c的值一直是25,,编译和运行过程中finalInt和c的赋值顺序是怎样的

通过线程将数据库读取的数据放在java队列,然后通过多线程处理数据的解决办法

各位大神,求帮助,我现在项目中有一个需求,对9张单表的有增删改的操作的时候 将数据通过单线程的方式放入java队列中,然后通过多线程的方式下发。我会建一张 下发失败的表,如果通过java队列下发失败了的数据会存入下发表,等待下次下发。 现在我做的是在这9张表有增、删、改、操作的时候通过队列管理器将数据放入队列中,然后用多线程的方式下发。 现在求助大家的是前面的步骤,就是队列管理器中的功能,也就是单线程放数据到队列中及通过队列多线程下发的步骤。由于小弟未在项目中真正的写过多线程的实例,特真心请求大神帮助,帮忙修改下代码的逻辑,小弟写了个初稿,肯定未完善,请大神帮忙完善下,多多考虑,非常感谢大家了! 以下是我初写的队列管理器的功能。请大神帮忙修改下,谢了 public class TaskQueueManage { public static BlockingQueue<Object> queue; private TaskQueueManage() { queue = new LinkedBlockingQueue<Object>(); } private static volatile TaskQueueManage instance; public static TaskQueueManage getIstance() { if (instance == null) { synchronized (TaskQueueManage.class) { if (instance == null) { instance = new TaskQueueManage(); } } } return instance; } //用线程将数据库中有增、删 、改操作的数据放入队列中 public static void put(final Object obj) { Runnable runnable = new Runnable() { @Override public void run() { try { //将读取的数据库的数据放入队列 queue.put(obj); } catch (Exception e) { } } }; Thread thread = new Thread(runnable); thread.start(); } //用多线程取出队列中的数据 public static void take() { //下发用线程池,将用多线程进行下发 ExecutorService service = Executors.newScheduledThreadPool(5); Runnable runnable = new Runnable() { @Override public void run() { try { Object obj = queue.take(); //取出数据,待操作.... } catch (Exception e) { } } }; service.equals(runnable); } } 真心求大家的帮助,谢谢了!

java多线程问题,java 编程思想书中的例子

在看java编程思想书中的多线程一节,书中对wait,notify,notifyall举了一个例子,模拟给汽车涂蜡和抛光的过程, 因为抛光任务在涂蜡之前是不能尽兴的,反之,涂蜡任务在涂另外一层蜡之前,必须要等抛光任务结束。代码如下: 显示一个汽车类: class Car{ private boolean wanOn=false; public synchronized void waxed(){ waxOn=true; notifyAll(); } public synchronized void buffed(){ waxOn=false; notifyAll(); } public synchronized void waitForWaxing(){ while(waxOn==false){ wait(); } } public synchronized void waitForBuffint(){ while(waxOn==true){ wait; } } } 我想知道为什么在waitForWaxing和waitForBuffint方法中,需要用while循环,而不是 用if来进行判断呢? 谢谢

java 线程休眠时 结束并立即实例化该线程遇到的问题

![图片说明](https://img-ask.csdn.net/upload/201705/01/1493608530_524231.png)![图片说明](https://img-ask.csdn.net/upload/201705/01/1493608374_467117.png)![图片说明](https://img-ask.csdn.net/upload/201705/01/1493608561_985947.png) 为什么啊,按道理两个线程变量间应该不存在关系,同时实例化2个也应该是各运行各的,退一步说,如果两个线程变量指向同一个实例,也不能结束标志都出来了,还能接着运行吧。 如果不在上一个线程休眠时实例化下一个线程,就不会出现上述问题![图片说明](https://img-ask.csdn.net/upload/201705/01/1493609121_900585.png)

大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了

大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...

在中国程序员是青春饭吗?

今年,我也32了 ,为了不给大家误导,咨询了猎头、圈内好友,以及年过35岁的几位老程序员……舍了老脸去揭人家伤疤……希望能给大家以帮助,记得帮我点赞哦。 目录: 你以为的人生 一次又一次的伤害 猎头界的真相 如何应对互联网行业的「中年危机」 一、你以为的人生 刚入行时,拿着傲人的工资,想着好好干,以为我们的人生是这样的: 等真到了那一天,你会发现,你的人生很可能是这样的: ...

程序员请照顾好自己,周末病魔差点一套带走我。

程序员在一个周末的时间,得了重病,差点当场去世,还好及时挽救回来了。

ArrayList源码分析(入门篇)

ArrayList源码分析 前言: 写这篇博客的主要原因是,在我上一次参加千牵科技Java实习生面试时,有被面试官问到ArrayList为什么查找的速度较快,插入和删除的速度较慢?当时我回答得不好,很大的一部分原因是因为我没有阅读过ArrayList源码,虽然最后收到Offer了,但我拒绝了,打算寒假学得再深入些再广泛些,下学期开学后再去投递其他更好的公司。为了更加深入理解ArrayList,也为

我以为我学懂了数据结构,直到看了这个导图才发现,我错了

数据结构与算法思维导图

String s = new String(" a ") 到底产生几个对象?

老生常谈的一个梗,到2020了还在争论,你们一天天的,哎哎哎,我不是针对你一个,我是说在座的各位都是人才! 上图红色的这3个箭头,对于通过new产生一个字符串(”宜春”)时,会先去常量池中查找是否已经有了”宜春”对象,如果没有则在常量池中创建一个此字符串对象,然后堆中再创建一个常量池中此”宜春”对象的拷贝对象。 也就是说准确答案是产生了一个或两个对象,如果常量池中原来没有 ”宜春” ,就是两个。...

技术大佬:我去,你写的 switch 语句也太老土了吧

昨天早上通过远程的方式 review 了两名新来同事的代码,大部分代码都写得很漂亮,严谨的同时注释也很到位,这令我非常满意。但当我看到他们当中有一个人写的 switch 语句时,还是忍不住破口大骂:“我擦,小王,你丫写的 switch 语句也太老土了吧!” 来看看小王写的代码吧,看完不要骂我装逼啊。 private static String createPlayer(PlayerTypes p...

和黑客斗争的 6 天!

互联网公司工作,很难避免不和黑客们打交道,我呆过的两家互联网公司,几乎每月每天每分钟都有黑客在公司网站上扫描。有的是寻找 Sql 注入的缺口,有的是寻找线上服务器可能存在的漏洞,大部分都...

讲一个程序员如何副业月赚三万的真实故事

loonggg读完需要3分钟速读仅需 1 分钟大家好,我是你们的校长。我之前讲过,这年头,只要肯动脑,肯行动,程序员凭借自己的技术,赚钱的方式还是有很多种的。仅仅靠在公司出卖自己的劳动时...

上班一个月,后悔当初着急入职的选择了

最近有个老铁,告诉我说,上班一个月,后悔当初着急入职现在公司了。他之前在美图做手机研发,今年美图那边今年也有一波组织优化调整,他是其中一个,在协商离职后,当时捉急找工作上班,因为有房贷供着,不能没有收入来源。所以匆忙选了一家公司,实际上是一个大型外包公司,主要派遣给其他手机厂商做外包项目。**当时承诺待遇还不错,所以就立马入职去上班了。但是后面入职后,发现薪酬待遇这块并不是HR所说那样,那个HR自...

女程序员,为什么比男程序员少???

昨天看到一档综艺节目,讨论了两个话题:(1)中国学生的数学成绩,平均下来看,会比国外好?为什么?(2)男生的数学成绩,平均下来看,会比女生好?为什么?同时,我又联想到了一个技术圈经常讨...

副业收入是我做程序媛的3倍,工作外的B面人生是怎样的?

提到“程序员”,多数人脑海里首先想到的大约是:为人木讷、薪水超高、工作枯燥…… 然而,当离开工作岗位,撕去层层标签,脱下“程序员”这身外套,有的人生动又有趣,马上展现出了完全不同的A/B面人生! 不论是简单的爱好,还是正经的副业,他们都干得同样出色。偶尔,还能和程序员的特质结合,产生奇妙的“化学反应”。 @Charlotte:平日素颜示人,周末美妆博主 大家都以为程序媛也个个不修边幅,但我们也许...

MySQL数据库面试题(2020最新版)

文章目录数据库基础知识为什么要使用数据库什么是SQL?什么是MySQL?数据库三大范式是什么mysql有关权限的表都有哪几个MySQL的binlog有有几种录入格式?分别有什么区别?数据类型mysql有哪些数据类型引擎MySQL存储引擎MyISAM与InnoDB区别MyISAM索引与InnoDB索引的区别?InnoDB引擎的4大特性存储引擎选择索引什么是索引?索引有哪些优缺点?索引使用场景(重点)...

如果你是老板,你会不会踢了这样的员工?

有个好朋友ZS,是技术总监,昨天问我:“有一个老下属,跟了我很多年,做事勤勤恳恳,主动性也很好。但随着公司的发展,他的进步速度,跟不上团队的步伐了,有点...

我入职阿里后,才知道原来简历这么写

私下里,有不少读者问我:“二哥,如何才能写出一份专业的技术简历呢?我总感觉自己写的简历太烂了,所以投了无数份,都石沉大海了。”说实话,我自己好多年没有写过简历了,但我认识的一个同行,他在阿里,给我说了一些他当年写简历的方法论,我感觉太牛逼了,实在是忍不住,就分享了出来,希望能够帮助到你。 01、简历的本质 作为简历的撰写者,你必须要搞清楚一点,简历的本质是什么,它就是为了来销售你的价值主张的。往深...

玩转springboot启动banner定义所得

最近接手了一个springboot项目,不是不熟悉这个框架,启动时打印的信息吸引了我。 这不是我熟悉的常用springboot的打印信息啊,我打开自己的项目: 还真是的,不用默认的感觉也挺高大上的。一时兴起,就去研究了一下源代码,还正是有些收获,稍后我会总结一下。正常情况下做为一个老程序员,是不会对这种小儿科感兴趣的,不就是一个控制台打印嘛。哈哈! 于是出于最初的好奇,研究了项目的源代码。看到

带了6个月的徒弟当了面试官,而身为高级工程师的我天天修Bug......

即将毕业的应届毕业生一枚,现在只拿到了两家offer,但最近听到一些消息,其中一个offer,我这个组据说客户很少,很有可能整组被裁掉。 想问大家: 如果我刚入职这个组就被裁了怎么办呢? 大家都是什么时候知道自己要被裁了的? 面试软技能指导: BQ/Project/Resume 试听内容: 除了刷题,还有哪些技能是拿到offer不可或缺的要素 如何提升面试软实力:简历, 行为面试,沟通能...

离职半年了,老东家又发 offer,回不回?

有小伙伴问松哥这个问题,他在上海某公司,在离职了几个月后,前公司的领导联系到他,希望他能够返聘回去,他很纠结要不要回去? 俗话说好马不吃回头草,但是这个小伙伴既然感到纠结了,我觉得至少说明了两个问题:1.曾经的公司还不错;2.现在的日子也不是很如意。否则应该就不会纠结了。 老实说,松哥之前也有过类似的经历,今天就来和小伙伴们聊聊回头草到底吃不吃。 首先一个基本观点,就是离职了也没必要和老东家弄的苦...

男生更看重女生的身材脸蛋,还是思想?

往往,我们看不进去大段大段的逻辑。深刻的哲理,往往短而精悍,一阵见血。问:产品经理挺漂亮的,有点心动,但不知道合不合得来。男生更看重女生的身材脸蛋,还是...

为什么程序员做外包会被瞧不起?

二哥,有个事想询问下您的意见,您觉得应届生值得去外包吗?公司虽然挺大的,中xx,但待遇感觉挺低,马上要报到,挺纠结的。

当HR压你价,说你只值7K,你该怎么回答?

当HR压你价,说你只值7K时,你可以流畅地回答,记住,是流畅,不能犹豫。 礼貌地说:“7K是吗?了解了。嗯~其实我对贵司的面试官印象很好。只不过,现在我的手头上已经有一份11K的offer。来面试,主要也是自己对贵司挺有兴趣的,所以过来看看……”(未完) 这段话主要是陪HR互诈的同时,从公司兴趣,公司职员印象上,都给予对方正面的肯定,既能提升HR的好感度,又能让谈判气氛融洽,为后面的发挥留足空间。...

面试:第十六章:Java中级开发(16k)

HashMap底层实现原理,红黑树,B+树,B树的结构原理 Spring的AOP和IOC是什么?它们常见的使用场景有哪些?Spring事务,事务的属性,传播行为,数据库隔离级别 Spring和SpringMVC,MyBatis以及SpringBoot的注解分别有哪些?SpringMVC的工作原理,SpringBoot框架的优点,MyBatis框架的优点 SpringCould组件有哪些,他们...

面试阿里p7,被按在地上摩擦,鬼知道我经历了什么?

面试阿里p7被问到的问题(当时我只知道第一个):@Conditional是做什么的?@Conditional多个条件是什么逻辑关系?条件判断在什么时候执...

终于懂了TCP和UDP协议区别

终于懂了TCP和UDP协议区别

你打算用Java 8一辈子都不打算升级到Java 14,真香

我们程序员应该抱着尝鲜、猎奇的心态,否则就容易固步自封,技术停滞不前。

无代码时代来临,程序员如何保住饭碗?

编程语言层出不穷,从最初的机器语言到如今2500种以上的高级语言,程序员们大呼“学到头秃”。程序员一边面临编程语言不断推陈出新,一边面临由于许多代码已存在,程序员编写新应用程序时存在重复“搬砖”的现象。 无代码/低代码编程应运而生。无代码/低代码是一种创建应用的方法,它可以让开发者使用最少的编码知识来快速开发应用程序。开发者通过图形界面中,可视化建模来组装和配置应用程序。这样一来,开发者直...

面试了一个 31 岁程序员,让我有所触动,30岁以上的程序员该何去何从?

最近面试了一个31岁8年经验的程序猿,让我有点感慨,大龄程序猿该何去何从。

大三实习生,字节跳动面经分享,已拿Offer

说实话,自己的算法,我一个不会,太难了吧

程序员垃圾简历长什么样?

已经连续五年参加大厂校招、社招的技术面试工作,简历看的不下于万份 这篇文章会用实例告诉你,什么是差的程序员简历! 疫情快要结束了,各个公司也都开始春招了,作为即将红遍大江南北的新晋UP主,那当然要为小伙伴们做点事(手动狗头)。 就在公众号里公开征简历,义务帮大家看,并一一点评。《启舰:春招在即,义务帮大家看看简历吧》 一石激起千层浪,三天收到两百多封简历。 花光了两个星期的所有空闲时...

《经典算法案例》01-08:如何使用质数设计扫雷(Minesweeper)游戏

我们都玩过Windows操作系统中的经典游戏扫雷(Minesweeper),如果把质数当作一颗雷,那么,表格中红色的数字哪些是雷(质数)?您能找出多少个呢?文中用列表的方式罗列了10000以内的自然数、质数(素数),6的倍数等,方便大家观察质数的分布规律及特性,以便对算法求解有指导意义。另外,判断质数是初学算法,理解算法重要性的一个非常好的案例。

立即提问
相关内容推荐