Hacker News new | ask | show | jobs
by timmg 16 days ago
My first ever programming interview was like a group interview. There were three or four programmers asking me questions, one at a time.

The only one I remember was to check if two strings were equal (in C). I wrote (maybe buggy) code to iterate both pointers, comparing while looking for the null terminator.

The interviewer stopped me and said, “You should compare their lengths first. If they are different, you can exit early.”

I was pretty young and didn’t know much, but I explained, “But you have to look for the terminator to find length so it’ll take twice as long.”

He snapped, “There are optimized functions for that!”

I assumed he was right. Needless to say, I didn’t get the job.

Maaaany years later, I realized the std library was probably open source. So I checked (one). It was nice to be vindicated :D

4 comments

On the upside, think how annoying it would have been to be part of that team and have a boss that doesn't have any ability to admit he is wrong.
Yep, sounds like a bullet dodged there.
Funny how often "there are optimized functions for that" really means "I haven't thought through what the optimized function actually has to do"
C is pretty bizarre but I expect someone writing it professionally to know that even passing void compareStrings(char str1[], char str2[]) is equivalent to compareStrings(char * str1, char * str2) so no way to get the length of it with sizeof(str1) and strlen walks the string until it finds the null terminator.
No, it's not bizarre, it's standardized on what is and isn't UB based on history, and usually for performance.

NUL-terminated strings don't know their lengths and so, without an "n" variant function and running strlen() ahead-of-time, must iterate the entire thing. Pascal format strings (supported up to 255 byte lengths in the classic form) could find length as an O(1) operation because there was no terminator necessarily.

It is bizarre. C is bizarre, there is no string type and there should've been a string type. scanf is an invitation for buffer overflow attacks. I know how poorly designed languages look like and C despite its strengths is still a poorly designed language.
"Group interviews" produce horrible, unfair dynamics.

Snapping with know-it-all arrogance is toxic and doesn't help anyone. You were correct because strcmp has to iterate both strings, just like strlen would.. and it's totally pointless.

    #include <string.h>
    /* C89 and handles NULL and overlapping strings */
    int strequal(const char *a, const char *b) {
            return (a == b || (a != NULL && b != NULL && strcmp(a, b) == 0));
    }
I think you dodged several bullets by not getting hired there because they sounded insufferable.