C++ 多线程同步问题?
#include <iostream>
#include <thread>
#include <string>
#include <vector>
#include <mutex>
#include <condition_variable>
#include <map>
#include <ctime>
#include <random>
#include <chrono>
#include <unistd.h>

#define NUM_OF_SAMPLES 50
#define MAX_NUM_OF_THREADS 6

using namespace std;

class Sensor {
private:
    string sensorType;

public:
    Sensor(string& type) : sensorType(type){}

    //Declare a virtual method to be overridden by derived classes:
    virtual double getValue() = 0;

    //Declare non-virtual method:
    string getType() {
        return sensorType;
    }
};

class TempSensor : public Sensor {
public:
    TempSensor(string& s) : Sensor(s) {}

    double getValue() {
        return (double)rand() / ((double)RAND_MAX / 20) + 10;
    }
};

class PressureSensor : public Sensor {
public:
    PressureSensor(string& type) : Sensor(type) {}

    double getValue() {
        return (double)rand() / ((double)RAND_MAX / 10) + 95;
    }
};

class CapacitiveSensor : public Sensor {
public:
    CapacitiveSensor(string& type) : Sensor(type) {}

    double getValue() {
        return (double)rand() / ((double)RAND_MAX / 4) + 1;
    }
};

class BC {
private:
    bool lock = false; //'false' means that the BC is not locked
    vector<Sensor *>& theSensors; //reference to vector of Sensor pointers
    mutex BC_mu;
    condition_variable cv;
    map<int, string> sensorMap;
    map<int, int> countMap;

public:
    BC(vector<Sensor *>& sensors) : theSensors(sensors) {
        sensorMap.insert(pair<int, string>(0, "temperature"));
        sensorMap.insert(pair<int, string>(1, "pressure"));
        sensorMap.insert(pair<int, string>(2, "capacitive"));
    }

    void requestBC(int index) {
        unique_lock<mutex> lk(BC_mu);
        if (lock) {
            cout << "BusController is locked, thread " << index << " is about to suspend.." << endl;
            cv.wait(lk);
        }
        lock = true;
        cout << " BusController locked by thread " << index << endl;
        return;
    }

    double getSensorValue(int selector) {
        countMap[selector]++;
        return theSensors[selector]->getValue();
    }

    void releaseBC(int index) {
        unique_lock<mutex> lk(BC_mu);
        lock = false;
        cout << "BusController unlock by thread " << index << endl;
        cv.notify_one();
    }

    string getSensorType(int selector) {
        return sensorMap[selector];
    }

    void printCntSensorType() {
        for (auto it = countMap.begin(); it != countMap.end(); it++) {
            cout << sensorMap[it->first] << " accessed " << it->second << " times" << endl;
        }
    }
};


void run(BC& theBC, int index) {
    random_device rd;
    mt19937 gen(rd());
    uniform_int_distribution<> dis1(0, 2);
    uniform_int_distribution<> dis2(1000, 10000);

    for (int i = 0; i < NUM_OF_SAMPLES; i++) {
        theBC.requestBC(index);
        int sensorTypeIndex = dis1(gen);
        string sensorStr = theBC.getSensorType(sensorTypeIndex);
        double randSensorValue = theBC.getSensorValue(sensorTypeIndex);
        cout << "       sample value from thread " << index << " from " << sensorStr << " sensor = " << randSensorValue << endl;
        theBC.releaseBC(index);
        usleep(dis2(gen));
     }
}

int main() {
    vector<Sensor *> sensors;
    string temp = "temperature", pressure = "pressure", capa = "capacitive";
    sensors.push_back(new TempSensor(temp));
    sensors.push_back(new PressureSensor(pressure));
    sensors.push_back(new CapacitiveSensor(capa));

    BC theBC(ref(sensors));
    thread theThreads[MAX_NUM_OF_THREADS];
    for (int i = 0; i < MAX_NUM_OF_THREADS; i++) {
        theThreads[i] = thread(run, ref(theBC), i);
    }
    for (int i = 0; i < MAX_NUM_OF_THREADS; i++) {
        theThreads[i].join();
    }
    theBC.printCntSensorType();
    return 0;
}

代码如上所示,主要实现的功能是六个线程去抢占BC类,然后选择不同的sensor进行输出,但是BC类中关于线程的同步机制觉得存在问题,求大神指导。

1个回答

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
多线程同步问题,向大家请教~

是这样,主线程是处理使用各传感器的数据,从线程是对数据进行预处理。 程序形式为: 主线程: while(1) { Sleep(100); send_frame(a,b); } 辅线程: while(1) { //各种处理 a=XXX; b=XXX; } 辅线程中的a、b都是在不断变的,并且辅线程计算量较大 现发现在主线程中接收的辅线程数据有较大延时,将辅线程处理过程单独写为一个程序可以在1ms内就计算完成,此处多线程程序应如何处理

多线程同步方案同步选择

在WIN32的C++多线程开发中的生产消费使用的同步方案中,一般会采用 条件变量,来做为等待判断的条件。 我在网狐的工作线程中看见了一种新的使用方法: 工作线程使用 GetQueuedCompletionStatus 等待事件触发。 生产线程使用 PostQueuedCompletionStatus 产生消息,另 GetQueuedCompletionStatus 触发执行。 我在网络中找资料,并没有关于多线程 同步使用 IOCP 完型端口的案例。 都是使用信号量,互斥,临界,事件,性能上临界的性能相对较优,我看了网狐的实现方式,这种采用 IOCP的方法反而是最简单的。 问题来了: 使用IOCP 作为生产消费的实现方案,有什么优势或者相关的资料呢?国内网络找到的都是清一色的网络编程的异步I/O。

linux C++多线程 同步问题 要求实时性 如何解决

有这样一个问题 , 我现在做一个控制器 当接收到界面 几类数据之后 ,分类计算运行。要求是接收到数据后就可以立马运行,有没有什么好的思路,大家帮忙想一想。 使用互斥锁会有延时 情况

android 多线程线程如何同步

定义了三个线程public Thread thread1,thread2,thread3;分别执行操作,请问如何让这三个线程同步,贴出我的代码 public class MainActivity extends AppCompatActivity { public static SQLiteDatabase db; public static Person person; public Thread thread1,thread2,thread3; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); db = openOrCreateDatabase("test.db", Context.MODE_PRIVATE, null); db.execSQL("DROP TABLE IF EXISTS person"); db.execSQL("CREATE TABLE person (_id INTEGER PRIMARY KEY AUTOINCREMENT, name VARCHAR, age SMALLINT)"); person = new Person(); person.name = "john"; person.age = 30;; db.execSQL("INSERT INTO person VALUES (NULL, ?, ?)", new Object[]{person.name, person.age}); person.name = "david"; person.age = 33; ContentValues cv = new ContentValues(); cv.put("name", person.name); cv.put("age", person.age); person.name = "dasdd"; person.age = 33; ContentValues cv1 = new ContentValues(); cv1.put("name", person.name); cv1.put("age", person.age); person.name = "dasdd"; person.age = 88; ContentValues cv2 = new ContentValues(); cv2.put("name", person.name); cv2.put("age", person.age); db.insert("person", null, cv); db.insert("person", null, cv1); db.insert("person", null, cv2); thread1 = new Thread(new Runnable() { @Override public void run() { person.name = "abc"; person.age = 100; ContentValues cv = new ContentValues(); cv.put("name", person.name); cv.put("age", person.age); person.name = "axt"; person.age = 67; ContentValues cv1 = new ContentValues(); cv1.put("name", person.name); cv1.put("age", person.age); int i =1; while (i<10){ db.insert("person", null, cv); db.insert("person", null, cv1); i++; } } }); thread1.start();; thread2 = new Thread(new Runnable() { @Override public void run() { person.name = "张"; person.age = 47; ContentValues cv1 = new ContentValues(); cv1.put("name", person.name); cv1.put("age", person.age); person.name = "QQQ"; person.age = 999; ContentValues cv = new ContentValues(); cv.put("name", person.name); cv.put("age", person.age); db.insert("person", null, cv); db.insert("person", null, cv1); } }); thread2.start(); thread3 =new Thread(new Runnable() { @Override public void run() { Cursor c= db.rawQuery("SELECT * FROM person WHERE age >= ?",new String[]{"30"}); while (c.moveToNext()) { int _id = c.getInt(c.getColumnIndex("_id")); String name = c.getString(c.getColumnIndex("name")); int age = c.getInt(c.getColumnIndex("age")); Log.i("db", "_id=>" + _id + ", name=>" + name + ", age=>" + age); //c.close(); } } }); thread3.start(); // // db.delete("person", "age < ?", new String[]{"35"}); // db.close(); // deleteDatabase("test.db"); } public class Person{ String name; Integer age; } public synchronized void same(){ try { Thread.sleep(300); } catch (InterruptedException e) { e.printStackTrace(); } } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu_main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); //noinspection SimplifiableIfStatement if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } } 求大神指点synchronized方法要怎么用?

多线程同步银行多账户取钱

最近一直在想一个多线程的问题,举个例子 比如javaweb银行项目,同时两个人在异地个存取200元如何保证不出差错。 两个人在异地同时登陆的话其实在系统中是属于两个数据相同的对象(spring+hibernate)如果使用对象的排它锁也不会起作用。这种需求应该怎样实现那?

java实现同步多线程的问题

卖票的代码,无法实现完整的多线程,只有一两个线程会输出。 import java.util.Scanner; class MyThread implements Runnable{ private int ticket; //票数 private String name; //线程名称 public MyThread() { super(); } public MyThread(int ticket,String name) { super(); this.ticket = ticket; this.name = name; } public int getTicket() { return ticket; } public void setTicket(int ticket) { this.ticket = ticket; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public void run() { //控制线程输出 int t = this.ticket; synchronized(this){ //同步线程 for(int i = 1;i<=t;i++) { if(this.ticket>0) { System.out.println(this.name+",当前余票是:"+(this.ticket-1)+".售出票号是:"+i); } this.ticket--; } } } } public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); System.out.println("请输入总的票数:"); int ticketNum = in.nextInt(); System.out.println("请输入窗口数目:"); int num = in.nextInt(); MyThread mt = new MyThread(); for(int i = 1;i<=num;i++) { mt.setName("售票窗口"+i+"正在售票"); mt.setTicket(ticketNum); new Thread(mt).start(); } } } 以下为代码运行结果: ![图片说明](https://img-ask.csdn.net/upload/202004/07/1586264166_214853.png) 麻烦大佬们解答一下,谢谢! ps:为什么在主方法的设置多线程for循环那里,将创建和实例化对象放入for循环中,就无法实现同步线程呢?

windows编程C语言,多线程共用一个变量,怎么保证从读取到修改之间,这个变量没有被别的线程改动

如线程 void thread(...){ while(1){ ... result=calculate(); if(result>GloBestResult){ GloBestResult=result; } } } 建立多个线程加快速度,但是如GloBestResult=1, 线程a和b计算的result分别为2和3匀大于GloBestResult,而b线先改动GloBestReult 然后轮到线程a,那3这个结果就被覆盖了。 怎么解决,加入信号量吗?会不会杀鸡用宰牛刀了,毕竟冲突的情况是极少数,信号量申请那可是上百万次。 不太想分别统计各个线程的BestResult最后再汇总到GloBestResult

嵌入式多线程开发,多线程共享数据什么时候需要使用volatile?

一般我们在多线程开发过程中,多个线程共享的全局变量或数据的时候都需要加互斥锁或者用信号量同步。 但是有的时候编译器还会优化的,例如写一个变量的时候,可能没有写到内存中,只是写在了本地的寄存器中, 这样多线程的时候一个线程修改了一个变量,另一个线程可能是不知道的,所以我认为多线程共享的全局变量应该使用volatile声明才安全。 但是在实际开发当中,很少看到多线程全局共享变量加volatile。不知道这样可以保证系统安全吗?

多线程同时修改变量,不做同步

有一个变量a=3,第一个线程内a-=1;第二个线程内a+=2,当两个线程都执行完后,a=?(不做线程同步的情况下)

C++多线程调用JNI的问题

在主线程中可以findclass,但是在子线程中却找不到,找的是同一个class,在子线程正可以找到系统的类,比如java/long/String

多线程真的比单线程执行效率高吗?

对于单核CPU下多线程程序在同一时间点都只能有一个线程运行,对于多核CPU可以实现真正的并发同步运行,这种说法正确吗? 另外在多线程的情况下使用互斥对象来实现线程同步,这样的话多线程程序的运行效率受影响吗?

多线程查询数据的问题

oracle数据库,我设置多线程(1-10)访问数据库的几张表A\B\C(表中均有大概500W数据,索引已做好),1-3访问AB,4-10访问BC,单独执行这些查询基本都在4-6秒左右,但是多线程之后有的线程去查询表需要30多秒。并发查询为何一下效率降低了这么多,是不是两条查询语句访问同一个数据库,其中一条正在查询没结束新来的就要在队列中等待?直到这个查询结束了才执行下一个查询?这种情况该怎么优化?

多线程操作一个单链表List

我已经用C++写好了一个List类,现在想实现下多线程操作List,要求同步增加数据,同时把数据写入同一文件中。小白一枚,求大牛指导。。。

vector,多线程的C问题

我需要用createthread将vector<string>的里的数据输出,求各位帮个忙吧

嵌入式Linux下 多线程对串口读写多影响

我在嵌入式Linux上跑一个多线程多程序,其中一个线程是对串口进行读写,在启动其他计算量很大的线程后,串口读写出现问题,经常发生读写失败多情况。而且在计算量大的线程结束后,对串口读写的影响还是在。再重新运行后串口读写又正常。。。 这是什么原因呢??求各位指点指点。。 还有Linux的线程调度是什么机制的? 有可能串口读写过程中出现,由于系统线程调度的原因造成读写失败吗?

继承thread的线程不能使用同步方法吗

如下代码所示,为什么继承了Thread的线程使用同步方法的时候无法锁住呢?而使用同步代码块就没有问题 ``` package leetcode; import javax.swing.plaf.synth.SynthSeparatorUI; import com.sun.org.apache.xerces.internal.util.SynchronizedSymbolTable; public class mainEntry { public static void main(String[] agrs) { // 创建 3 个窗口 TicketSell t1 = new TicketSell("A窗口"); TicketSell t2 = new TicketSell("B窗口"); TicketSell t3 = new TicketSell("C窗口"); // 启动 3 个窗口进行买票 t1.start(); t2.start(); t3.start(); } } class TicketSell extends Thread { private static int num = 50; public TicketSell(String name) { super(name); } @Override public void run() { for(int i = 0;i<50;i++) sell(); } public synchronized void sell() { if (num > 0) { try { // 模拟卖一次票所需时间 Thread.sleep(10); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(this.currentThread().getName() + "卖出一张票,剩余" + (--num) + "张"); } } } ``` 这是输出 .... A窗口卖出一张票,剩余2张 C窗口卖出一张票,剩余1张 B窗口卖出一张票,剩余0张 A窗口卖出一张票,剩余-1张

线程同步 卖票问题 三个车站卖七张票

正确的写法:public class mainclass { public static void main(String[] args) { Train A=new Train(); Train B=new Train(); Train C=new Train(); A.start(); B.start(); C.start(); } } class Train extends Thread{ public static int ticket=7; public void run(){ { A(); } } public synchronized void A(){ while (ticket>0){ System.out.println("第"+this.getName()+"站卖出第"+ticket--+"张票"); } } } 出现问题的写法:public class mainclass { public static void main(String[] args) { Train A=new Train(); Train B=new Train(); Train C=new Train(); A.start(); B.start(); C.start(); } } class Train extends Thread{ public static int ticket=7; public void run(){ { A(); } } public synchronized void A(){ while (ticket>0){ System.out.println("第"+this.getName()+"站卖出第"+ticket+"张票"); ticket--; } } } 在A()函数之中ticket--的位置不同却出现了两种结果。一种将ticket--写在输出语句里,结果正确,但一种写在输出语句之外就会出现线程同步问题,可是我已经在函数前面加了synchronized,为什么会这样,按理来说两者应该一样啊。

Java多线程写入同一文件该怎么写

创建4个线程,线程A,线程B,线程C,线程D。同时向一个文件夹里写入,线程A写入“A”,线程B写入“B”…… 要求写入内容为 ABCDABCD…… 我是个初学者,有没有大神能教教我该怎么写。

多线程间,变量可见性问题。一个线程会永远看不到另一个线程的更新吗?

作者说,由于读线程可能永远发现不了main对ready变量的修改就会永远循环下去,但是貌似不太可能永远读不到main对ready变量修改之后的值吧,可能会由于从栈区复制回堆区时,有几毫秒的误差,read线程读到的是旧值,但堆区值更新之后,read线程就读到了新值了吧,为什么说会永远循环下去呢?![图片说明](https://img-ask.csdn.net/upload/201603/15/1458021452_370076.png)

多线程问题:使用两个线程交替打印A和B,使用最大打印次数控制,详见代码。

多线程问题:使用两个线程交替打印A和B,使用最大打印次数控制,详见代码。 出现的问题是:当运行线程B中的run()方法时,程序没有先while()判断,而是直接进入了while循环体。 ``` /** * 共享资源:打印机 * @author Tangxkun * */ public class Printer { //最大打印次数 private final int MAX_COUNT = 7; //false表示该打印机未打印A,true表示该打印机正在打印A private boolean printingA = false; private int count = 0; public synchronized void printA(){ System.out.print(count++); printingA = true; System.out.print("A-"); notifyAll(); } public synchronized void printB(){ System.out.print(count++); printingA = false; System.out.print("B-"); notifyAll(); } public synchronized void aWaiting() throws InterruptedException{ while(printingA == true){ wait(); } } public synchronized void bWaiting() throws InterruptedException{ while(printingA == false){ wait(); } } public int getCount() { return count; } public void setCount(int count) { this.count = count; } public int getMAX_COUNT() { return MAX_COUNT; } } ``` ``` /** * 打印A的线程 * @author Tangxkun * */ public class PrintA implements Runnable{ private Printer printer; public PrintA(Printer printer) { super(); this.printer = printer; } @Override public void run() { while(printer.getCount() < printer.getMAX_COUNT()){ printer.printA(); try { printer.aWaiting(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } ``` ``` /** * 打印B的线程 * @author Tangxkun * */ public class PrintB implements Runnable{ private Printer printer; public PrintB(Printer printer) { super(); this.printer = printer; } @Override public void run() { while(printer.getCount() < printer.getMAX_COUNT()){ try { printer.bWaiting(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } printer.printB(); } } } ``` ``` /** * 测试代码 * @author Tangxkun * */ public class Test { public static void main(String[] args) { Printer printer = new Printer(); PrintA printA = new PrintA(printer); PrintB printB = new PrintB(printer); Thread threadA = new Thread(printA,"A"); Thread threadB = new Thread(printB, "B"); threadA.start(); threadB.start(); } } ``` 当设置MAX_COUNT=5时,输出结果为:![图片说明](https://img-ask.csdn.net/upload/201711/24/1511526008_687265.png) 当设置MAX_COUNT=6时,输出结果为:![图片说明](https://img-ask.csdn.net/upload/201711/24/1511526014_297881.png) 当设置MAX_COUNT=7时,输出结果为:![图片说明](https://img-ask.csdn.net/upload/201711/24/1511526022_676099.png) 烧脑了半天还是没有找出端倪,所以来请教一下各位大神!

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

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

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

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

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

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

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

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

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

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

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

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

为什么本科以上学历的人只占中国人口的5%,但感觉遍地都是大学生?

中国大学生占总人口不到5% 2017年,中国整体的本科率仅有5.9%;如果算上研究生,这一比例可以进一步上升到6.5% 为什么在国家统计局推出的这份年鉴中,学历的最高一阶就是到研究生,而没有进一步再统计博士生的数量的。 原因其实并不难理解,相比全国和各省整体人口体量,博士生的占比非常之低,属于绝对意义上的小概率样本。 这一点,我们从上表中的各省研究生占比情况也可以看出端倪。除北京、天津、上海三...

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

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

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

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

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

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

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

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

程序员写出这样的代码,能不挨骂吗?

当你换槽填坑时,面对一个新的环境。能够快速熟练,上手实现业务需求是关键。但是,哪些因素会影响你快速上手呢?是原有代码写的不够好?还是注释写的不够好?昨夜...

外包程序员的幸福生活

今天给你们讲述一个外包程序员的幸福生活。男主是Z哥,不是在外包公司上班的那种,是一名自由职业者,接外包项目自己干。接下来讲的都是真人真事。 先给大家介绍一下男主,Z哥,老程序员,是我十多年前的老同事,技术大牛,当过CTO,也创过业。因为我俩都爱好喝酒、踢球,再加上住的距离不算远,所以一直也断断续续的联系着,我对Z哥的状况也有大概了解。 Z哥几年前创业失败,后来他开始干起了外包,利用自己的技术能...

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

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

优雅的替换if-else语句

场景 日常开发,if-else语句写的不少吧??当逻辑分支非常多的时候,if-else套了一层又一层,虽然业务功能倒是实现了,但是看起来是真的很不优雅,尤其是对于我这种有强迫症的程序"猿",看到这么多if-else,脑袋瓜子就嗡嗡的,总想着解锁新姿势:干掉过多的if-else!!!本文将介绍三板斧手段: 优先判断条件,条件不满足的,逻辑及时中断返回; 采用策略模式+工厂模式; 结合注解,锦...

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

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

记录下入职中软一个月(外包华为)

我在年前从上一家公司离职,没想到过年期间疫情爆发,我也被困在家里,在家呆着的日子让人很焦躁,于是我疯狂的投简历,看面试题,希望可以进大公司去看看。 我也有幸面试了我觉得还挺大的公司的(虽然不是bat之类的大厂,但是作为一名二本计算机专业刚毕业的大学生bat那些大厂我连投简历的勇气都没有),最后选择了中软,我知道这是一家外包公司,待遇各方面甚至不如我的上一家公司,但是对我而言这可是外包华为,能...

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

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

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

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

面试:第十六章:Java中级开发

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

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

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

Python爬虫,高清美图我全都要(彼岸桌面壁纸)

爬取彼岸桌面网站较为简单,用到了requests、lxml、Beautiful Soup4

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

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

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

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

6年开发经验女程序员,面试京东Java岗要求薪资28K

写在开头: 上周面试了一位女程序员,上午10::30来我们部门面试,2B哥接待了她.来看看她的简历: 个人简历 个人技能: ● 熟悉spring mvc 、spring、mybatis 等框架 ● 熟悉 redis 、rocketmq、dubbo、zookeeper、netty 、nginx、tomcat、mysql。 ● 阅读过juc 中的线程池、锁的源...

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

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

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

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

Java岗开发3年,公司临时抽查算法,离职后这几题我记一辈子

前几天我们公司做了一件蠢事,非常非常愚蠢的事情。我原以为从学校出来之后,除了找工作有测试外,不会有任何与考试有关的事儿。 但是,天有不测风云,公司技术总监、人事总监两位大佬突然降临到我们事业线,叫上我老大,给我们组织了一场别开生面的“考试”。 那是一个风和日丽的下午,我翘着二郎腿,左手端着一杯卡布奇诺,右手抓着我的罗技鼠标,滚动着轮轴,穿梭在头条热点之间。 “淡黄的长裙~蓬松的头发...

大牛都会用的IDEA调试技巧!!!

导读 前天面试了一个985高校的实习生,问了他平时用什么开发工具,他想也没想的说IDEA,于是我抛砖引玉的问了一下IDEA的调试用过吧,你说说怎么设置断点...

都前后端分离了,咱就别做页面跳转了!统统 JSON 交互

文章目录1. 无状态登录1.1 什么是有状态1.2 什么是无状态1.3 如何实现无状态1.4 各自优缺点2. 登录交互2.1 前后端分离的数据交互2.2 登录成功2.3 登录失败3. 未认证处理方案4. 注销登录 这是本系列的第四篇,有小伙伴找不到之前文章,松哥给大家列一个索引出来: 挖一个大坑,Spring Security 开搞! 松哥手把手带你入门 Spring Security,别再问密...

立即提问
相关内容推荐